Merge pull request 'Strip trailing whitespace from files' (#2240) from EliasFleckenstein03/MineClone2:fmt into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/2240
This commit is contained in:
commit
96dcfb8a62
@ -603,7 +603,7 @@ function mcl_util.get_pointed_thing(player, liquid)
|
||||
local look_dir = vector.multiply(player:get_look_dir(), 5)
|
||||
local pos2 = vector.add(pos, look_dir)
|
||||
local ray = minetest.raycast(pos, pos2, false, liquid)
|
||||
|
||||
|
||||
if ray then
|
||||
for pointed_thing in ray do
|
||||
return pointed_thing
|
||||
|
@ -1402,7 +1402,7 @@ end
|
||||
-- should mob follow what I'm holding ?
|
||||
local follow_holding = function(self, clicker)
|
||||
if self.nofollow then return false end
|
||||
|
||||
|
||||
if mcl_mobs.invis[clicker:get_player_name()] then
|
||||
return false
|
||||
end
|
||||
@ -2307,7 +2307,7 @@ local function check_doors(self)
|
||||
else
|
||||
if closed then def.on_rightclick(d,n,self) end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -2316,7 +2316,7 @@ end
|
||||
-- returns true if mob has died
|
||||
local do_states = function(self, dtime)
|
||||
if self.can_open_doors then check_doors(self) end
|
||||
|
||||
|
||||
local yaw = self.object:get_yaw() or 0
|
||||
|
||||
if self.state == "stand" then
|
||||
@ -2386,7 +2386,7 @@ local do_states = function(self, dtime)
|
||||
elseif self.current_target then
|
||||
go_to_pos(self,self.current_target)
|
||||
end
|
||||
|
||||
|
||||
if self.current_target and not minetest.line_of_sight(self.object:get_pos(),self.current_target) then
|
||||
self.waypoints=minetest.find_path(p,self._target,150,1,4)
|
||||
self.current_target = nil
|
||||
|
@ -293,7 +293,7 @@ local professions = {
|
||||
},
|
||||
{
|
||||
{ { "mcl_core:emerald", 7, 7}, { "mcl_itemframes:item_frame", 1, 1 }},
|
||||
|
||||
|
||||
{ { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_white", 1, 1 }},
|
||||
{ { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_grey", 1, 1 }},
|
||||
{ { "mcl_core:emerald", 7, 7}, { "mcl_banners:banner_item_silver", 1, 1 }},
|
||||
@ -578,7 +578,7 @@ local function go_home(entity)
|
||||
local b=entity._bed
|
||||
if not b then return end
|
||||
mcl_mobs:gopath(entity,b,function(entity,b)
|
||||
if vector.distance(entity.object:get_pos(),b) < 2 then
|
||||
if vector.distance(entity.object:get_pos(),b) < 2 then
|
||||
entity.state = "stand"
|
||||
set_velocity(entity,0)
|
||||
entity.object:set_pos(b)
|
||||
@ -589,7 +589,7 @@ local function go_home(entity)
|
||||
end
|
||||
return true
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
----- JOBSITE LOGIC
|
||||
@ -1315,7 +1315,7 @@ mcl_mobs:register_mob("mobs_mc:villager", {
|
||||
if not self._player_scan_timer then
|
||||
self._player_scan_timer = 0
|
||||
end
|
||||
|
||||
|
||||
self._player_scan_timer = self._player_scan_timer + dtime
|
||||
-- Check infrequently to keep CPU load low
|
||||
if self._player_scan_timer > PLAYER_SCAN_INTERVAL then
|
||||
|
@ -24,7 +24,7 @@ local function check_player(player)
|
||||
local name=player:get_player_name()
|
||||
if mcl_worlds.has_dust(player:get_pos()) and not mcl_weather.nether_dust.particlespawners[name] then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
mcl_weather.nether_dust.add_particlespawners = function(player)
|
||||
@ -45,7 +45,7 @@ mcl_weather.nether_dust.delete_particlespawners = function(player)
|
||||
for i=1,3 do
|
||||
minetest.delete_particlespawner(mcl_weather.nether_dust.particlespawners[name][i])
|
||||
end
|
||||
mcl_weather.nether_dust.particlespawners[name]=nil
|
||||
mcl_weather.nether_dust.particlespawners[name]=nil
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -165,7 +165,7 @@ function mcl_weather.rain.clear()
|
||||
mcl_weather.rain.remove_sound(player)
|
||||
mcl_weather.rain.remove_player(player)
|
||||
mcl_weather.remove_spawners_player(player)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
|
@ -26,8 +26,8 @@ local same_id = {
|
||||
walls = {
|
||||
"andesite", "brick", "cobble", "diorite", "endbricks",
|
||||
"granite", "mossycobble", "netherbrick", "prismarine",
|
||||
"rednetherbrick", "redsandstone", "sandstone",
|
||||
"stonebrick", "stonebrickmossy",
|
||||
"rednetherbrick", "redsandstone", "sandstone",
|
||||
"stonebrick", "stonebrickmossy",
|
||||
},
|
||||
wool = {
|
||||
"black", "blue", "brown", "cyan", "green",
|
||||
|
@ -360,7 +360,7 @@ function mcl_inventory.set_creative_formspec(player, start_i, pagenum, inv_size,
|
||||
end
|
||||
|
||||
local stack_size = get_stack_size(player)
|
||||
|
||||
|
||||
-- Survival inventory slots
|
||||
main_list = "list[current_player;main;0,3.75;9,3;9]"..
|
||||
mcl_formspec.get_itemslot_bg(0,3.75,9,3)..
|
||||
@ -394,7 +394,7 @@ function mcl_inventory.set_creative_formspec(player, start_i, pagenum, inv_size,
|
||||
-- switch stack size button
|
||||
"image_button[9,5;1,1;default_apple.png;__switch_stack;]"..
|
||||
"label[9.4,5.4;".. F(C("#FFFFFF", stack_size ~= 1 and stack_size or "")) .."]"..
|
||||
"tooltip[__switch_stack;"..F(S("Switch stack size")).."]"
|
||||
"tooltip[__switch_stack;"..F(S("Switch stack size")).."]"
|
||||
|
||||
-- For shortcuts
|
||||
listrings = listrings ..
|
||||
|
@ -1,236 +1,236 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
local F = minetest.formspec_escape
|
||||
|
||||
mcl_inventory = {}
|
||||
|
||||
--local mod_player = minetest.get_modpath("mcl_player")
|
||||
--local mod_craftguide = minetest.get_modpath("mcl_craftguide")
|
||||
|
||||
-- Returns a single itemstack in the given inventory to the main inventory, or drop it when there's no space left
|
||||
function return_item(itemstack, dropper, pos, inv)
|
||||
if dropper:is_player() then
|
||||
-- Return to main inventory
|
||||
if inv:room_for_item("main", itemstack) then
|
||||
inv:add_item("main", itemstack)
|
||||
else
|
||||
-- Drop item on the ground
|
||||
local v = dropper:get_look_dir()
|
||||
local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
|
||||
p.x = p.x+(math.random(1,3)*0.2)
|
||||
p.z = p.z+(math.random(1,3)*0.2)
|
||||
local obj = minetest.add_item(p, itemstack)
|
||||
if obj then
|
||||
v.x = v.x*4
|
||||
v.y = v.y*4 + 2
|
||||
v.z = v.z*4
|
||||
obj:set_velocity(v)
|
||||
obj:get_luaentity()._insta_collect = false
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Fallback for unexpected cases
|
||||
minetest.add_item(pos, itemstack)
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
-- Return items in the given inventory list (name) to the main inventory, or drop them if there is no space left
|
||||
function return_fields(player, name)
|
||||
local inv = player:get_inventory()
|
||||
local list = inv:get_list(name)
|
||||
if not list then return end
|
||||
for i,stack in ipairs(list) do
|
||||
return_item(stack, player, player:get_pos(), inv)
|
||||
stack:clear()
|
||||
inv:set_stack(name, i, stack)
|
||||
end
|
||||
end
|
||||
|
||||
local function set_inventory(player, armor_change_only)
|
||||
if minetest.is_creative_enabled(player:get_player_name()) then
|
||||
if armor_change_only then
|
||||
-- Stay on survival inventory plage if only the armor has been changed
|
||||
mcl_inventory.set_creative_formspec(player, 0, 0, nil, nil, "inv")
|
||||
else
|
||||
mcl_inventory.set_creative_formspec(player, 0, 1)
|
||||
end
|
||||
return
|
||||
end
|
||||
local inv = player:get_inventory()
|
||||
inv:set_width("craft", 2)
|
||||
inv:set_size("craft", 4)
|
||||
|
||||
local armor_slots = {"helmet", "chestplate", "leggings", "boots"}
|
||||
local armor_slot_imgs = ""
|
||||
for a=1,4 do
|
||||
if inv:get_stack("armor", a+1):is_empty() then
|
||||
armor_slot_imgs = armor_slot_imgs .. "image[0,"..(a-1)..";1,1;mcl_inventory_empty_armor_slot_"..armor_slots[a]..".png]"
|
||||
end
|
||||
end
|
||||
|
||||
if inv:get_stack("offhand", 1):is_empty() then
|
||||
armor_slot_imgs = armor_slot_imgs .. "image[3,2;1,1;mcl_inventory_empty_armor_slot_shield.png]"
|
||||
end
|
||||
|
||||
local form = "size[9,8.75]"..
|
||||
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png]"..
|
||||
mcl_player.get_player_formspec_model(player, 1.0, 0.0, 2.25, 4.5, "")..
|
||||
--armor
|
||||
"list[current_player;armor;0,0;1,1;1]"..
|
||||
"list[current_player;armor;0,1;1,1;2]"..
|
||||
"list[current_player;armor;0,2;1,1;3]"..
|
||||
"list[current_player;armor;0,3;1,1;4]"..
|
||||
mcl_formspec.get_itemslot_bg(0,0,1,1)..
|
||||
mcl_formspec.get_itemslot_bg(0,1,1,1)..
|
||||
mcl_formspec.get_itemslot_bg(0,2,1,1)..
|
||||
mcl_formspec.get_itemslot_bg(0,3,1,1)..
|
||||
"list[current_player;offhand;3,2;1,1]"..
|
||||
mcl_formspec.get_itemslot_bg(3,2,1,1)..
|
||||
armor_slot_imgs..
|
||||
-- craft and inventory
|
||||
"label[0,4;"..F(minetest.colorize("#313131", S("Inventory"))).."]"..
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
"label[4,0.5;"..F(minetest.colorize("#313131", S("Crafting"))).."]"..
|
||||
"list[current_player;craft;4,1;2,2]"..
|
||||
"list[current_player;craftpreview;7,1.5;1,1;]"..
|
||||
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
|
||||
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
||||
mcl_formspec.get_itemslot_bg(4,1,2,2)..
|
||||
mcl_formspec.get_itemslot_bg(7,1.5,1,1)..
|
||||
-- crafting guide button
|
||||
"image_button[4.5,3;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;"..F(S("Recipe book")).."]"..
|
||||
-- help button
|
||||
"image_button[8,3;1,1;doc_button_icon_lores.png;__mcl_doc;]"..
|
||||
"tooltip[__mcl_doc;"..F(S("Help")).."]"..
|
||||
-- skins button
|
||||
"image_button[3,3;1,1;mcl_skins_button.png;__mcl_skins;]"..
|
||||
"tooltip[__mcl_skins;"..F(S("Select player skin")).."]"..
|
||||
-- achievements button
|
||||
"image_button[7,3;1,1;mcl_achievements_button.png;__mcl_achievements;]"..
|
||||
"tooltip[__mcl_achievements;"..F(S("Achievements")).."]"..
|
||||
-- for shortcuts
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_player;armor]"..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[current_player;craft]" ..
|
||||
"listring[current_player;main]"
|
||||
player:set_inventory_formspec(form)
|
||||
end
|
||||
|
||||
-- Drop items in craft grid and reset inventory on closing
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if fields.quit then
|
||||
return_fields(player,"craft")
|
||||
return_fields(player,"enchanting_lapis")
|
||||
return_fields(player,"enchanting_item")
|
||||
if not minetest.is_creative_enabled(player:get_player_name()) and (formname == "" or formname == "main") then
|
||||
set_inventory(player)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
if not minetest.is_creative_enabled("") then
|
||||
function mcl_inventory.update_inventory_formspec(player)
|
||||
set_inventory(player)
|
||||
end
|
||||
end
|
||||
|
||||
-- Drop crafting grid items on leaving
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
return_fields(player, "craft")
|
||||
return_fields(player, "enchanting_lapis")
|
||||
return_fields(player, "enchanting_item")
|
||||
end)
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
--init inventory
|
||||
local inv = player:get_inventory()
|
||||
inv:set_width("main", 9)
|
||||
inv:set_size("main", 36)
|
||||
inv:set_size("offhand", 1)
|
||||
|
||||
--set hotbar size
|
||||
player:hud_set_hotbar_itemcount(9)
|
||||
--add hotbar images
|
||||
player:hud_set_hotbar_image("mcl_inventory_hotbar.png")
|
||||
player:hud_set_hotbar_selected_image("mcl_inventory_hotbar_selected.png")
|
||||
|
||||
local old_update_player = mcl_armor.update_player
|
||||
function mcl_armor.update_player(player, info)
|
||||
old_update_player(player, info)
|
||||
set_inventory(player, true)
|
||||
end
|
||||
|
||||
-- In Creative Mode, the initial inventory setup is handled in creative.lua
|
||||
if not minetest.is_creative_enabled(player:get_player_name()) then
|
||||
set_inventory(player)
|
||||
end
|
||||
|
||||
--[[ Make sure the crafting grid is empty. Why? Because the player might have
|
||||
items remaining in the crafting grid from the previous join; this is likely
|
||||
when the server has been shutdown and the server didn't clean up the player
|
||||
inventories. ]]
|
||||
return_fields(player, "craft")
|
||||
return_fields(player, "enchanting_item")
|
||||
return_fields(player, "enchanting_lapis")
|
||||
end)
|
||||
|
||||
|
||||
dofile(minetest.get_modpath(minetest.get_current_modname()).."/creative.lua")
|
||||
|
||||
local mt_is_creative_enabled = minetest.is_creative_enabled
|
||||
|
||||
function minetest.is_creative_enabled(name)
|
||||
if mt_is_creative_enabled(name) then return true end
|
||||
local p = minetest.get_player_by_name(name)
|
||||
if p then
|
||||
return p:get_meta():get_string("gamemode") == "creative"
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function in_table(n,h)
|
||||
for k,v in pairs(h) do
|
||||
if v == n then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local gamemodes = {
|
||||
"survival",
|
||||
"creative"
|
||||
}
|
||||
|
||||
function mcl_inventory.player_set_gamemode(p,g)
|
||||
local m = p:get_meta()
|
||||
m:set_string("gamemode",g)
|
||||
set_inventory(p)
|
||||
end
|
||||
|
||||
minetest.register_chatcommand("gamemode",{
|
||||
params = S("[<gamemode>] [<player>]"),
|
||||
description = S("Change gamemode (survival/creative) for yourself or player"),
|
||||
privs = { server = true },
|
||||
func = function(n,param)
|
||||
-- Full input validation ( just for @erlehmann <3 )
|
||||
local p = minetest.get_player_by_name(n)
|
||||
local args = param:split(" ")
|
||||
if args[2] ~= nil then
|
||||
p = minetest.get_player_by_name(args[2])
|
||||
end
|
||||
if not p then
|
||||
return false, S("Player not online")
|
||||
end
|
||||
if args[1] ~= nil and not in_table(args[1],gamemodes) then
|
||||
return false, S("Gamemode " .. args[1] .. " does not exist.")
|
||||
elseif args[1] ~= nil then
|
||||
mcl_inventory.player_set_gamemode(p,args[1])
|
||||
end
|
||||
--Result message - show effective game mode
|
||||
local gm = p:get_meta():get_string("gamemode")
|
||||
if gm == "" then gm = gamemodes[1] end
|
||||
return true, S("Gamemode for player ")..n..S(": "..gm)
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
local F = minetest.formspec_escape
|
||||
|
||||
mcl_inventory = {}
|
||||
|
||||
--local mod_player = minetest.get_modpath("mcl_player")
|
||||
--local mod_craftguide = minetest.get_modpath("mcl_craftguide")
|
||||
|
||||
-- Returns a single itemstack in the given inventory to the main inventory, or drop it when there's no space left
|
||||
function return_item(itemstack, dropper, pos, inv)
|
||||
if dropper:is_player() then
|
||||
-- Return to main inventory
|
||||
if inv:room_for_item("main", itemstack) then
|
||||
inv:add_item("main", itemstack)
|
||||
else
|
||||
-- Drop item on the ground
|
||||
local v = dropper:get_look_dir()
|
||||
local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
|
||||
p.x = p.x+(math.random(1,3)*0.2)
|
||||
p.z = p.z+(math.random(1,3)*0.2)
|
||||
local obj = minetest.add_item(p, itemstack)
|
||||
if obj then
|
||||
v.x = v.x*4
|
||||
v.y = v.y*4 + 2
|
||||
v.z = v.z*4
|
||||
obj:set_velocity(v)
|
||||
obj:get_luaentity()._insta_collect = false
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Fallback for unexpected cases
|
||||
minetest.add_item(pos, itemstack)
|
||||
end
|
||||
})
|
||||
return itemstack
|
||||
end
|
||||
|
||||
-- Return items in the given inventory list (name) to the main inventory, or drop them if there is no space left
|
||||
function return_fields(player, name)
|
||||
local inv = player:get_inventory()
|
||||
local list = inv:get_list(name)
|
||||
if not list then return end
|
||||
for i,stack in ipairs(list) do
|
||||
return_item(stack, player, player:get_pos(), inv)
|
||||
stack:clear()
|
||||
inv:set_stack(name, i, stack)
|
||||
end
|
||||
end
|
||||
|
||||
local function set_inventory(player, armor_change_only)
|
||||
if minetest.is_creative_enabled(player:get_player_name()) then
|
||||
if armor_change_only then
|
||||
-- Stay on survival inventory plage if only the armor has been changed
|
||||
mcl_inventory.set_creative_formspec(player, 0, 0, nil, nil, "inv")
|
||||
else
|
||||
mcl_inventory.set_creative_formspec(player, 0, 1)
|
||||
end
|
||||
return
|
||||
end
|
||||
local inv = player:get_inventory()
|
||||
inv:set_width("craft", 2)
|
||||
inv:set_size("craft", 4)
|
||||
|
||||
local armor_slots = {"helmet", "chestplate", "leggings", "boots"}
|
||||
local armor_slot_imgs = ""
|
||||
for a=1,4 do
|
||||
if inv:get_stack("armor", a+1):is_empty() then
|
||||
armor_slot_imgs = armor_slot_imgs .. "image[0,"..(a-1)..";1,1;mcl_inventory_empty_armor_slot_"..armor_slots[a]..".png]"
|
||||
end
|
||||
end
|
||||
|
||||
if inv:get_stack("offhand", 1):is_empty() then
|
||||
armor_slot_imgs = armor_slot_imgs .. "image[3,2;1,1;mcl_inventory_empty_armor_slot_shield.png]"
|
||||
end
|
||||
|
||||
local form = "size[9,8.75]"..
|
||||
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png]"..
|
||||
mcl_player.get_player_formspec_model(player, 1.0, 0.0, 2.25, 4.5, "")..
|
||||
--armor
|
||||
"list[current_player;armor;0,0;1,1;1]"..
|
||||
"list[current_player;armor;0,1;1,1;2]"..
|
||||
"list[current_player;armor;0,2;1,1;3]"..
|
||||
"list[current_player;armor;0,3;1,1;4]"..
|
||||
mcl_formspec.get_itemslot_bg(0,0,1,1)..
|
||||
mcl_formspec.get_itemslot_bg(0,1,1,1)..
|
||||
mcl_formspec.get_itemslot_bg(0,2,1,1)..
|
||||
mcl_formspec.get_itemslot_bg(0,3,1,1)..
|
||||
"list[current_player;offhand;3,2;1,1]"..
|
||||
mcl_formspec.get_itemslot_bg(3,2,1,1)..
|
||||
armor_slot_imgs..
|
||||
-- craft and inventory
|
||||
"label[0,4;"..F(minetest.colorize("#313131", S("Inventory"))).."]"..
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
"label[4,0.5;"..F(minetest.colorize("#313131", S("Crafting"))).."]"..
|
||||
"list[current_player;craft;4,1;2,2]"..
|
||||
"list[current_player;craftpreview;7,1.5;1,1;]"..
|
||||
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
|
||||
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
||||
mcl_formspec.get_itemslot_bg(4,1,2,2)..
|
||||
mcl_formspec.get_itemslot_bg(7,1.5,1,1)..
|
||||
-- crafting guide button
|
||||
"image_button[4.5,3;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;"..F(S("Recipe book")).."]"..
|
||||
-- help button
|
||||
"image_button[8,3;1,1;doc_button_icon_lores.png;__mcl_doc;]"..
|
||||
"tooltip[__mcl_doc;"..F(S("Help")).."]"..
|
||||
-- skins button
|
||||
"image_button[3,3;1,1;mcl_skins_button.png;__mcl_skins;]"..
|
||||
"tooltip[__mcl_skins;"..F(S("Select player skin")).."]"..
|
||||
-- achievements button
|
||||
"image_button[7,3;1,1;mcl_achievements_button.png;__mcl_achievements;]"..
|
||||
"tooltip[__mcl_achievements;"..F(S("Achievements")).."]"..
|
||||
-- for shortcuts
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_player;armor]"..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[current_player;craft]" ..
|
||||
"listring[current_player;main]"
|
||||
player:set_inventory_formspec(form)
|
||||
end
|
||||
|
||||
-- Drop items in craft grid and reset inventory on closing
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if fields.quit then
|
||||
return_fields(player,"craft")
|
||||
return_fields(player,"enchanting_lapis")
|
||||
return_fields(player,"enchanting_item")
|
||||
if not minetest.is_creative_enabled(player:get_player_name()) and (formname == "" or formname == "main") then
|
||||
set_inventory(player)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
if not minetest.is_creative_enabled("") then
|
||||
function mcl_inventory.update_inventory_formspec(player)
|
||||
set_inventory(player)
|
||||
end
|
||||
end
|
||||
|
||||
-- Drop crafting grid items on leaving
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
return_fields(player, "craft")
|
||||
return_fields(player, "enchanting_lapis")
|
||||
return_fields(player, "enchanting_item")
|
||||
end)
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
--init inventory
|
||||
local inv = player:get_inventory()
|
||||
inv:set_width("main", 9)
|
||||
inv:set_size("main", 36)
|
||||
inv:set_size("offhand", 1)
|
||||
|
||||
--set hotbar size
|
||||
player:hud_set_hotbar_itemcount(9)
|
||||
--add hotbar images
|
||||
player:hud_set_hotbar_image("mcl_inventory_hotbar.png")
|
||||
player:hud_set_hotbar_selected_image("mcl_inventory_hotbar_selected.png")
|
||||
|
||||
local old_update_player = mcl_armor.update_player
|
||||
function mcl_armor.update_player(player, info)
|
||||
old_update_player(player, info)
|
||||
set_inventory(player, true)
|
||||
end
|
||||
|
||||
-- In Creative Mode, the initial inventory setup is handled in creative.lua
|
||||
if not minetest.is_creative_enabled(player:get_player_name()) then
|
||||
set_inventory(player)
|
||||
end
|
||||
|
||||
--[[ Make sure the crafting grid is empty. Why? Because the player might have
|
||||
items remaining in the crafting grid from the previous join; this is likely
|
||||
when the server has been shutdown and the server didn't clean up the player
|
||||
inventories. ]]
|
||||
return_fields(player, "craft")
|
||||
return_fields(player, "enchanting_item")
|
||||
return_fields(player, "enchanting_lapis")
|
||||
end)
|
||||
|
||||
|
||||
dofile(minetest.get_modpath(minetest.get_current_modname()).."/creative.lua")
|
||||
|
||||
local mt_is_creative_enabled = minetest.is_creative_enabled
|
||||
|
||||
function minetest.is_creative_enabled(name)
|
||||
if mt_is_creative_enabled(name) then return true end
|
||||
local p = minetest.get_player_by_name(name)
|
||||
if p then
|
||||
return p:get_meta():get_string("gamemode") == "creative"
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function in_table(n,h)
|
||||
for k,v in pairs(h) do
|
||||
if v == n then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local gamemodes = {
|
||||
"survival",
|
||||
"creative"
|
||||
}
|
||||
|
||||
function mcl_inventory.player_set_gamemode(p,g)
|
||||
local m = p:get_meta()
|
||||
m:set_string("gamemode",g)
|
||||
set_inventory(p)
|
||||
end
|
||||
|
||||
minetest.register_chatcommand("gamemode",{
|
||||
params = S("[<gamemode>] [<player>]"),
|
||||
description = S("Change gamemode (survival/creative) for yourself or player"),
|
||||
privs = { server = true },
|
||||
func = function(n,param)
|
||||
-- Full input validation ( just for @erlehmann <3 )
|
||||
local p = minetest.get_player_by_name(n)
|
||||
local args = param:split(" ")
|
||||
if args[2] ~= nil then
|
||||
p = minetest.get_player_by_name(args[2])
|
||||
end
|
||||
if not p then
|
||||
return false, S("Player not online")
|
||||
end
|
||||
if args[1] ~= nil and not in_table(args[1],gamemodes) then
|
||||
return false, S("Gamemode " .. args[1] .. " does not exist.")
|
||||
elseif args[1] ~= nil then
|
||||
mcl_inventory.player_set_gamemode(p,args[1])
|
||||
end
|
||||
--Result message - show effective game mode
|
||||
local gm = p:get_meta():get_string("gamemode")
|
||||
if gm == "" then gm = gamemodes[1] end
|
||||
return true, S("Gamemode for player ")..n..S(": "..gm)
|
||||
end
|
||||
})
|
||||
|
@ -133,7 +133,7 @@ local dispenserdef = {
|
||||
if not stackdef then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local iname = stack:get_name()
|
||||
local igroups = stackdef.groups
|
||||
|
||||
|
@ -90,9 +90,9 @@ for i=0,4 do
|
||||
|
||||
minetest.register_craft({ --TODO: Please change this crafting recipe once crying obsidian is implemented!
|
||||
output = "mcl_beds:respawn_anchor",
|
||||
recipe = {
|
||||
recipe = {
|
||||
{"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"},
|
||||
{"mcl_nether:glowstone", "mcl_nether:glowstone", "mcl_nether:glowstone"},
|
||||
{"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}
|
||||
}
|
||||
})
|
||||
{"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}
|
||||
}
|
||||
})
|
||||
|
@ -314,7 +314,7 @@ controls.register_on_press(function(player, key)
|
||||
end
|
||||
wielded_item = on_place_bucket(wielded_item, player, pointed_thing, def)
|
||||
end
|
||||
|
||||
|
||||
player:set_wielded_item(wielded_item)
|
||||
end)
|
||||
|
||||
|
@ -1,156 +1,156 @@
|
||||
--[[
|
||||
#!#!#!#Cake mod created by Jordan4ibanez#!#!#
|
||||
#!#!#!#Released under CC Attribution-ShareAlike 3.0 Unported #!#!#
|
||||
]]--
|
||||
|
||||
local CAKE_HUNGER_POINTS = 2
|
||||
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"}
|
||||
local slice_1 = { -7/16, -8/16, -7/16, -5/16, 0/16, 7/16}
|
||||
local slice_2 = { -7/16, -8/16, -7/16, -3/16, 0/16, 7/16}
|
||||
local slice_3 = { -7/16, -8/16, -7/16, -1/16, 0/16, 7/16}
|
||||
local slice_4 = { -7/16, -8/16, -7/16, 1/16, 0/16, 7/16}
|
||||
local slice_5 = { -7/16, -8/16, -7/16, 3/16, 0/16, 7/16}
|
||||
local slice_6 = { -7/16, -8/16, -7/16, 5/16, 0/16, 7/16}
|
||||
|
||||
local full_cake = { -7/16, -8/16, -7/16, 7/16, 0/16, 7/16}
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_cake:cake",
|
||||
recipe = {
|
||||
{"mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket"},
|
||||
{"mcl_core:sugar", "mcl_throwing:egg", "mcl_core:sugar"},
|
||||
{"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"},
|
||||
},
|
||||
replacements = {
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("mcl_cake:cake", {
|
||||
description = S("Cake"),
|
||||
_tt_help = S("With 7 tasty slices!").."\n"..S("Hunger points: +@1 per slice", CAKE_HUNGER_POINTS),
|
||||
_doc_items_longdesc = S("Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken."),
|
||||
_doc_items_usagehelp = S("Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full."),
|
||||
tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"},
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||
inventory_image = "cake.png",
|
||||
wield_image = "cake.png",
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
drawtype = "nodebox",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = full_cake
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = full_cake
|
||||
},
|
||||
stack_max = 1,
|
||||
groups = {
|
||||
handy = 1, attached_node = 1, dig_by_piston = 1, comparator_signal = 14,
|
||||
cake = 7, food = 2, no_eat_delay = 1, compostability = 100
|
||||
},
|
||||
drop = "",
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
-- Cake is subject to protection
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(2, ItemStack("mcl_cake:cake_6"), ItemStack("mcl_cake:cake"), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= "mcl_cake:cake" or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.add_node(pos,{type="node",name="mcl_cake:cake_6",param2=0})
|
||||
end
|
||||
end,
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
|
||||
_food_particles = false,
|
||||
_mcl_saturation = 0.4,
|
||||
_mcl_blast_resistance = 0.5,
|
||||
_mcl_hardness = 0.5,
|
||||
})
|
||||
|
||||
local register_slice = function(level, nodebox, desc)
|
||||
local this = "mcl_cake:cake_"..level
|
||||
local after_eat = "mcl_cake:cake_"..(level-1)
|
||||
local on_rightclick
|
||||
if level > 1 then
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack(after_eat), ItemStack(this), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.add_node(pos,{type="node",name=after_eat,param2=0})
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Last slice
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack("mcl:cake:cake 0"), ItemStack("mcl_cake:cake_1"), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.remove_node(pos)
|
||||
minetest.check_for_falling(pos)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node(this, {
|
||||
description = desc,
|
||||
_doc_items_create_entry = false,
|
||||
tiles = cake_texture,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
drawtype = "nodebox",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = nodebox,
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = nodebox,
|
||||
},
|
||||
groups = {
|
||||
handy = 1, attached_node = 1, not_in_creative_inventory = 1,
|
||||
dig_by_piston = 1, cake = level, comparator_signal = level * 2,
|
||||
food = 2, no_eat_delay = 1
|
||||
},
|
||||
drop = "",
|
||||
on_rightclick = on_rightclick,
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
|
||||
_food_particles = false,
|
||||
_mcl_saturation = 0.4,
|
||||
_mcl_blast_resistance = 0.5,
|
||||
_mcl_hardness = 0.5,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doc") then
|
||||
doc.add_entry_alias("nodes", "mcl_cake:cake", "nodes", "mcl_cake:cake_"..level)
|
||||
end
|
||||
end
|
||||
|
||||
register_slice(6, slice_6, S("Cake (6 Slices Left)"))
|
||||
register_slice(5, slice_5, S("Cake (5 Slices Left)"))
|
||||
register_slice(4, slice_4, S("Cake (4 Slices Left)"))
|
||||
register_slice(3, slice_3, S("Cake (3 Slices Left)"))
|
||||
register_slice(2, slice_2, S("Cake (2 Slices Left)"))
|
||||
register_slice(1, slice_1, S("Cake (1 Slice Left)"))
|
||||
--[[
|
||||
#!#!#!#Cake mod created by Jordan4ibanez#!#!#
|
||||
#!#!#!#Released under CC Attribution-ShareAlike 3.0 Unported #!#!#
|
||||
]]--
|
||||
|
||||
local CAKE_HUNGER_POINTS = 2
|
||||
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"}
|
||||
local slice_1 = { -7/16, -8/16, -7/16, -5/16, 0/16, 7/16}
|
||||
local slice_2 = { -7/16, -8/16, -7/16, -3/16, 0/16, 7/16}
|
||||
local slice_3 = { -7/16, -8/16, -7/16, -1/16, 0/16, 7/16}
|
||||
local slice_4 = { -7/16, -8/16, -7/16, 1/16, 0/16, 7/16}
|
||||
local slice_5 = { -7/16, -8/16, -7/16, 3/16, 0/16, 7/16}
|
||||
local slice_6 = { -7/16, -8/16, -7/16, 5/16, 0/16, 7/16}
|
||||
|
||||
local full_cake = { -7/16, -8/16, -7/16, 7/16, 0/16, 7/16}
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_cake:cake",
|
||||
recipe = {
|
||||
{"mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket"},
|
||||
{"mcl_core:sugar", "mcl_throwing:egg", "mcl_core:sugar"},
|
||||
{"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"},
|
||||
},
|
||||
replacements = {
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("mcl_cake:cake", {
|
||||
description = S("Cake"),
|
||||
_tt_help = S("With 7 tasty slices!").."\n"..S("Hunger points: +@1 per slice", CAKE_HUNGER_POINTS),
|
||||
_doc_items_longdesc = S("Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken."),
|
||||
_doc_items_usagehelp = S("Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full."),
|
||||
tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"},
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||
inventory_image = "cake.png",
|
||||
wield_image = "cake.png",
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
drawtype = "nodebox",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = full_cake
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = full_cake
|
||||
},
|
||||
stack_max = 1,
|
||||
groups = {
|
||||
handy = 1, attached_node = 1, dig_by_piston = 1, comparator_signal = 14,
|
||||
cake = 7, food = 2, no_eat_delay = 1, compostability = 100
|
||||
},
|
||||
drop = "",
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
-- Cake is subject to protection
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(2, ItemStack("mcl_cake:cake_6"), ItemStack("mcl_cake:cake"), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= "mcl_cake:cake" or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.add_node(pos,{type="node",name="mcl_cake:cake_6",param2=0})
|
||||
end
|
||||
end,
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
|
||||
_food_particles = false,
|
||||
_mcl_saturation = 0.4,
|
||||
_mcl_blast_resistance = 0.5,
|
||||
_mcl_hardness = 0.5,
|
||||
})
|
||||
|
||||
local register_slice = function(level, nodebox, desc)
|
||||
local this = "mcl_cake:cake_"..level
|
||||
local after_eat = "mcl_cake:cake_"..(level-1)
|
||||
local on_rightclick
|
||||
if level > 1 then
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack(after_eat), ItemStack(this), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.add_node(pos,{type="node",name=after_eat,param2=0})
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Last slice
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack("mcl:cake:cake 0"), ItemStack("mcl_cake:cake_1"), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.remove_node(pos)
|
||||
minetest.check_for_falling(pos)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node(this, {
|
||||
description = desc,
|
||||
_doc_items_create_entry = false,
|
||||
tiles = cake_texture,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
drawtype = "nodebox",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = nodebox,
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = nodebox,
|
||||
},
|
||||
groups = {
|
||||
handy = 1, attached_node = 1, not_in_creative_inventory = 1,
|
||||
dig_by_piston = 1, cake = level, comparator_signal = level * 2,
|
||||
food = 2, no_eat_delay = 1
|
||||
},
|
||||
drop = "",
|
||||
on_rightclick = on_rightclick,
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
|
||||
_food_particles = false,
|
||||
_mcl_saturation = 0.4,
|
||||
_mcl_blast_resistance = 0.5,
|
||||
_mcl_hardness = 0.5,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doc") then
|
||||
doc.add_entry_alias("nodes", "mcl_cake:cake", "nodes", "mcl_cake:cake_"..level)
|
||||
end
|
||||
end
|
||||
|
||||
register_slice(6, slice_6, S("Cake (6 Slices Left)"))
|
||||
register_slice(5, slice_5, S("Cake (5 Slices Left)"))
|
||||
register_slice(4, slice_4, S("Cake (4 Slices Left)"))
|
||||
register_slice(3, slice_3, S("Cake (3 Slices Left)"))
|
||||
register_slice(2, slice_2, S("Cake (2 Slices Left)"))
|
||||
register_slice(1, slice_1, S("Cake (1 Slice Left)"))
|
||||
|
@ -1,70 +1,70 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
local formspec_escape = minetest.formspec_escape
|
||||
local show_formspec = minetest.show_formspec
|
||||
local C = minetest.colorize
|
||||
local text_color = "#313131"
|
||||
local itemslot_bg = mcl_formspec.get_itemslot_bg
|
||||
|
||||
mcl_crafting_table = {}
|
||||
|
||||
function mcl_crafting_table.show_crafting_form(player)
|
||||
player:get_inventory():set_width("craft", 3)
|
||||
player:get_inventory():set_size("craft", 9)
|
||||
|
||||
show_formspec(player:get_player_name(), "main",
|
||||
"size[9,8.75]"..
|
||||
"image[4.7,1.5;1.5,1;gui_crafting_arrow.png]"..
|
||||
"label[0,4;"..formspec_escape(C(text_color, S("Inventory"))).."]"..
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
itemslot_bg(0,4.5,9,3)..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
itemslot_bg(0,7.74,9,1)..
|
||||
"label[1.75,0;"..formspec_escape(C(text_color, S("Crafting"))).."]"..
|
||||
"list[current_player;craft;1.75,0.5;3,3;]"..
|
||||
itemslot_bg(1.75,0.5,3,3)..
|
||||
"list[current_player;craftpreview;6.1,1.5;1,1;]"..
|
||||
itemslot_bg(6.1,1.5,1,1)..
|
||||
"image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;"..formspec_escape(S("Recipe book")).."]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_player;craft]"
|
||||
)
|
||||
end
|
||||
|
||||
minetest.register_node("mcl_crafting_table:crafting_table", {
|
||||
description = S("Crafting Table"),
|
||||
_tt_help = S("3×3 crafting grid"),
|
||||
_doc_items_longdesc = S("A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts."),
|
||||
_doc_items_usagehelp = S("Rightclick the crafting table to access the 3×3 crafting grid."),
|
||||
_doc_items_hidden = false,
|
||||
is_ground_content = false,
|
||||
tiles = {"crafting_workbench_top.png", "default_wood.png", "crafting_workbench_side.png",
|
||||
"crafting_workbench_side.png", "crafting_workbench_front.png", "crafting_workbench_front.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {handy=1,axey=1, deco_block=1, material_wood=1,flammable=-1},
|
||||
on_rightclick = function(pos, node, player, itemstack)
|
||||
if not player:get_player_control().sneak then
|
||||
mcl_crafting_table.show_crafting_form(player)
|
||||
end
|
||||
end,
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
_mcl_blast_resistance = 2.5,
|
||||
_mcl_hardness = 2.5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_crafting_table:crafting_table",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"group:wood", "group:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mcl_crafting_table:crafting_table",
|
||||
burntime = 15,
|
||||
})
|
||||
|
||||
minetest.register_alias("crafting:workbench", "mcl_crafting_table:crafting_table")
|
||||
minetest.register_alias("mcl_inventory:workbench", "mcl_crafting_table:crafting_table")
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
local formspec_escape = minetest.formspec_escape
|
||||
local show_formspec = minetest.show_formspec
|
||||
local C = minetest.colorize
|
||||
local text_color = "#313131"
|
||||
local itemslot_bg = mcl_formspec.get_itemslot_bg
|
||||
|
||||
mcl_crafting_table = {}
|
||||
|
||||
function mcl_crafting_table.show_crafting_form(player)
|
||||
player:get_inventory():set_width("craft", 3)
|
||||
player:get_inventory():set_size("craft", 9)
|
||||
|
||||
show_formspec(player:get_player_name(), "main",
|
||||
"size[9,8.75]"..
|
||||
"image[4.7,1.5;1.5,1;gui_crafting_arrow.png]"..
|
||||
"label[0,4;"..formspec_escape(C(text_color, S("Inventory"))).."]"..
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
itemslot_bg(0,4.5,9,3)..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
itemslot_bg(0,7.74,9,1)..
|
||||
"label[1.75,0;"..formspec_escape(C(text_color, S("Crafting"))).."]"..
|
||||
"list[current_player;craft;1.75,0.5;3,3;]"..
|
||||
itemslot_bg(1.75,0.5,3,3)..
|
||||
"list[current_player;craftpreview;6.1,1.5;1,1;]"..
|
||||
itemslot_bg(6.1,1.5,1,1)..
|
||||
"image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;"..formspec_escape(S("Recipe book")).."]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_player;craft]"
|
||||
)
|
||||
end
|
||||
|
||||
minetest.register_node("mcl_crafting_table:crafting_table", {
|
||||
description = S("Crafting Table"),
|
||||
_tt_help = S("3×3 crafting grid"),
|
||||
_doc_items_longdesc = S("A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts."),
|
||||
_doc_items_usagehelp = S("Rightclick the crafting table to access the 3×3 crafting grid."),
|
||||
_doc_items_hidden = false,
|
||||
is_ground_content = false,
|
||||
tiles = {"crafting_workbench_top.png", "default_wood.png", "crafting_workbench_side.png",
|
||||
"crafting_workbench_side.png", "crafting_workbench_front.png", "crafting_workbench_front.png"},
|
||||
paramtype2 = "facedir",
|
||||
groups = {handy=1,axey=1, deco_block=1, material_wood=1,flammable=-1},
|
||||
on_rightclick = function(pos, node, player, itemstack)
|
||||
if not player:get_player_control().sneak then
|
||||
mcl_crafting_table.show_crafting_form(player)
|
||||
end
|
||||
end,
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
_mcl_blast_resistance = 2.5,
|
||||
_mcl_hardness = 2.5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_crafting_table:crafting_table",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"group:wood", "group:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mcl_crafting_table:crafting_table",
|
||||
burntime = 15,
|
||||
})
|
||||
|
||||
minetest.register_alias("crafting:workbench", "mcl_crafting_table:crafting_table")
|
||||
minetest.register_alias("mcl_inventory:workbench", "mcl_crafting_table:crafting_table")
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,231 +1,231 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
-- Wrapper around mintest.pointed_thing_to_face_pos.
|
||||
local function get_fpos(placer, pointed_thing)
|
||||
local fpos
|
||||
-- Workaround: minetest.pointed_thing_to_face_pos crashes in MT 0.4.16 if
|
||||
-- pointed_thing.under and pointed_thing.above are equal
|
||||
-- FIXME: Remove this when MT got fixed.
|
||||
if not vector.equals(pointed_thing.under, pointed_thing.above) then
|
||||
-- The happy case: Everything is normal
|
||||
local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing)
|
||||
fpos = finepos.y % 1
|
||||
else
|
||||
-- Fallback if both above and under are equal
|
||||
fpos = 0
|
||||
end
|
||||
return fpos
|
||||
end
|
||||
|
||||
---- Trapdoor ----
|
||||
|
||||
local on_rotate
|
||||
if minetest.get_modpath("screwdriver") then
|
||||
on_rotate = function(pos, node, user, mode, param2)
|
||||
-- Flip trapdoor vertically
|
||||
if mode == screwdriver.ROTATE_AXIS then
|
||||
local minor = node.param2
|
||||
if node.param2 >= 20 then
|
||||
minor = node.param2 - 20
|
||||
if minor == 3 then
|
||||
minor = 1
|
||||
elseif minor == 1 then
|
||||
minor = 3
|
||||
end
|
||||
node.param2 = minor
|
||||
else
|
||||
if minor == 3 then
|
||||
minor = 1
|
||||
elseif minor == 1 then
|
||||
minor = 3
|
||||
end
|
||||
node.param2 = minor
|
||||
node.param2 = node.param2 + 20
|
||||
end
|
||||
minetest.set_node(pos, node)
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function mcl_doors:register_trapdoor(name, def)
|
||||
local groups = table.copy(def.groups)
|
||||
if groups == nil then
|
||||
groups = {}
|
||||
end
|
||||
groups.mesecon_ignore_opaque_dig = 1
|
||||
|
||||
if not def.sound_open then
|
||||
def.sound_open = "doors_door_open"
|
||||
end
|
||||
if not def.sound_close then
|
||||
def.sound_close = "doors_door_close"
|
||||
end
|
||||
|
||||
local function punch(pos)
|
||||
local me = minetest.get_node(pos)
|
||||
local tmp_node
|
||||
-- Close
|
||||
if minetest.get_item_group(me.name, "trapdoor") == 2 then
|
||||
minetest.sound_play(def.sound_close, {pos = pos, gain = 0.3, max_hear_distance = 16}, true)
|
||||
tmp_node = {name=name, param1=me.param1, param2=me.param2}
|
||||
-- Open
|
||||
else
|
||||
minetest.sound_play(def.sound_open, {pos = pos, gain = 0.3, max_hear_distance = 16}, true)
|
||||
tmp_node = {name=name.."_open", param1=me.param1, param2=me.param2}
|
||||
end
|
||||
minetest.set_node(pos, tmp_node)
|
||||
end
|
||||
|
||||
local on_rightclick
|
||||
if not def.only_redstone_can_open then
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
punch(pos)
|
||||
end
|
||||
end
|
||||
|
||||
-- Default help texts
|
||||
local longdesc, usagehelp, tt_help
|
||||
longdesc = def._doc_items_longdesc
|
||||
if not longdesc then
|
||||
if def.only_redstone_can_open then
|
||||
longdesc = S("Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can only be opened or closed by redstone power.")
|
||||
else
|
||||
longdesc = S("Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can be opened or closed by hand or redstone power.")
|
||||
end
|
||||
end
|
||||
usagehelp = def._doc_items_usagehelp
|
||||
if not usagehelp and not def.only_redstone_can_open then
|
||||
usagehelp = S("To open or close this trapdoor, rightclick it or send a redstone signal to it.")
|
||||
end
|
||||
if def.only_redstone_can_open then
|
||||
tt_help = S("Openable by redstone power")
|
||||
else
|
||||
tt_help = S("Openable by players and redstone power")
|
||||
end
|
||||
|
||||
-- Closed trapdoor
|
||||
|
||||
local tile_front = def.tile_front
|
||||
local tile_side = def.tile_side
|
||||
if not tile_side then
|
||||
tile_side = tile_front
|
||||
end
|
||||
local tiles_closed = {
|
||||
tile_front,
|
||||
tile_front .. "^[transformFY",
|
||||
tile_side, tile_side,
|
||||
tile_side, tile_side,
|
||||
}
|
||||
|
||||
local groups_closed = groups
|
||||
groups_closed.trapdoor = 1
|
||||
groups_closed.deco_block = 1
|
||||
minetest.register_node(name, {
|
||||
description = def.description,
|
||||
_tt_help = tt_help,
|
||||
_doc_items_longdesc = longdesc,
|
||||
_doc_items_usagehelp = usagehelp,
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_closed,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true,
|
||||
inventory_image = def.inventory_image,
|
||||
wield_image = def.wield_image,
|
||||
is_ground_content = false,
|
||||
paramtype = "light",
|
||||
stack_max = 64,
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
groups = groups_closed,
|
||||
_mcl_hardness = def._mcl_hardness,
|
||||
_mcl_blast_resistance = def._mcl_blast_resistance,
|
||||
sounds = def.sounds,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-8/16, -8/16, -8/16, 8/16, -5/16, 8/16},},
|
||||
},
|
||||
mesecons = {effector = {
|
||||
action_on = (function(pos, node)
|
||||
punch(pos)
|
||||
end),
|
||||
}},
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local p0 = pointed_thing.under
|
||||
local p1 = pointed_thing.above
|
||||
local param2 = 0
|
||||
|
||||
local placer_pos = placer:get_pos()
|
||||
if placer_pos then
|
||||
param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos))
|
||||
end
|
||||
|
||||
local fpos = get_fpos(placer, pointed_thing)
|
||||
|
||||
--local origname = itemstack:get_name()
|
||||
if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5)
|
||||
or (fpos < -0.5 and fpos > -0.999999999) then
|
||||
param2 = param2 + 20
|
||||
if param2 == 21 then
|
||||
param2 = 23
|
||||
elseif param2 == 23 then
|
||||
param2 = 21
|
||||
end
|
||||
end
|
||||
return minetest.item_place(itemstack, placer, pointed_thing, param2)
|
||||
end,
|
||||
on_rightclick = on_rightclick,
|
||||
on_rotate = on_rotate,
|
||||
})
|
||||
|
||||
-- Open trapdoor
|
||||
|
||||
local groups_open = table.copy(groups)
|
||||
|
||||
local tiles_open = {
|
||||
tile_side,
|
||||
tile_side .. "^[transformR180",
|
||||
tile_side .. "^[transformR270",
|
||||
tile_side .. "^[transformR90",
|
||||
tile_front .. "^[transform46",
|
||||
tile_front .. "^[transformFY",
|
||||
}
|
||||
|
||||
groups_open.trapdoor = 2
|
||||
groups_open.not_in_creative_inventory = 1
|
||||
minetest.register_node(name.."_open", {
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_open,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true,
|
||||
is_ground_content = false,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
-- TODO: Implement Minecraft behaviour: Climbable if directly above
|
||||
-- ladder w/ matching orientation.
|
||||
-- Current behavour: Always climbable
|
||||
climbable = true,
|
||||
sunlight_propagates = true,
|
||||
pointable = true,
|
||||
groups = groups_open,
|
||||
_mcl_hardness = def._mcl_hardness,
|
||||
_mcl_blast_resistance = def._mcl_blast_resistance,
|
||||
sounds = def.sounds,
|
||||
drop = name,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, 5/16, 0.5, 0.5, 0.5}
|
||||
},
|
||||
on_rightclick = on_rightclick,
|
||||
mesecons = {effector = {
|
||||
action_off = (function(pos, node)
|
||||
punch(pos)
|
||||
end),
|
||||
}},
|
||||
on_rotate = on_rotate,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doc") then
|
||||
doc.add_entry_alias("nodes", name, "nodes", name.."_open")
|
||||
end
|
||||
|
||||
end
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
-- Wrapper around mintest.pointed_thing_to_face_pos.
|
||||
local function get_fpos(placer, pointed_thing)
|
||||
local fpos
|
||||
-- Workaround: minetest.pointed_thing_to_face_pos crashes in MT 0.4.16 if
|
||||
-- pointed_thing.under and pointed_thing.above are equal
|
||||
-- FIXME: Remove this when MT got fixed.
|
||||
if not vector.equals(pointed_thing.under, pointed_thing.above) then
|
||||
-- The happy case: Everything is normal
|
||||
local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing)
|
||||
fpos = finepos.y % 1
|
||||
else
|
||||
-- Fallback if both above and under are equal
|
||||
fpos = 0
|
||||
end
|
||||
return fpos
|
||||
end
|
||||
|
||||
---- Trapdoor ----
|
||||
|
||||
local on_rotate
|
||||
if minetest.get_modpath("screwdriver") then
|
||||
on_rotate = function(pos, node, user, mode, param2)
|
||||
-- Flip trapdoor vertically
|
||||
if mode == screwdriver.ROTATE_AXIS then
|
||||
local minor = node.param2
|
||||
if node.param2 >= 20 then
|
||||
minor = node.param2 - 20
|
||||
if minor == 3 then
|
||||
minor = 1
|
||||
elseif minor == 1 then
|
||||
minor = 3
|
||||
end
|
||||
node.param2 = minor
|
||||
else
|
||||
if minor == 3 then
|
||||
minor = 1
|
||||
elseif minor == 1 then
|
||||
minor = 3
|
||||
end
|
||||
node.param2 = minor
|
||||
node.param2 = node.param2 + 20
|
||||
end
|
||||
minetest.set_node(pos, node)
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function mcl_doors:register_trapdoor(name, def)
|
||||
local groups = table.copy(def.groups)
|
||||
if groups == nil then
|
||||
groups = {}
|
||||
end
|
||||
groups.mesecon_ignore_opaque_dig = 1
|
||||
|
||||
if not def.sound_open then
|
||||
def.sound_open = "doors_door_open"
|
||||
end
|
||||
if not def.sound_close then
|
||||
def.sound_close = "doors_door_close"
|
||||
end
|
||||
|
||||
local function punch(pos)
|
||||
local me = minetest.get_node(pos)
|
||||
local tmp_node
|
||||
-- Close
|
||||
if minetest.get_item_group(me.name, "trapdoor") == 2 then
|
||||
minetest.sound_play(def.sound_close, {pos = pos, gain = 0.3, max_hear_distance = 16}, true)
|
||||
tmp_node = {name=name, param1=me.param1, param2=me.param2}
|
||||
-- Open
|
||||
else
|
||||
minetest.sound_play(def.sound_open, {pos = pos, gain = 0.3, max_hear_distance = 16}, true)
|
||||
tmp_node = {name=name.."_open", param1=me.param1, param2=me.param2}
|
||||
end
|
||||
minetest.set_node(pos, tmp_node)
|
||||
end
|
||||
|
||||
local on_rightclick
|
||||
if not def.only_redstone_can_open then
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
punch(pos)
|
||||
end
|
||||
end
|
||||
|
||||
-- Default help texts
|
||||
local longdesc, usagehelp, tt_help
|
||||
longdesc = def._doc_items_longdesc
|
||||
if not longdesc then
|
||||
if def.only_redstone_can_open then
|
||||
longdesc = S("Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can only be opened or closed by redstone power.")
|
||||
else
|
||||
longdesc = S("Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can be opened or closed by hand or redstone power.")
|
||||
end
|
||||
end
|
||||
usagehelp = def._doc_items_usagehelp
|
||||
if not usagehelp and not def.only_redstone_can_open then
|
||||
usagehelp = S("To open or close this trapdoor, rightclick it or send a redstone signal to it.")
|
||||
end
|
||||
if def.only_redstone_can_open then
|
||||
tt_help = S("Openable by redstone power")
|
||||
else
|
||||
tt_help = S("Openable by players and redstone power")
|
||||
end
|
||||
|
||||
-- Closed trapdoor
|
||||
|
||||
local tile_front = def.tile_front
|
||||
local tile_side = def.tile_side
|
||||
if not tile_side then
|
||||
tile_side = tile_front
|
||||
end
|
||||
local tiles_closed = {
|
||||
tile_front,
|
||||
tile_front .. "^[transformFY",
|
||||
tile_side, tile_side,
|
||||
tile_side, tile_side,
|
||||
}
|
||||
|
||||
local groups_closed = groups
|
||||
groups_closed.trapdoor = 1
|
||||
groups_closed.deco_block = 1
|
||||
minetest.register_node(name, {
|
||||
description = def.description,
|
||||
_tt_help = tt_help,
|
||||
_doc_items_longdesc = longdesc,
|
||||
_doc_items_usagehelp = usagehelp,
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_closed,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true,
|
||||
inventory_image = def.inventory_image,
|
||||
wield_image = def.wield_image,
|
||||
is_ground_content = false,
|
||||
paramtype = "light",
|
||||
stack_max = 64,
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
groups = groups_closed,
|
||||
_mcl_hardness = def._mcl_hardness,
|
||||
_mcl_blast_resistance = def._mcl_blast_resistance,
|
||||
sounds = def.sounds,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-8/16, -8/16, -8/16, 8/16, -5/16, 8/16},},
|
||||
},
|
||||
mesecons = {effector = {
|
||||
action_on = (function(pos, node)
|
||||
punch(pos)
|
||||
end),
|
||||
}},
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local p0 = pointed_thing.under
|
||||
local p1 = pointed_thing.above
|
||||
local param2 = 0
|
||||
|
||||
local placer_pos = placer:get_pos()
|
||||
if placer_pos then
|
||||
param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos))
|
||||
end
|
||||
|
||||
local fpos = get_fpos(placer, pointed_thing)
|
||||
|
||||
--local origname = itemstack:get_name()
|
||||
if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5)
|
||||
or (fpos < -0.5 and fpos > -0.999999999) then
|
||||
param2 = param2 + 20
|
||||
if param2 == 21 then
|
||||
param2 = 23
|
||||
elseif param2 == 23 then
|
||||
param2 = 21
|
||||
end
|
||||
end
|
||||
return minetest.item_place(itemstack, placer, pointed_thing, param2)
|
||||
end,
|
||||
on_rightclick = on_rightclick,
|
||||
on_rotate = on_rotate,
|
||||
})
|
||||
|
||||
-- Open trapdoor
|
||||
|
||||
local groups_open = table.copy(groups)
|
||||
|
||||
local tiles_open = {
|
||||
tile_side,
|
||||
tile_side .. "^[transformR180",
|
||||
tile_side .. "^[transformR270",
|
||||
tile_side .. "^[transformR90",
|
||||
tile_front .. "^[transform46",
|
||||
tile_front .. "^[transformFY",
|
||||
}
|
||||
|
||||
groups_open.trapdoor = 2
|
||||
groups_open.not_in_creative_inventory = 1
|
||||
minetest.register_node(name.."_open", {
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_open,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true,
|
||||
is_ground_content = false,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
-- TODO: Implement Minecraft behaviour: Climbable if directly above
|
||||
-- ladder w/ matching orientation.
|
||||
-- Current behavour: Always climbable
|
||||
climbable = true,
|
||||
sunlight_propagates = true,
|
||||
pointable = true,
|
||||
groups = groups_open,
|
||||
_mcl_hardness = def._mcl_hardness,
|
||||
_mcl_blast_resistance = def._mcl_blast_resistance,
|
||||
sounds = def.sounds,
|
||||
drop = name,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, 5/16, 0.5, 0.5, 0.5}
|
||||
},
|
||||
on_rightclick = on_rightclick,
|
||||
mesecons = {effector = {
|
||||
action_off = (function(pos, node)
|
||||
punch(pos)
|
||||
end),
|
||||
}},
|
||||
on_rotate = on_rotate,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doc") then
|
||||
doc.add_entry_alias("nodes", name, "nodes", name.."_open")
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -1,9 +1,9 @@
|
||||
mcl_doors = {}
|
||||
|
||||
local this = minetest.get_current_modname()
|
||||
local path = minetest.get_modpath(this)
|
||||
|
||||
dofile(path.."/api_doors.lua") -- Doors API
|
||||
dofile(path.."/api_trapdoors.lua") -- Trapdoors API
|
||||
dofile(path.."/register.lua") -- Register builtin doors and trapdoors
|
||||
dofile(path.."/alias.lua") -- Legacy aliases
|
||||
mcl_doors = {}
|
||||
|
||||
local this = minetest.get_current_modname()
|
||||
local path = minetest.get_modpath(this)
|
||||
|
||||
dofile(path.."/api_doors.lua") -- Doors API
|
||||
dofile(path.."/api_trapdoors.lua") -- Trapdoors API
|
||||
dofile(path.."/register.lua") -- Register builtin doors and trapdoors
|
||||
dofile(path.."/alias.lua") -- Legacy aliases
|
||||
|
@ -1,275 +1,275 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local function create_soil(pos, inv)
|
||||
if pos == nil then
|
||||
return false
|
||||
end
|
||||
local node = minetest.get_node(pos)
|
||||
local name = node.name
|
||||
local above = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z})
|
||||
if minetest.get_item_group(name, "cultivatable") == 2 then
|
||||
if above.name == "air" then
|
||||
node.name = "mcl_farming:soil"
|
||||
minetest.set_node(pos, node)
|
||||
minetest.sound_play("default_dig_crumbly", { pos = pos, gain = 0.5 }, true)
|
||||
return true
|
||||
end
|
||||
elseif minetest.get_item_group(name, "cultivatable") == 1 then
|
||||
if above.name == "air" then
|
||||
node.name = "mcl_core:dirt"
|
||||
minetest.set_node(pos, node)
|
||||
minetest.sound_play("default_dig_crumbly", { pos = pos, gain = 0.6 }, true)
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local hoe_on_place_function = function(wear_divisor)
|
||||
return function(itemstack, user, pointed_thing)
|
||||
-- Call on_rightclick if the pointed node defines it
|
||||
local node = minetest.get_node(pointed_thing.under)
|
||||
if user and not user:get_player_control().sneak then
|
||||
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
|
||||
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack
|
||||
end
|
||||
end
|
||||
|
||||
if minetest.is_protected(pointed_thing.under, user:get_player_name()) then
|
||||
minetest.record_protection_violation(pointed_thing.under, user:get_player_name())
|
||||
return itemstack
|
||||
end
|
||||
|
||||
if create_soil(pointed_thing.under, user:get_inventory()) then
|
||||
if not minetest.is_creative_enabled(user:get_player_name()) then
|
||||
itemstack:add_wear(65535/wear_divisor)
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local uses = {
|
||||
wood = 60,
|
||||
stone = 132,
|
||||
iron = 251,
|
||||
gold = 33,
|
||||
diamond = 1562,
|
||||
}
|
||||
|
||||
local hoe_tt = S("Turns block into farmland")
|
||||
local hoe_longdesc = S("Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.")
|
||||
local hoe_usagehelp = S("Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.")
|
||||
|
||||
minetest.register_tool("mcl_farming:hoe_wood", {
|
||||
description = S("Wood Hoe"),
|
||||
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.wood),
|
||||
_doc_items_longdesc = hoe_longdesc,
|
||||
_doc_items_usagehelp = hoe_usagehelp,
|
||||
_doc_items_hidden = false,
|
||||
inventory_image = "farming_tool_woodhoe.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
on_place = hoe_on_place_function(uses.wood),
|
||||
groups = { tool=1, hoe=1, enchantability=15 },
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 1,
|
||||
damage_groups = { fleshy = 1, },
|
||||
punch_attack_uses = uses.wood,
|
||||
},
|
||||
_repair_material = "group:wood",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 2, level = 1, uses = 60 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_wood",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"", "mcl_core:stick"},
|
||||
{"", "mcl_core:stick"}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_wood",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"mcl_core:stick", ""},
|
||||
{"mcl_core:stick", ""}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mcl_farming:hoe_wood",
|
||||
burntime = 10,
|
||||
})
|
||||
|
||||
minetest.register_tool("mcl_farming:hoe_stone", {
|
||||
description = S("Stone Hoe"),
|
||||
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.stone),
|
||||
_doc_items_longdesc = hoe_longdesc,
|
||||
_doc_items_usagehelp = hoe_usagehelp,
|
||||
inventory_image = "farming_tool_stonehoe.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
on_place = hoe_on_place_function(uses.stone),
|
||||
groups = { tool=1, hoe=1, enchantability=5 },
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.5,
|
||||
damage_groups = { fleshy = 1, },
|
||||
punch_attack_uses = uses.stone,
|
||||
},
|
||||
_repair_material = "group:cobble",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 4, level = 3, uses = 132 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_stone",
|
||||
recipe = {
|
||||
{"group:cobble", "group:cobble"},
|
||||
{"", "mcl_core:stick"},
|
||||
{"", "mcl_core:stick"}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_stone",
|
||||
recipe = {
|
||||
{"group:cobble", "group:cobble"},
|
||||
{"mcl_core:stick", ""},
|
||||
{"mcl_core:stick", ""}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_tool("mcl_farming:hoe_iron", {
|
||||
description = S("Iron Hoe"),
|
||||
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.iron),
|
||||
_doc_items_longdesc = hoe_longdesc,
|
||||
_doc_items_usagehelp = hoe_usagehelp,
|
||||
inventory_image = "farming_tool_steelhoe.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
on_place = hoe_on_place_function(uses.iron),
|
||||
groups = { tool=1, hoe=1, enchantability=14 },
|
||||
tool_capabilities = {
|
||||
-- 1/3
|
||||
full_punch_interval = 0.33333333,
|
||||
damage_groups = { fleshy = 1, },
|
||||
punch_attack_uses = uses.iron,
|
||||
},
|
||||
_repair_material = "mcl_core:iron_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 6, level = 4, uses = 251 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_iron",
|
||||
recipe = {
|
||||
{"mcl_core:iron_ingot", "mcl_core:iron_ingot"},
|
||||
{"", "mcl_core:stick"},
|
||||
{"", "mcl_core:stick"}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_iron",
|
||||
recipe = {
|
||||
{"mcl_core:iron_ingot", "mcl_core:iron_ingot"},
|
||||
{"mcl_core:stick", ""},
|
||||
{"mcl_core:stick", ""}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_core:iron_nugget",
|
||||
recipe = "mcl_farming:hoe_iron",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_tool("mcl_farming:hoe_gold", {
|
||||
description = S("Golden Hoe"),
|
||||
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.gold),
|
||||
_doc_items_longdesc = hoe_longdesc,
|
||||
_doc_items_usagehelp = hoe_usagehelp,
|
||||
inventory_image = "farming_tool_goldhoe.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
on_place = hoe_on_place_function(uses.gold),
|
||||
groups = { tool=1, hoe=1, enchantability=22 },
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 1,
|
||||
damage_groups = { fleshy = 1, },
|
||||
punch_attack_uses = uses.gold,
|
||||
},
|
||||
_repair_material = "mcl_core:gold_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 12, level = 2, uses = 33 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_gold",
|
||||
recipe = {
|
||||
{"mcl_core:gold_ingot", "mcl_core:gold_ingot"},
|
||||
{"", "mcl_core:stick"},
|
||||
{"", "mcl_core:stick"}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_gold",
|
||||
recipe = {
|
||||
{"mcl_core:gold_ingot", "mcl_core:gold_ingot"},
|
||||
{"mcl_core:stick", ""},
|
||||
{"mcl_core:stick", ""}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_core:gold_nugget",
|
||||
recipe = "mcl_farming:hoe_gold",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_tool("mcl_farming:hoe_diamond", {
|
||||
description = S("Diamond Hoe"),
|
||||
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.diamond),
|
||||
_doc_items_longdesc = hoe_longdesc,
|
||||
_doc_items_usagehelp = hoe_usagehelp,
|
||||
inventory_image = "farming_tool_diamondhoe.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
on_place = hoe_on_place_function(uses.diamond),
|
||||
groups = { tool=1, hoe=1, enchantability=10 },
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.25,
|
||||
damage_groups = { fleshy = 1, },
|
||||
punch_attack_uses = uses.diamond,
|
||||
},
|
||||
_repair_material = "mcl_core:diamond",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 8, level = 5, uses = 1562 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_diamond",
|
||||
recipe = {
|
||||
{"mcl_core:diamond", "mcl_core:diamond"},
|
||||
{"", "mcl_core:stick"},
|
||||
{"", "mcl_core:stick"}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_diamond",
|
||||
recipe = {
|
||||
{"mcl_core:diamond", "mcl_core:diamond"},
|
||||
{"mcl_core:stick", ""},
|
||||
{"mcl_core:stick", ""}
|
||||
}
|
||||
})
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local function create_soil(pos, inv)
|
||||
if pos == nil then
|
||||
return false
|
||||
end
|
||||
local node = minetest.get_node(pos)
|
||||
local name = node.name
|
||||
local above = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z})
|
||||
if minetest.get_item_group(name, "cultivatable") == 2 then
|
||||
if above.name == "air" then
|
||||
node.name = "mcl_farming:soil"
|
||||
minetest.set_node(pos, node)
|
||||
minetest.sound_play("default_dig_crumbly", { pos = pos, gain = 0.5 }, true)
|
||||
return true
|
||||
end
|
||||
elseif minetest.get_item_group(name, "cultivatable") == 1 then
|
||||
if above.name == "air" then
|
||||
node.name = "mcl_core:dirt"
|
||||
minetest.set_node(pos, node)
|
||||
minetest.sound_play("default_dig_crumbly", { pos = pos, gain = 0.6 }, true)
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local hoe_on_place_function = function(wear_divisor)
|
||||
return function(itemstack, user, pointed_thing)
|
||||
-- Call on_rightclick if the pointed node defines it
|
||||
local node = minetest.get_node(pointed_thing.under)
|
||||
if user and not user:get_player_control().sneak then
|
||||
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
|
||||
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack
|
||||
end
|
||||
end
|
||||
|
||||
if minetest.is_protected(pointed_thing.under, user:get_player_name()) then
|
||||
minetest.record_protection_violation(pointed_thing.under, user:get_player_name())
|
||||
return itemstack
|
||||
end
|
||||
|
||||
if create_soil(pointed_thing.under, user:get_inventory()) then
|
||||
if not minetest.is_creative_enabled(user:get_player_name()) then
|
||||
itemstack:add_wear(65535/wear_divisor)
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local uses = {
|
||||
wood = 60,
|
||||
stone = 132,
|
||||
iron = 251,
|
||||
gold = 33,
|
||||
diamond = 1562,
|
||||
}
|
||||
|
||||
local hoe_tt = S("Turns block into farmland")
|
||||
local hoe_longdesc = S("Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.")
|
||||
local hoe_usagehelp = S("Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.")
|
||||
|
||||
minetest.register_tool("mcl_farming:hoe_wood", {
|
||||
description = S("Wood Hoe"),
|
||||
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.wood),
|
||||
_doc_items_longdesc = hoe_longdesc,
|
||||
_doc_items_usagehelp = hoe_usagehelp,
|
||||
_doc_items_hidden = false,
|
||||
inventory_image = "farming_tool_woodhoe.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
on_place = hoe_on_place_function(uses.wood),
|
||||
groups = { tool=1, hoe=1, enchantability=15 },
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 1,
|
||||
damage_groups = { fleshy = 1, },
|
||||
punch_attack_uses = uses.wood,
|
||||
},
|
||||
_repair_material = "group:wood",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 2, level = 1, uses = 60 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_wood",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"", "mcl_core:stick"},
|
||||
{"", "mcl_core:stick"}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_wood",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"mcl_core:stick", ""},
|
||||
{"mcl_core:stick", ""}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mcl_farming:hoe_wood",
|
||||
burntime = 10,
|
||||
})
|
||||
|
||||
minetest.register_tool("mcl_farming:hoe_stone", {
|
||||
description = S("Stone Hoe"),
|
||||
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.stone),
|
||||
_doc_items_longdesc = hoe_longdesc,
|
||||
_doc_items_usagehelp = hoe_usagehelp,
|
||||
inventory_image = "farming_tool_stonehoe.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
on_place = hoe_on_place_function(uses.stone),
|
||||
groups = { tool=1, hoe=1, enchantability=5 },
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.5,
|
||||
damage_groups = { fleshy = 1, },
|
||||
punch_attack_uses = uses.stone,
|
||||
},
|
||||
_repair_material = "group:cobble",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 4, level = 3, uses = 132 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_stone",
|
||||
recipe = {
|
||||
{"group:cobble", "group:cobble"},
|
||||
{"", "mcl_core:stick"},
|
||||
{"", "mcl_core:stick"}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_stone",
|
||||
recipe = {
|
||||
{"group:cobble", "group:cobble"},
|
||||
{"mcl_core:stick", ""},
|
||||
{"mcl_core:stick", ""}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_tool("mcl_farming:hoe_iron", {
|
||||
description = S("Iron Hoe"),
|
||||
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.iron),
|
||||
_doc_items_longdesc = hoe_longdesc,
|
||||
_doc_items_usagehelp = hoe_usagehelp,
|
||||
inventory_image = "farming_tool_steelhoe.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
on_place = hoe_on_place_function(uses.iron),
|
||||
groups = { tool=1, hoe=1, enchantability=14 },
|
||||
tool_capabilities = {
|
||||
-- 1/3
|
||||
full_punch_interval = 0.33333333,
|
||||
damage_groups = { fleshy = 1, },
|
||||
punch_attack_uses = uses.iron,
|
||||
},
|
||||
_repair_material = "mcl_core:iron_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 6, level = 4, uses = 251 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_iron",
|
||||
recipe = {
|
||||
{"mcl_core:iron_ingot", "mcl_core:iron_ingot"},
|
||||
{"", "mcl_core:stick"},
|
||||
{"", "mcl_core:stick"}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_iron",
|
||||
recipe = {
|
||||
{"mcl_core:iron_ingot", "mcl_core:iron_ingot"},
|
||||
{"mcl_core:stick", ""},
|
||||
{"mcl_core:stick", ""}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_core:iron_nugget",
|
||||
recipe = "mcl_farming:hoe_iron",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_tool("mcl_farming:hoe_gold", {
|
||||
description = S("Golden Hoe"),
|
||||
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.gold),
|
||||
_doc_items_longdesc = hoe_longdesc,
|
||||
_doc_items_usagehelp = hoe_usagehelp,
|
||||
inventory_image = "farming_tool_goldhoe.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
on_place = hoe_on_place_function(uses.gold),
|
||||
groups = { tool=1, hoe=1, enchantability=22 },
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 1,
|
||||
damage_groups = { fleshy = 1, },
|
||||
punch_attack_uses = uses.gold,
|
||||
},
|
||||
_repair_material = "mcl_core:gold_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 12, level = 2, uses = 33 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_gold",
|
||||
recipe = {
|
||||
{"mcl_core:gold_ingot", "mcl_core:gold_ingot"},
|
||||
{"", "mcl_core:stick"},
|
||||
{"", "mcl_core:stick"}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_gold",
|
||||
recipe = {
|
||||
{"mcl_core:gold_ingot", "mcl_core:gold_ingot"},
|
||||
{"mcl_core:stick", ""},
|
||||
{"mcl_core:stick", ""}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_core:gold_nugget",
|
||||
recipe = "mcl_farming:hoe_gold",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_tool("mcl_farming:hoe_diamond", {
|
||||
description = S("Diamond Hoe"),
|
||||
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.diamond),
|
||||
_doc_items_longdesc = hoe_longdesc,
|
||||
_doc_items_usagehelp = hoe_usagehelp,
|
||||
inventory_image = "farming_tool_diamondhoe.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
on_place = hoe_on_place_function(uses.diamond),
|
||||
groups = { tool=1, hoe=1, enchantability=10 },
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.25,
|
||||
damage_groups = { fleshy = 1, },
|
||||
punch_attack_uses = uses.diamond,
|
||||
},
|
||||
_repair_material = "mcl_core:diamond",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 8, level = 5, uses = 1562 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_diamond",
|
||||
recipe = {
|
||||
{"mcl_core:diamond", "mcl_core:diamond"},
|
||||
{"", "mcl_core:stick"},
|
||||
{"", "mcl_core:stick"}
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_farming:hoe_diamond",
|
||||
recipe = {
|
||||
{"mcl_core:diamond", "mcl_core:diamond"},
|
||||
{"mcl_core:stick", ""},
|
||||
{"mcl_core:stick", ""}
|
||||
}
|
||||
})
|
||||
|
@ -1,306 +1,306 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
-- Node box
|
||||
local p = {-2/16, -0.5, -2/16, 2/16, 0.5, 2/16}
|
||||
local x1 = {-0.5, 4/16, -1/16, -2/16, 7/16, 1/16} --oben(quer) -x
|
||||
local x12 = {-0.5, -2/16, -1/16, -2/16, 1/16, 1/16} --unten(quer) -x
|
||||
local x2 = {2/16, 4/16, -1/16, 0.5, 7/16, 1/16} --oben(quer) x
|
||||
local x22 = {2/16, -2/16, -1/16, 0.5, 1/16, 1/16} --unten(quer) x
|
||||
local z1 = {-1/16, 4/16, -0.5, 1/16, 7/16, -2/16} --oben(quer) -z
|
||||
local z12 = {-1/16, -2/16, -0.5, 1/16, 1/16, -2/16} --unten(quer) -z
|
||||
local z2 = {-1/16, 4/16, 2/16, 1/16, 7/16, 0.5} --oben(quer) z
|
||||
local z22 = {-1/16, -2/16, 2/16, 1/16, 1/16, 0.5} --unten(quer) z
|
||||
|
||||
-- Collision box
|
||||
local cp = {-2/16, -0.5, -2/16, 2/16, 1.01, 2/16}
|
||||
local cx1 = {-0.5, -0.5, -2/16, -2/16, 1.01, 2/16} --unten(quer) -x
|
||||
local cx2 = {2/16, -0.5, -2/16, 0.5, 1.01, 2/16} --unten(quer) x
|
||||
local cz1 = {-2/16, -0.5, -0.5, 2/16, 1.01, -2/16} --unten(quer) -z
|
||||
local cz2 = {-2/16, -0.5, 2/16, 2/16, 1.01, 0.5} --unten(quer) z
|
||||
|
||||
mcl_fences = {}
|
||||
|
||||
function mcl_fences.register_fence(id, fence_name, texture, groups, hardness, blast_resistance, connects_to, sounds)
|
||||
local cgroups = table.copy(groups)
|
||||
if cgroups == nil then cgroups = {} end
|
||||
cgroups.fence = 1
|
||||
cgroups.deco_block = 1
|
||||
if connects_to == nil then
|
||||
connects_to = {}
|
||||
else
|
||||
connects_to = table.copy(connects_to)
|
||||
end
|
||||
local fence_id = minetest.get_current_modname()..":"..id
|
||||
table.insert(connects_to, "group:solid")
|
||||
table.insert(connects_to, "group:fence_gate")
|
||||
table.insert(connects_to, fence_id)
|
||||
minetest.register_node(fence_id, {
|
||||
description = fence_name,
|
||||
_doc_items_longdesc = S("Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump."),
|
||||
tiles = {texture},
|
||||
inventory_image = "mcl_fences_fence_mask.png^" .. texture .. "^mcl_fences_fence_mask.png^[makealpha:255,126,126",
|
||||
wield_image = "mcl_fences_fence_mask.png^" .. texture .. "^mcl_fences_fence_mask.png^[makealpha:255,126,126",
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = cgroups,
|
||||
stack_max = 64,
|
||||
sunlight_propagates = true,
|
||||
drawtype = "nodebox",
|
||||
connect_sides = { "front", "back", "left", "right" },
|
||||
connects_to = connects_to,
|
||||
node_box = {
|
||||
type = "connected",
|
||||
fixed = {p},
|
||||
connect_front = {z1,z12},
|
||||
connect_back = {z2,z22,},
|
||||
connect_left = {x1,x12},
|
||||
connect_right = {x2,x22},
|
||||
},
|
||||
collision_box = {
|
||||
type = "connected",
|
||||
fixed = {cp},
|
||||
connect_front = {cz1},
|
||||
connect_back = {cz2,},
|
||||
connect_left = {cx1},
|
||||
connect_right = {cx2},
|
||||
},
|
||||
sounds = sounds,
|
||||
_mcl_blast_resistance = blast_resistance,
|
||||
_mcl_hardness = hardness,
|
||||
})
|
||||
|
||||
return fence_id
|
||||
end
|
||||
|
||||
function mcl_fences.register_fence_gate(id, fence_gate_name, texture, groups, hardness, blast_resistance, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close)
|
||||
local meta2
|
||||
local state2 = 0
|
||||
|
||||
local function update_gate(pos, node)
|
||||
minetest.set_node(pos, node)
|
||||
end
|
||||
|
||||
local gate_id = minetest.get_current_modname()..":"..id.."_gate"
|
||||
local open_gate_id = gate_id .. "_open"
|
||||
if not sound_open then
|
||||
sound_open = "doors_fencegate_open"
|
||||
end
|
||||
if not sound_close then
|
||||
sound_close = "doors_fencegate_close"
|
||||
end
|
||||
if not sound_gain_open then
|
||||
sound_gain_open = 0.3
|
||||
end
|
||||
if not sound_gain_close then
|
||||
sound_gain_close = 0.3
|
||||
end
|
||||
local function punch_gate(pos, node)
|
||||
meta2 = minetest.get_meta(pos)
|
||||
state2 = meta2:get_int("state")
|
||||
local tmp_node2
|
||||
if state2 == 1 then
|
||||
state2 = 0
|
||||
minetest.sound_play(sound_close, {gain = sound_gain_close, max_hear_distance = 10, pos = pos}, true)
|
||||
tmp_node2 = {name=gate_id, param1=node.param1, param2=node.param2}
|
||||
else
|
||||
state2 = 1
|
||||
minetest.sound_play(sound_open, {gain = sound_gain_open, max_hear_distance = 10, pos = pos}, true)
|
||||
tmp_node2 = {name=open_gate_id, param1=node.param1, param2=node.param2}
|
||||
end
|
||||
update_gate(pos, tmp_node2)
|
||||
meta2:set_int("state", state2)
|
||||
end
|
||||
|
||||
local on_rotate
|
||||
if minetest.get_modpath("screwdriver") then
|
||||
on_rotate = screwdriver.rotate_simple
|
||||
end
|
||||
|
||||
local cgroups = table.copy(groups)
|
||||
if cgroups == nil then cgroups = {} end
|
||||
cgroups.fence_gate = 1
|
||||
cgroups.deco_block = 1
|
||||
|
||||
cgroups.mesecon_ignore_opaque_dig = 1
|
||||
cgroups.mesecon_effector_on = 1
|
||||
cgroups.fence_gate = 1
|
||||
minetest.register_node(open_gate_id, {
|
||||
tiles = {texture},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
groups = cgroups,
|
||||
drop = gate_id,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -3/16, -1/16, -6/16, 0.5, 1/16}, --links abschluss
|
||||
{6/16, -3/16, -1/16, 0.5, 0.5, 1/16}, --rechts abschluss
|
||||
{-0.5, 4/16, 1/16, -6/16, 7/16, 6/16}, --oben-links(quer) x
|
||||
{-0.5, -2/16, 1/16, -6/16, 1/16, 6/16}, --unten-links(quer) x
|
||||
{6/16, 4/16, 1/16, 0.5, 7/16, 0.5}, --oben-rechts(quer) x
|
||||
{6/16, -2/16, 1/16, 0.5, 1/16, 0.5}, --unten-rechts(quer) x
|
||||
{-0.5, -2/16, 6/16, -6/16, 7/16, 0.5}, --mitte links
|
||||
{6/16, 1/16, 0.5, 0.5, 4/16, 6/16}, --mitte rechts
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -3/16, -1/16, 0.5, 0.5, 1/16}, --gate
|
||||
}
|
||||
},
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
punch_gate(pos, node)
|
||||
end,
|
||||
mesecons = {effector = {
|
||||
action_off = (function(pos, node)
|
||||
punch_gate(pos, node)
|
||||
end),
|
||||
}},
|
||||
on_rotate = on_rotate,
|
||||
sounds = sounds,
|
||||
_mcl_blast_resistance = blast_resistance,
|
||||
_mcl_hardness = hardness,
|
||||
})
|
||||
|
||||
local cgroups_closed = table.copy(cgroups)
|
||||
cgroups_closed.mesecon_effector_on = nil
|
||||
cgroups_closed.mesecon_effector_off = nil
|
||||
minetest.register_node(gate_id, {
|
||||
description = fence_gate_name,
|
||||
_tt_help = S("Openable by players and redstone power"),
|
||||
_doc_items_longdesc = S("Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates."),
|
||||
_doc_items_usagehelp = S("Right-click the fence gate to open or close it."),
|
||||
tiles = {texture},
|
||||
inventory_image = "mcl_fences_fence_gate_mask.png^" .. texture .. "^mcl_fences_fence_gate_mask.png^[makealpha:255,126,126",
|
||||
wield_image = "mcl_fences_fence_gate_mask.png^" .. texture .. "^mcl_fences_fence_gate_mask.png^[makealpha:255,126,126",
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
stack_max = 64,
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
walkable = true,
|
||||
groups = cgroups_closed,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -3/16, -1/16, -6/16, 0.5, 1/16}, --links abschluss
|
||||
{6/16, -3/16, -1/16, 0.5, 0.5, 1/16}, --rechts abschluss
|
||||
{-2/16, -2/16, -1/16, 0, 7/16, 1/16}, --mitte links
|
||||
{0, -2/16, -1/16, 2/16, 7/16, 1/16}, --mitte rechts
|
||||
{-0.5, 4/16, -1/16, -2/16, 7/16, 1/16}, --oben(quer) -z
|
||||
{-0.5, -2/16, -1/16, -2/16, 1/16, 1/16}, --unten(quer) -z
|
||||
{2/16, 4/16, -1/16, 0.5, 7/16, 1/16}, --oben(quer) z
|
||||
{2/16, -2/16, -1/16, 0.5, 1/16, 1/16}, --unten(quer) z
|
||||
}
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -3/16, -2/16, 0.5, 1, 2/16}, --gate
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -3/16, -1/16, 0.5, 0.5, 1/16}, --gate
|
||||
}
|
||||
},
|
||||
on_construct = function(pos)
|
||||
meta2 = minetest.get_meta(pos)
|
||||
meta2:set_int("state", 0)
|
||||
state2 = 0
|
||||
end,
|
||||
mesecons = {effector = {
|
||||
action_on = (function(pos, node)
|
||||
punch_gate(pos, node)
|
||||
end),
|
||||
}},
|
||||
on_rotate = on_rotate,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
punch_gate(pos, node)
|
||||
end,
|
||||
sounds = sounds,
|
||||
_mcl_blast_resistance = blast_resistance,
|
||||
_mcl_hardness = hardness,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doc") then
|
||||
doc.add_entry_alias("nodes", gate_id, "nodes", open_gate_id)
|
||||
end
|
||||
|
||||
return gate_id, open_gate_id
|
||||
end
|
||||
|
||||
function mcl_fences.register_fence_and_fence_gate(id, fence_name, fence_gate_name, texture_fence, groups, hardness, blast_resistance, connects_to, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close, texture_fence_gate)
|
||||
if texture_fence_gate == nil then
|
||||
texture_fence_gate = texture_fence
|
||||
end
|
||||
local fence_id = mcl_fences.register_fence(id, fence_name, texture_fence, groups, hardness, blast_resistance, connects_to, sounds)
|
||||
local gate_id, open_gate_id = mcl_fences.register_fence_gate(id, fence_gate_name, texture_fence_gate, groups, hardness, blast_resistance, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close)
|
||||
return fence_id, gate_id, open_gate_id
|
||||
end
|
||||
|
||||
local wood_groups = {handy=1,axey=1, flammable=2,fence_wood=1, fire_encouragement=5, fire_flammability=20}
|
||||
local wood_connect = {"group:fence_wood"}
|
||||
local wood_sounds = mcl_sounds.node_sound_wood_defaults()
|
||||
|
||||
local woods = {
|
||||
{"", S("Oak Fence"), S("Oak Fence Gate"), "mcl_fences_fence_oak.png", "mcl_fences_fence_gate_oak.png", "mcl_core:wood"},
|
||||
{"spruce", S("Spruce Fence"), S("Spruce Fence Gate"), "mcl_fences_fence_spruce.png", "mcl_fences_fence_gate_spruce.png", "mcl_core:sprucewood"},
|
||||
{"birch", S("Birch Fence"), S("Birch Fence Gate"), "mcl_fences_fence_birch.png", "mcl_fences_fence_gate_birch.png", "mcl_core:birchwood"},
|
||||
{"jungle", S("Jungle Fence"), S("Jungle Fence Gate"), "mcl_fences_fence_jungle.png", "mcl_fences_fence_gate_jungle.png", "mcl_core:junglewood"},
|
||||
{"dark_oak", S("Dark Oak Fence"), S("Dark Oak Fence Gate"), "mcl_fences_fence_big_oak.png", "mcl_fences_fence_gate_big_oak.png", "mcl_core:darkwood"},
|
||||
{"acacia", S("Acacia Fence"), S("Acacia Fence Gate"), "mcl_fences_fence_acacia.png", "mcl_fences_fence_gate_acacia.png", "mcl_core:acaciawood"},
|
||||
}
|
||||
|
||||
for w=1, #woods do
|
||||
local wood = woods[w]
|
||||
local id, id_gate
|
||||
if wood[1] == "" then
|
||||
id = "fence"
|
||||
id_gate = "fence_gate"
|
||||
else
|
||||
id = wood[1].."_fence"
|
||||
id_gate = wood[1].."_fence_gate"
|
||||
end
|
||||
mcl_fences.register_fence_and_fence_gate(id, wood[2], wood[3], wood[4], wood_groups, 2, 15, wood_connect, wood_sounds)
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_fences:"..id.." 3",
|
||||
recipe = {
|
||||
{wood[6], "mcl_core:stick", wood[6]},
|
||||
{wood[6], "mcl_core:stick", wood[6]},
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_fences:"..id_gate,
|
||||
recipe = {
|
||||
{"mcl_core:stick", wood[6], "mcl_core:stick"},
|
||||
{"mcl_core:stick", wood[6], "mcl_core:stick"},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
-- Nether Brick Fence (without fence gate!)
|
||||
mcl_fences.register_fence("nether_brick_fence", S("Nether Brick Fence"), "mcl_fences_fence_nether_brick.png", {pickaxey=1, deco_block=1, fence_nether_brick=1}, 2, 30, {"group:fence_nether_brick"}, mcl_sounds.node_sound_stone_defaults())
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_fences:nether_brick_fence 6",
|
||||
recipe = {
|
||||
{"mcl_nether:nether_brick", "mcl_nether:netherbrick", "mcl_nether:nether_brick"},
|
||||
{"mcl_nether:nether_brick", "mcl_nether:netherbrick", "mcl_nether:nether_brick"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "group:fence_wood",
|
||||
burntime = 15,
|
||||
})
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
-- Node box
|
||||
local p = {-2/16, -0.5, -2/16, 2/16, 0.5, 2/16}
|
||||
local x1 = {-0.5, 4/16, -1/16, -2/16, 7/16, 1/16} --oben(quer) -x
|
||||
local x12 = {-0.5, -2/16, -1/16, -2/16, 1/16, 1/16} --unten(quer) -x
|
||||
local x2 = {2/16, 4/16, -1/16, 0.5, 7/16, 1/16} --oben(quer) x
|
||||
local x22 = {2/16, -2/16, -1/16, 0.5, 1/16, 1/16} --unten(quer) x
|
||||
local z1 = {-1/16, 4/16, -0.5, 1/16, 7/16, -2/16} --oben(quer) -z
|
||||
local z12 = {-1/16, -2/16, -0.5, 1/16, 1/16, -2/16} --unten(quer) -z
|
||||
local z2 = {-1/16, 4/16, 2/16, 1/16, 7/16, 0.5} --oben(quer) z
|
||||
local z22 = {-1/16, -2/16, 2/16, 1/16, 1/16, 0.5} --unten(quer) z
|
||||
|
||||
-- Collision box
|
||||
local cp = {-2/16, -0.5, -2/16, 2/16, 1.01, 2/16}
|
||||
local cx1 = {-0.5, -0.5, -2/16, -2/16, 1.01, 2/16} --unten(quer) -x
|
||||
local cx2 = {2/16, -0.5, -2/16, 0.5, 1.01, 2/16} --unten(quer) x
|
||||
local cz1 = {-2/16, -0.5, -0.5, 2/16, 1.01, -2/16} --unten(quer) -z
|
||||
local cz2 = {-2/16, -0.5, 2/16, 2/16, 1.01, 0.5} --unten(quer) z
|
||||
|
||||
mcl_fences = {}
|
||||
|
||||
function mcl_fences.register_fence(id, fence_name, texture, groups, hardness, blast_resistance, connects_to, sounds)
|
||||
local cgroups = table.copy(groups)
|
||||
if cgroups == nil then cgroups = {} end
|
||||
cgroups.fence = 1
|
||||
cgroups.deco_block = 1
|
||||
if connects_to == nil then
|
||||
connects_to = {}
|
||||
else
|
||||
connects_to = table.copy(connects_to)
|
||||
end
|
||||
local fence_id = minetest.get_current_modname()..":"..id
|
||||
table.insert(connects_to, "group:solid")
|
||||
table.insert(connects_to, "group:fence_gate")
|
||||
table.insert(connects_to, fence_id)
|
||||
minetest.register_node(fence_id, {
|
||||
description = fence_name,
|
||||
_doc_items_longdesc = S("Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump."),
|
||||
tiles = {texture},
|
||||
inventory_image = "mcl_fences_fence_mask.png^" .. texture .. "^mcl_fences_fence_mask.png^[makealpha:255,126,126",
|
||||
wield_image = "mcl_fences_fence_mask.png^" .. texture .. "^mcl_fences_fence_mask.png^[makealpha:255,126,126",
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = cgroups,
|
||||
stack_max = 64,
|
||||
sunlight_propagates = true,
|
||||
drawtype = "nodebox",
|
||||
connect_sides = { "front", "back", "left", "right" },
|
||||
connects_to = connects_to,
|
||||
node_box = {
|
||||
type = "connected",
|
||||
fixed = {p},
|
||||
connect_front = {z1,z12},
|
||||
connect_back = {z2,z22,},
|
||||
connect_left = {x1,x12},
|
||||
connect_right = {x2,x22},
|
||||
},
|
||||
collision_box = {
|
||||
type = "connected",
|
||||
fixed = {cp},
|
||||
connect_front = {cz1},
|
||||
connect_back = {cz2,},
|
||||
connect_left = {cx1},
|
||||
connect_right = {cx2},
|
||||
},
|
||||
sounds = sounds,
|
||||
_mcl_blast_resistance = blast_resistance,
|
||||
_mcl_hardness = hardness,
|
||||
})
|
||||
|
||||
return fence_id
|
||||
end
|
||||
|
||||
function mcl_fences.register_fence_gate(id, fence_gate_name, texture, groups, hardness, blast_resistance, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close)
|
||||
local meta2
|
||||
local state2 = 0
|
||||
|
||||
local function update_gate(pos, node)
|
||||
minetest.set_node(pos, node)
|
||||
end
|
||||
|
||||
local gate_id = minetest.get_current_modname()..":"..id.."_gate"
|
||||
local open_gate_id = gate_id .. "_open"
|
||||
if not sound_open then
|
||||
sound_open = "doors_fencegate_open"
|
||||
end
|
||||
if not sound_close then
|
||||
sound_close = "doors_fencegate_close"
|
||||
end
|
||||
if not sound_gain_open then
|
||||
sound_gain_open = 0.3
|
||||
end
|
||||
if not sound_gain_close then
|
||||
sound_gain_close = 0.3
|
||||
end
|
||||
local function punch_gate(pos, node)
|
||||
meta2 = minetest.get_meta(pos)
|
||||
state2 = meta2:get_int("state")
|
||||
local tmp_node2
|
||||
if state2 == 1 then
|
||||
state2 = 0
|
||||
minetest.sound_play(sound_close, {gain = sound_gain_close, max_hear_distance = 10, pos = pos}, true)
|
||||
tmp_node2 = {name=gate_id, param1=node.param1, param2=node.param2}
|
||||
else
|
||||
state2 = 1
|
||||
minetest.sound_play(sound_open, {gain = sound_gain_open, max_hear_distance = 10, pos = pos}, true)
|
||||
tmp_node2 = {name=open_gate_id, param1=node.param1, param2=node.param2}
|
||||
end
|
||||
update_gate(pos, tmp_node2)
|
||||
meta2:set_int("state", state2)
|
||||
end
|
||||
|
||||
local on_rotate
|
||||
if minetest.get_modpath("screwdriver") then
|
||||
on_rotate = screwdriver.rotate_simple
|
||||
end
|
||||
|
||||
local cgroups = table.copy(groups)
|
||||
if cgroups == nil then cgroups = {} end
|
||||
cgroups.fence_gate = 1
|
||||
cgroups.deco_block = 1
|
||||
|
||||
cgroups.mesecon_ignore_opaque_dig = 1
|
||||
cgroups.mesecon_effector_on = 1
|
||||
cgroups.fence_gate = 1
|
||||
minetest.register_node(open_gate_id, {
|
||||
tiles = {texture},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
groups = cgroups,
|
||||
drop = gate_id,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -3/16, -1/16, -6/16, 0.5, 1/16}, --links abschluss
|
||||
{6/16, -3/16, -1/16, 0.5, 0.5, 1/16}, --rechts abschluss
|
||||
{-0.5, 4/16, 1/16, -6/16, 7/16, 6/16}, --oben-links(quer) x
|
||||
{-0.5, -2/16, 1/16, -6/16, 1/16, 6/16}, --unten-links(quer) x
|
||||
{6/16, 4/16, 1/16, 0.5, 7/16, 0.5}, --oben-rechts(quer) x
|
||||
{6/16, -2/16, 1/16, 0.5, 1/16, 0.5}, --unten-rechts(quer) x
|
||||
{-0.5, -2/16, 6/16, -6/16, 7/16, 0.5}, --mitte links
|
||||
{6/16, 1/16, 0.5, 0.5, 4/16, 6/16}, --mitte rechts
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -3/16, -1/16, 0.5, 0.5, 1/16}, --gate
|
||||
}
|
||||
},
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
punch_gate(pos, node)
|
||||
end,
|
||||
mesecons = {effector = {
|
||||
action_off = (function(pos, node)
|
||||
punch_gate(pos, node)
|
||||
end),
|
||||
}},
|
||||
on_rotate = on_rotate,
|
||||
sounds = sounds,
|
||||
_mcl_blast_resistance = blast_resistance,
|
||||
_mcl_hardness = hardness,
|
||||
})
|
||||
|
||||
local cgroups_closed = table.copy(cgroups)
|
||||
cgroups_closed.mesecon_effector_on = nil
|
||||
cgroups_closed.mesecon_effector_off = nil
|
||||
minetest.register_node(gate_id, {
|
||||
description = fence_gate_name,
|
||||
_tt_help = S("Openable by players and redstone power"),
|
||||
_doc_items_longdesc = S("Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates."),
|
||||
_doc_items_usagehelp = S("Right-click the fence gate to open or close it."),
|
||||
tiles = {texture},
|
||||
inventory_image = "mcl_fences_fence_gate_mask.png^" .. texture .. "^mcl_fences_fence_gate_mask.png^[makealpha:255,126,126",
|
||||
wield_image = "mcl_fences_fence_gate_mask.png^" .. texture .. "^mcl_fences_fence_gate_mask.png^[makealpha:255,126,126",
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
stack_max = 64,
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
walkable = true,
|
||||
groups = cgroups_closed,
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -3/16, -1/16, -6/16, 0.5, 1/16}, --links abschluss
|
||||
{6/16, -3/16, -1/16, 0.5, 0.5, 1/16}, --rechts abschluss
|
||||
{-2/16, -2/16, -1/16, 0, 7/16, 1/16}, --mitte links
|
||||
{0, -2/16, -1/16, 2/16, 7/16, 1/16}, --mitte rechts
|
||||
{-0.5, 4/16, -1/16, -2/16, 7/16, 1/16}, --oben(quer) -z
|
||||
{-0.5, -2/16, -1/16, -2/16, 1/16, 1/16}, --unten(quer) -z
|
||||
{2/16, 4/16, -1/16, 0.5, 7/16, 1/16}, --oben(quer) z
|
||||
{2/16, -2/16, -1/16, 0.5, 1/16, 1/16}, --unten(quer) z
|
||||
}
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -3/16, -2/16, 0.5, 1, 2/16}, --gate
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -3/16, -1/16, 0.5, 0.5, 1/16}, --gate
|
||||
}
|
||||
},
|
||||
on_construct = function(pos)
|
||||
meta2 = minetest.get_meta(pos)
|
||||
meta2:set_int("state", 0)
|
||||
state2 = 0
|
||||
end,
|
||||
mesecons = {effector = {
|
||||
action_on = (function(pos, node)
|
||||
punch_gate(pos, node)
|
||||
end),
|
||||
}},
|
||||
on_rotate = on_rotate,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
punch_gate(pos, node)
|
||||
end,
|
||||
sounds = sounds,
|
||||
_mcl_blast_resistance = blast_resistance,
|
||||
_mcl_hardness = hardness,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doc") then
|
||||
doc.add_entry_alias("nodes", gate_id, "nodes", open_gate_id)
|
||||
end
|
||||
|
||||
return gate_id, open_gate_id
|
||||
end
|
||||
|
||||
function mcl_fences.register_fence_and_fence_gate(id, fence_name, fence_gate_name, texture_fence, groups, hardness, blast_resistance, connects_to, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close, texture_fence_gate)
|
||||
if texture_fence_gate == nil then
|
||||
texture_fence_gate = texture_fence
|
||||
end
|
||||
local fence_id = mcl_fences.register_fence(id, fence_name, texture_fence, groups, hardness, blast_resistance, connects_to, sounds)
|
||||
local gate_id, open_gate_id = mcl_fences.register_fence_gate(id, fence_gate_name, texture_fence_gate, groups, hardness, blast_resistance, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close)
|
||||
return fence_id, gate_id, open_gate_id
|
||||
end
|
||||
|
||||
local wood_groups = {handy=1,axey=1, flammable=2,fence_wood=1, fire_encouragement=5, fire_flammability=20}
|
||||
local wood_connect = {"group:fence_wood"}
|
||||
local wood_sounds = mcl_sounds.node_sound_wood_defaults()
|
||||
|
||||
local woods = {
|
||||
{"", S("Oak Fence"), S("Oak Fence Gate"), "mcl_fences_fence_oak.png", "mcl_fences_fence_gate_oak.png", "mcl_core:wood"},
|
||||
{"spruce", S("Spruce Fence"), S("Spruce Fence Gate"), "mcl_fences_fence_spruce.png", "mcl_fences_fence_gate_spruce.png", "mcl_core:sprucewood"},
|
||||
{"birch", S("Birch Fence"), S("Birch Fence Gate"), "mcl_fences_fence_birch.png", "mcl_fences_fence_gate_birch.png", "mcl_core:birchwood"},
|
||||
{"jungle", S("Jungle Fence"), S("Jungle Fence Gate"), "mcl_fences_fence_jungle.png", "mcl_fences_fence_gate_jungle.png", "mcl_core:junglewood"},
|
||||
{"dark_oak", S("Dark Oak Fence"), S("Dark Oak Fence Gate"), "mcl_fences_fence_big_oak.png", "mcl_fences_fence_gate_big_oak.png", "mcl_core:darkwood"},
|
||||
{"acacia", S("Acacia Fence"), S("Acacia Fence Gate"), "mcl_fences_fence_acacia.png", "mcl_fences_fence_gate_acacia.png", "mcl_core:acaciawood"},
|
||||
}
|
||||
|
||||
for w=1, #woods do
|
||||
local wood = woods[w]
|
||||
local id, id_gate
|
||||
if wood[1] == "" then
|
||||
id = "fence"
|
||||
id_gate = "fence_gate"
|
||||
else
|
||||
id = wood[1].."_fence"
|
||||
id_gate = wood[1].."_fence_gate"
|
||||
end
|
||||
mcl_fences.register_fence_and_fence_gate(id, wood[2], wood[3], wood[4], wood_groups, 2, 15, wood_connect, wood_sounds)
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_fences:"..id.." 3",
|
||||
recipe = {
|
||||
{wood[6], "mcl_core:stick", wood[6]},
|
||||
{wood[6], "mcl_core:stick", wood[6]},
|
||||
}
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "mcl_fences:"..id_gate,
|
||||
recipe = {
|
||||
{"mcl_core:stick", wood[6], "mcl_core:stick"},
|
||||
{"mcl_core:stick", wood[6], "mcl_core:stick"},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
-- Nether Brick Fence (without fence gate!)
|
||||
mcl_fences.register_fence("nether_brick_fence", S("Nether Brick Fence"), "mcl_fences_fence_nether_brick.png", {pickaxey=1, deco_block=1, fence_nether_brick=1}, 2, 30, {"group:fence_nether_brick"}, mcl_sounds.node_sound_stone_defaults())
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_fences:nether_brick_fence 6",
|
||||
recipe = {
|
||||
{"mcl_nether:nether_brick", "mcl_nether:netherbrick", "mcl_nether:nether_brick"},
|
||||
{"mcl_nether:nether_brick", "mcl_nether:netherbrick", "mcl_nether:nether_brick"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "group:fence_wood",
|
||||
burntime = 15,
|
||||
})
|
||||
|
@ -1,6 +1,6 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
-- Loom Code. Used to craft banner designs easier. Still needs a GUI. https://minecraft.fandom.com/wiki/Loom
|
||||
|
||||
|
||||
minetest.register_node("mcl_loom:loom", {
|
||||
description = S("Loom"),
|
||||
_tt_help = S("Used to create banner designs"),
|
||||
@ -13,7 +13,7 @@ minetest.register_node("mcl_loom:loom", {
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy=1, deco_block=1, material_wood=1, flammable=1}
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_loom:loom",
|
||||
|
@ -1,447 +1,447 @@
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:rotten_flesh", {
|
||||
description = S("Rotten Flesh"),
|
||||
_tt_help = minetest.colorize(mcl_colors.YELLOW, S("80% chance of food poisoning")),
|
||||
_doc_items_longdesc = S("Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while."),
|
||||
inventory_image = "mcl_mobitems_rotten_flesh.png",
|
||||
wield_image = "mcl_mobitems_rotten_flesh.png",
|
||||
on_place = minetest.item_eat(4),
|
||||
on_secondary_use = minetest.item_eat(4),
|
||||
groups = { food = 2, eatable = 4 },
|
||||
_mcl_saturation = 0.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:mutton", {
|
||||
description = S("Raw Mutton"),
|
||||
_doc_items_longdesc = S("Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value."),
|
||||
inventory_image = "mcl_mobitems_mutton_raw.png",
|
||||
wield_image = "mcl_mobitems_mutton_raw.png",
|
||||
on_place = minetest.item_eat(2),
|
||||
on_secondary_use = minetest.item_eat(2),
|
||||
groups = { food = 2, eatable = 2, smoker_cookable = 1 },
|
||||
_mcl_saturation = 1.2,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:cooked_mutton", {
|
||||
description = S("Cooked Mutton"),
|
||||
_doc_items_longdesc = S("Cooked mutton is the cooked flesh from a sheep and is used as food."),
|
||||
inventory_image = "mcl_mobitems_mutton_cooked.png",
|
||||
wield_image = "mcl_mobitems_mutton_cooked.png",
|
||||
on_place = minetest.item_eat(6),
|
||||
on_secondary_use = minetest.item_eat(6),
|
||||
groups = { food = 2, eatable = 6 },
|
||||
_mcl_saturation = 9.6,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:beef", {
|
||||
description = S("Raw Beef"),
|
||||
_doc_items_longdesc = S("Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value."),
|
||||
inventory_image = "mcl_mobitems_beef_raw.png",
|
||||
wield_image = "mcl_mobitems_beef_raw.png",
|
||||
on_place = minetest.item_eat(3),
|
||||
on_secondary_use = minetest.item_eat(3),
|
||||
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
|
||||
_mcl_saturation = 1.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:cooked_beef", {
|
||||
description = S("Steak"),
|
||||
_doc_items_longdesc = S("Steak is cooked beef from cows and can be eaten."),
|
||||
inventory_image = "mcl_mobitems_beef_cooked.png",
|
||||
wield_image = "mcl_mobitems_beef_cooked.png",
|
||||
on_place = minetest.item_eat(8),
|
||||
on_secondary_use = minetest.item_eat(8),
|
||||
groups = { food = 2, eatable = 8 },
|
||||
_mcl_saturation = 12.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:chicken", {
|
||||
description = S("Raw Chicken"),
|
||||
_tt_help = minetest.colorize(mcl_colors.YELLOW, S("30% chance of food poisoning")),
|
||||
_doc_items_longdesc = S("Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value."),
|
||||
inventory_image = "mcl_mobitems_chicken_raw.png",
|
||||
wield_image = "mcl_mobitems_chicken_raw.png",
|
||||
on_place = minetest.item_eat(2),
|
||||
on_secondary_use = minetest.item_eat(2),
|
||||
groups = { food = 2, eatable = 2, smoker_cookable = 1 },
|
||||
_mcl_saturation = 1.2,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:cooked_chicken", {
|
||||
description = S("Cooked Chicken"),
|
||||
_doc_items_longdesc = S("A cooked chicken is a healthy food item which can be eaten."),
|
||||
inventory_image = "mcl_mobitems_chicken_cooked.png",
|
||||
wield_image = "mcl_mobitems_chicken_cooked.png",
|
||||
on_place = minetest.item_eat(6),
|
||||
on_secondary_use = minetest.item_eat(6),
|
||||
groups = { food = 2, eatable = 6 },
|
||||
_mcl_saturation = 7.2,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:porkchop", {
|
||||
description = S("Raw Porkchop"),
|
||||
_doc_items_longdesc = S("A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value."),
|
||||
inventory_image = "mcl_mobitems_porkchop_raw.png",
|
||||
wield_image = "mcl_mobitems_porkchop_raw.png",
|
||||
on_place = minetest.item_eat(3),
|
||||
on_secondary_use = minetest.item_eat(3),
|
||||
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
|
||||
_mcl_saturation = 1.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:cooked_porkchop", {
|
||||
description = S("Cooked Porkchop"),
|
||||
_doc_items_longdesc = S("Cooked porkchop is the cooked flesh of a pig and is used as food."),
|
||||
inventory_image = "mcl_mobitems_porkchop_cooked.png",
|
||||
wield_image = "mcl_mobitems_porkchop_cooked.png",
|
||||
on_place = minetest.item_eat(8),
|
||||
on_secondary_use = minetest.item_eat(8),
|
||||
groups = { food = 2, eatable = 8 },
|
||||
_mcl_saturation = 12.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:rabbit", {
|
||||
description = S("Raw Rabbit"),
|
||||
_doc_items_longdesc = S("Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value."),
|
||||
inventory_image = "mcl_mobitems_rabbit_raw.png",
|
||||
wield_image = "mcl_mobitems_rabbit_raw.png",
|
||||
on_place = minetest.item_eat(3),
|
||||
on_secondary_use = minetest.item_eat(3),
|
||||
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
|
||||
_mcl_saturation = 1.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:cooked_rabbit", {
|
||||
description = S("Cooked Rabbit"),
|
||||
_doc_items_longdesc = S("This is a food item which can be eaten."),
|
||||
inventory_image = "mcl_mobitems_rabbit_cooked.png",
|
||||
wield_image = "mcl_mobitems_rabbit_cooked.png",
|
||||
on_place = minetest.item_eat(5),
|
||||
on_secondary_use = minetest.item_eat(5),
|
||||
groups = { food = 2, eatable = 5 },
|
||||
_mcl_saturation = 6.0,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
-- Reset food poisoning and status effects
|
||||
local function drink_milk(itemstack, player, pointed_thing)
|
||||
local bucket = minetest.do_item_eat(0, "mcl_buckets:bucket_empty", itemstack, player, pointed_thing)
|
||||
-- Check if we were allowed to drink this (eat delay check)
|
||||
if mcl_hunger.active and (bucket:get_name() ~= "mcl_mobitems:milk_bucket" or minetest.is_creative_enabled(player:get_player_name())) then
|
||||
mcl_hunger.stop_poison(player)
|
||||
end
|
||||
mcl_potions._reset_player_effects(player)
|
||||
return bucket
|
||||
end
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:milk_bucket", {
|
||||
description = S("Milk"),
|
||||
_tt_help = minetest.colorize(mcl_colors.GREEN, S("Removes all status effects")),
|
||||
_doc_items_longdesc = S("Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points."),
|
||||
_doc_items_usagehelp = S("Use the placement key to drink the milk."),
|
||||
inventory_image = "mcl_mobitems_bucket_milk.png",
|
||||
wield_image = "mcl_mobitems_bucket_milk.png",
|
||||
on_place = drink_milk,
|
||||
on_secondary_use = drink_milk,
|
||||
stack_max = 1,
|
||||
groups = { food = 3, can_eat_when_full = 1 },
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:spider_eye", {
|
||||
description = S("Spider Eye"),
|
||||
_tt_help = minetest.colorize(mcl_colors.YELLOW, S("Poisonous")),
|
||||
_doc_items_longdesc = S("Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly."),
|
||||
inventory_image = "mcl_mobitems_spider_eye.png",
|
||||
wield_image = "mcl_mobitems_spider_eye.png",
|
||||
on_place = minetest.item_eat(2),
|
||||
on_secondary_use = minetest.item_eat(2),
|
||||
groups = { food = 2, eatable = 2, brewitem = 1 },
|
||||
_mcl_saturation = 3.2,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:bone", {
|
||||
description = S("Bone"),
|
||||
_doc_items_longdesc = S("Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient."),
|
||||
_doc_items_usagehelp = S("Wield the bone near wolves to attract them. Use the “Place” key on the wolf to give it a bone and tame it. You can then give commands to the tamed wolf by using the “Place” key on it."),
|
||||
inventory_image = "mcl_mobitems_bone.png",
|
||||
stack_max = 64,
|
||||
groups = { craftitem=1 },
|
||||
_mcl_toollike_wield = true,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:string",{
|
||||
description = S("String"),
|
||||
_doc_items_longdesc = S("Strings are used in crafting."),
|
||||
inventory_image = "mcl_mobitems_string.png",
|
||||
stack_max = 64,
|
||||
groups = { craftitem = 1 },
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:blaze_rod", {
|
||||
description = S("Blaze Rod"),
|
||||
_doc_items_longdesc = S("This is a crafting component dropped from dead blazes."),
|
||||
wield_image = "mcl_mobitems_blaze_rod.png",
|
||||
inventory_image = "mcl_mobitems_blaze_rod.png",
|
||||
groups = { craftitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:blaze_powder", {
|
||||
description = S("Blaze Powder"),
|
||||
_doc_items_longdesc = S("This item is mainly used for crafting."),
|
||||
wield_image = "mcl_mobitems_blaze_powder.png",
|
||||
inventory_image = "mcl_mobitems_blaze_powder.png",
|
||||
groups = { craftitem = 1, brewitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:magma_cream", {
|
||||
description = S("Magma Cream"),
|
||||
_doc_items_longdesc = S("Magma cream is a crafting component."),
|
||||
wield_image = "mcl_mobitems_magma_cream.png",
|
||||
inventory_image = "mcl_mobitems_magma_cream.png",
|
||||
groups = { craftitem = 1, brewitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:ghast_tear", {
|
||||
description = S("Ghast Tear"),
|
||||
_doc_items_longdesc = S("Place this item in an item frame as decoration."),
|
||||
wield_image = "mcl_mobitems_ghast_tear.png",
|
||||
inventory_image = "mcl_mobitems_ghast_tear.png",
|
||||
groups = { brewitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:nether_star", {
|
||||
description = S("Nether Star"),
|
||||
_doc_items_longdesc = S("A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration."),
|
||||
wield_image = "mcl_mobitems_nether_star.png",
|
||||
inventory_image = "mcl_mobitems_nether_star.png",
|
||||
-- TODO: Reveal item when it's useful
|
||||
groups = { craftitem = 1, not_in_creative_inventory = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:leather", {
|
||||
description = S("Leather"),
|
||||
_doc_items_longdesc = S("Leather is a versatile crafting component."),
|
||||
wield_image = "mcl_mobitems_leather.png",
|
||||
inventory_image = "mcl_mobitems_leather.png",
|
||||
groups = { craftitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:feather", {
|
||||
description = S("Feather"),
|
||||
_doc_items_longdesc = S("Feathers are used in crafting and are dropped from chickens."),
|
||||
wield_image = "mcl_mobitems_feather.png",
|
||||
inventory_image = "mcl_mobitems_feather.png",
|
||||
groups = { craftitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:rabbit_hide", {
|
||||
description = S("Rabbit Hide"),
|
||||
_doc_items_longdesc = S("Rabbit hide is used to create leather."),
|
||||
wield_image = "mcl_mobitems_rabbit_hide.png",
|
||||
inventory_image = "mcl_mobitems_rabbit_hide.png",
|
||||
groups = { craftitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:rabbit_foot", {
|
||||
description = S("Rabbit's Foot"),
|
||||
_doc_items_longdesc = S("Must be your lucky day! Place this item in an item frame for decoration."),
|
||||
wield_image = "mcl_mobitems_rabbit_foot.png",
|
||||
inventory_image = "mcl_mobitems_rabbit_foot.png",
|
||||
groups = { brewitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:saddle", {
|
||||
description = S("Saddle"),
|
||||
_tt_help = S("Can be placed on animals to ride them"),
|
||||
_doc_items_longdesc = S("Saddles can be put on some animals in order to mount them."),
|
||||
_doc_items_usagehelp = S("Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again."),
|
||||
wield_image = "mcl_mobitems_saddle.png",
|
||||
inventory_image = "mcl_mobitems_saddle.png",
|
||||
groups = { transport = 1 },
|
||||
stack_max = 1,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:rabbit_stew", {
|
||||
description = S("Rabbit Stew"),
|
||||
_doc_items_longdesc = S("Rabbit stew is a very nutricious food item."),
|
||||
wield_image = "mcl_mobitems_rabbit_stew.png",
|
||||
inventory_image = "mcl_mobitems_rabbit_stew.png",
|
||||
stack_max = 1,
|
||||
on_place = minetest.item_eat(10, "mcl_core:bowl"),
|
||||
on_secondary_use = minetest.item_eat(10, "mcl_core:bowl"),
|
||||
groups = { food = 3, eatable = 10 },
|
||||
_mcl_saturation = 12.0,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:shulker_shell", {
|
||||
description = S("Shulker Shell"),
|
||||
_doc_items_longdesc = S("Shulker shells are used in crafting. They are dropped from dead shulkers."),
|
||||
inventory_image = "mcl_mobitems_shulker_shell.png",
|
||||
groups = { craftitem = 1 },
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:slimeball", {
|
||||
description = S("Slimeball"),
|
||||
_doc_items_longdesc = S("Slimeballs are used in crafting. They are dropped from slimes."),
|
||||
inventory_image = "mcl_mobitems_slimeball.png",
|
||||
groups = { craftitem = 1 },
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:gunpowder", {
|
||||
description = S("Gunpowder"),
|
||||
_doc_items_longdesc = doc.sub.items.temp.craftitem,
|
||||
inventory_image = "default_gunpowder.png",
|
||||
stack_max = 64,
|
||||
groups = { craftitem=1, brewitem = 1 },
|
||||
})
|
||||
|
||||
minetest.register_tool("mcl_mobitems:carrot_on_a_stick", {
|
||||
description = S("Carrot on a Stick"),
|
||||
_tt_help = S("Lets you ride a saddled pig"),
|
||||
_doc_items_longdesc = S("A carrot on a stick can be used on saddled pigs to ride them."),
|
||||
_doc_items_usagehelp = S("Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick."),
|
||||
wield_image = "mcl_mobitems_carrot_on_a_stick.png",
|
||||
inventory_image = "mcl_mobitems_carrot_on_a_stick.png",
|
||||
groups = { transport = 1 },
|
||||
_mcl_toollike_wield = true,
|
||||
})
|
||||
|
||||
-----------
|
||||
-- Crafting
|
||||
-----------
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:leather",
|
||||
recipe = {
|
||||
{ "mcl_mobitems:rabbit_hide", "mcl_mobitems:rabbit_hide" },
|
||||
{ "mcl_mobitems:rabbit_hide", "mcl_mobitems:rabbit_hide" },
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:blaze_powder 2",
|
||||
recipe = {{"mcl_mobitems:blaze_rod"}},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:rabbit_stew",
|
||||
recipe = {
|
||||
{ "", "mcl_mobitems:cooked_rabbit", "", },
|
||||
{ "group:mushroom", "mcl_farming:potato_item_baked", "mcl_farming:carrot_item", },
|
||||
{ "", "mcl_core:bowl", "", },
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:rabbit_stew",
|
||||
recipe = {
|
||||
{ "", "mcl_mobitems:cooked_rabbit", "", },
|
||||
{ "mcl_farming:carrot_item", "mcl_farming:potato_item_baked", "group:mushroom", },
|
||||
{ "", "mcl_core:bowl", "", },
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:carrot_on_a_stick",
|
||||
recipe = {
|
||||
{ "mcl_fishing:fishing_rod", "", },
|
||||
{ "", "mcl_farming:carrot_item" },
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:carrot_on_a_stick",
|
||||
recipe = {
|
||||
{ "", "mcl_fishing:fishing_rod", },
|
||||
{ "mcl_farming:carrot_item", "" },
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "mcl_mobitems:magma_cream",
|
||||
recipe = {"mcl_mobitems:blaze_powder", "mcl_mobitems:slimeball"},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_mobitems:cooked_mutton",
|
||||
recipe = "mcl_mobitems:mutton",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_mobitems:cooked_rabbit",
|
||||
recipe = "mcl_mobitems:rabbit",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_mobitems:cooked_chicken",
|
||||
recipe = "mcl_mobitems:chicken",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_mobitems:cooked_beef",
|
||||
recipe = "mcl_mobitems:beef",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_mobitems:cooked_porkchop",
|
||||
recipe = "mcl_mobitems:porkchop",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mcl_mobitems:blaze_rod",
|
||||
burntime = 120,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:slimeball 9",
|
||||
recipe = {{"mcl_core:slimeblock"}},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_core:slimeblock",
|
||||
recipe = {{"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",},
|
||||
{"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",},
|
||||
{"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",}},
|
||||
})
|
||||
|
||||
minetest.register_on_item_eat(function (hp_change, replace_with_item, itemstack, user, pointed_thing)
|
||||
|
||||
-- poisoning with spider eye
|
||||
if itemstack:get_name() == "mcl_mobitems:spider_eye" then
|
||||
mcl_potions.poison_func(user, 1, 4)
|
||||
end
|
||||
|
||||
end )
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:rotten_flesh", {
|
||||
description = S("Rotten Flesh"),
|
||||
_tt_help = minetest.colorize(mcl_colors.YELLOW, S("80% chance of food poisoning")),
|
||||
_doc_items_longdesc = S("Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while."),
|
||||
inventory_image = "mcl_mobitems_rotten_flesh.png",
|
||||
wield_image = "mcl_mobitems_rotten_flesh.png",
|
||||
on_place = minetest.item_eat(4),
|
||||
on_secondary_use = minetest.item_eat(4),
|
||||
groups = { food = 2, eatable = 4 },
|
||||
_mcl_saturation = 0.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:mutton", {
|
||||
description = S("Raw Mutton"),
|
||||
_doc_items_longdesc = S("Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value."),
|
||||
inventory_image = "mcl_mobitems_mutton_raw.png",
|
||||
wield_image = "mcl_mobitems_mutton_raw.png",
|
||||
on_place = minetest.item_eat(2),
|
||||
on_secondary_use = minetest.item_eat(2),
|
||||
groups = { food = 2, eatable = 2, smoker_cookable = 1 },
|
||||
_mcl_saturation = 1.2,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:cooked_mutton", {
|
||||
description = S("Cooked Mutton"),
|
||||
_doc_items_longdesc = S("Cooked mutton is the cooked flesh from a sheep and is used as food."),
|
||||
inventory_image = "mcl_mobitems_mutton_cooked.png",
|
||||
wield_image = "mcl_mobitems_mutton_cooked.png",
|
||||
on_place = minetest.item_eat(6),
|
||||
on_secondary_use = minetest.item_eat(6),
|
||||
groups = { food = 2, eatable = 6 },
|
||||
_mcl_saturation = 9.6,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:beef", {
|
||||
description = S("Raw Beef"),
|
||||
_doc_items_longdesc = S("Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value."),
|
||||
inventory_image = "mcl_mobitems_beef_raw.png",
|
||||
wield_image = "mcl_mobitems_beef_raw.png",
|
||||
on_place = minetest.item_eat(3),
|
||||
on_secondary_use = minetest.item_eat(3),
|
||||
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
|
||||
_mcl_saturation = 1.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:cooked_beef", {
|
||||
description = S("Steak"),
|
||||
_doc_items_longdesc = S("Steak is cooked beef from cows and can be eaten."),
|
||||
inventory_image = "mcl_mobitems_beef_cooked.png",
|
||||
wield_image = "mcl_mobitems_beef_cooked.png",
|
||||
on_place = minetest.item_eat(8),
|
||||
on_secondary_use = minetest.item_eat(8),
|
||||
groups = { food = 2, eatable = 8 },
|
||||
_mcl_saturation = 12.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:chicken", {
|
||||
description = S("Raw Chicken"),
|
||||
_tt_help = minetest.colorize(mcl_colors.YELLOW, S("30% chance of food poisoning")),
|
||||
_doc_items_longdesc = S("Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value."),
|
||||
inventory_image = "mcl_mobitems_chicken_raw.png",
|
||||
wield_image = "mcl_mobitems_chicken_raw.png",
|
||||
on_place = minetest.item_eat(2),
|
||||
on_secondary_use = minetest.item_eat(2),
|
||||
groups = { food = 2, eatable = 2, smoker_cookable = 1 },
|
||||
_mcl_saturation = 1.2,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:cooked_chicken", {
|
||||
description = S("Cooked Chicken"),
|
||||
_doc_items_longdesc = S("A cooked chicken is a healthy food item which can be eaten."),
|
||||
inventory_image = "mcl_mobitems_chicken_cooked.png",
|
||||
wield_image = "mcl_mobitems_chicken_cooked.png",
|
||||
on_place = minetest.item_eat(6),
|
||||
on_secondary_use = minetest.item_eat(6),
|
||||
groups = { food = 2, eatable = 6 },
|
||||
_mcl_saturation = 7.2,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:porkchop", {
|
||||
description = S("Raw Porkchop"),
|
||||
_doc_items_longdesc = S("A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value."),
|
||||
inventory_image = "mcl_mobitems_porkchop_raw.png",
|
||||
wield_image = "mcl_mobitems_porkchop_raw.png",
|
||||
on_place = minetest.item_eat(3),
|
||||
on_secondary_use = minetest.item_eat(3),
|
||||
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
|
||||
_mcl_saturation = 1.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:cooked_porkchop", {
|
||||
description = S("Cooked Porkchop"),
|
||||
_doc_items_longdesc = S("Cooked porkchop is the cooked flesh of a pig and is used as food."),
|
||||
inventory_image = "mcl_mobitems_porkchop_cooked.png",
|
||||
wield_image = "mcl_mobitems_porkchop_cooked.png",
|
||||
on_place = minetest.item_eat(8),
|
||||
on_secondary_use = minetest.item_eat(8),
|
||||
groups = { food = 2, eatable = 8 },
|
||||
_mcl_saturation = 12.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:rabbit", {
|
||||
description = S("Raw Rabbit"),
|
||||
_doc_items_longdesc = S("Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value."),
|
||||
inventory_image = "mcl_mobitems_rabbit_raw.png",
|
||||
wield_image = "mcl_mobitems_rabbit_raw.png",
|
||||
on_place = minetest.item_eat(3),
|
||||
on_secondary_use = minetest.item_eat(3),
|
||||
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
|
||||
_mcl_saturation = 1.8,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:cooked_rabbit", {
|
||||
description = S("Cooked Rabbit"),
|
||||
_doc_items_longdesc = S("This is a food item which can be eaten."),
|
||||
inventory_image = "mcl_mobitems_rabbit_cooked.png",
|
||||
wield_image = "mcl_mobitems_rabbit_cooked.png",
|
||||
on_place = minetest.item_eat(5),
|
||||
on_secondary_use = minetest.item_eat(5),
|
||||
groups = { food = 2, eatable = 5 },
|
||||
_mcl_saturation = 6.0,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
-- Reset food poisoning and status effects
|
||||
local function drink_milk(itemstack, player, pointed_thing)
|
||||
local bucket = minetest.do_item_eat(0, "mcl_buckets:bucket_empty", itemstack, player, pointed_thing)
|
||||
-- Check if we were allowed to drink this (eat delay check)
|
||||
if mcl_hunger.active and (bucket:get_name() ~= "mcl_mobitems:milk_bucket" or minetest.is_creative_enabled(player:get_player_name())) then
|
||||
mcl_hunger.stop_poison(player)
|
||||
end
|
||||
mcl_potions._reset_player_effects(player)
|
||||
return bucket
|
||||
end
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:milk_bucket", {
|
||||
description = S("Milk"),
|
||||
_tt_help = minetest.colorize(mcl_colors.GREEN, S("Removes all status effects")),
|
||||
_doc_items_longdesc = S("Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points."),
|
||||
_doc_items_usagehelp = S("Use the placement key to drink the milk."),
|
||||
inventory_image = "mcl_mobitems_bucket_milk.png",
|
||||
wield_image = "mcl_mobitems_bucket_milk.png",
|
||||
on_place = drink_milk,
|
||||
on_secondary_use = drink_milk,
|
||||
stack_max = 1,
|
||||
groups = { food = 3, can_eat_when_full = 1 },
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:spider_eye", {
|
||||
description = S("Spider Eye"),
|
||||
_tt_help = minetest.colorize(mcl_colors.YELLOW, S("Poisonous")),
|
||||
_doc_items_longdesc = S("Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly."),
|
||||
inventory_image = "mcl_mobitems_spider_eye.png",
|
||||
wield_image = "mcl_mobitems_spider_eye.png",
|
||||
on_place = minetest.item_eat(2),
|
||||
on_secondary_use = minetest.item_eat(2),
|
||||
groups = { food = 2, eatable = 2, brewitem = 1 },
|
||||
_mcl_saturation = 3.2,
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:bone", {
|
||||
description = S("Bone"),
|
||||
_doc_items_longdesc = S("Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient."),
|
||||
_doc_items_usagehelp = S("Wield the bone near wolves to attract them. Use the “Place” key on the wolf to give it a bone and tame it. You can then give commands to the tamed wolf by using the “Place” key on it."),
|
||||
inventory_image = "mcl_mobitems_bone.png",
|
||||
stack_max = 64,
|
||||
groups = { craftitem=1 },
|
||||
_mcl_toollike_wield = true,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:string",{
|
||||
description = S("String"),
|
||||
_doc_items_longdesc = S("Strings are used in crafting."),
|
||||
inventory_image = "mcl_mobitems_string.png",
|
||||
stack_max = 64,
|
||||
groups = { craftitem = 1 },
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:blaze_rod", {
|
||||
description = S("Blaze Rod"),
|
||||
_doc_items_longdesc = S("This is a crafting component dropped from dead blazes."),
|
||||
wield_image = "mcl_mobitems_blaze_rod.png",
|
||||
inventory_image = "mcl_mobitems_blaze_rod.png",
|
||||
groups = { craftitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:blaze_powder", {
|
||||
description = S("Blaze Powder"),
|
||||
_doc_items_longdesc = S("This item is mainly used for crafting."),
|
||||
wield_image = "mcl_mobitems_blaze_powder.png",
|
||||
inventory_image = "mcl_mobitems_blaze_powder.png",
|
||||
groups = { craftitem = 1, brewitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:magma_cream", {
|
||||
description = S("Magma Cream"),
|
||||
_doc_items_longdesc = S("Magma cream is a crafting component."),
|
||||
wield_image = "mcl_mobitems_magma_cream.png",
|
||||
inventory_image = "mcl_mobitems_magma_cream.png",
|
||||
groups = { craftitem = 1, brewitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:ghast_tear", {
|
||||
description = S("Ghast Tear"),
|
||||
_doc_items_longdesc = S("Place this item in an item frame as decoration."),
|
||||
wield_image = "mcl_mobitems_ghast_tear.png",
|
||||
inventory_image = "mcl_mobitems_ghast_tear.png",
|
||||
groups = { brewitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:nether_star", {
|
||||
description = S("Nether Star"),
|
||||
_doc_items_longdesc = S("A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration."),
|
||||
wield_image = "mcl_mobitems_nether_star.png",
|
||||
inventory_image = "mcl_mobitems_nether_star.png",
|
||||
-- TODO: Reveal item when it's useful
|
||||
groups = { craftitem = 1, not_in_creative_inventory = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:leather", {
|
||||
description = S("Leather"),
|
||||
_doc_items_longdesc = S("Leather is a versatile crafting component."),
|
||||
wield_image = "mcl_mobitems_leather.png",
|
||||
inventory_image = "mcl_mobitems_leather.png",
|
||||
groups = { craftitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:feather", {
|
||||
description = S("Feather"),
|
||||
_doc_items_longdesc = S("Feathers are used in crafting and are dropped from chickens."),
|
||||
wield_image = "mcl_mobitems_feather.png",
|
||||
inventory_image = "mcl_mobitems_feather.png",
|
||||
groups = { craftitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:rabbit_hide", {
|
||||
description = S("Rabbit Hide"),
|
||||
_doc_items_longdesc = S("Rabbit hide is used to create leather."),
|
||||
wield_image = "mcl_mobitems_rabbit_hide.png",
|
||||
inventory_image = "mcl_mobitems_rabbit_hide.png",
|
||||
groups = { craftitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:rabbit_foot", {
|
||||
description = S("Rabbit's Foot"),
|
||||
_doc_items_longdesc = S("Must be your lucky day! Place this item in an item frame for decoration."),
|
||||
wield_image = "mcl_mobitems_rabbit_foot.png",
|
||||
inventory_image = "mcl_mobitems_rabbit_foot.png",
|
||||
groups = { brewitem = 1 },
|
||||
stack_max = 64,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:saddle", {
|
||||
description = S("Saddle"),
|
||||
_tt_help = S("Can be placed on animals to ride them"),
|
||||
_doc_items_longdesc = S("Saddles can be put on some animals in order to mount them."),
|
||||
_doc_items_usagehelp = S("Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again."),
|
||||
wield_image = "mcl_mobitems_saddle.png",
|
||||
inventory_image = "mcl_mobitems_saddle.png",
|
||||
groups = { transport = 1 },
|
||||
stack_max = 1,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:rabbit_stew", {
|
||||
description = S("Rabbit Stew"),
|
||||
_doc_items_longdesc = S("Rabbit stew is a very nutricious food item."),
|
||||
wield_image = "mcl_mobitems_rabbit_stew.png",
|
||||
inventory_image = "mcl_mobitems_rabbit_stew.png",
|
||||
stack_max = 1,
|
||||
on_place = minetest.item_eat(10, "mcl_core:bowl"),
|
||||
on_secondary_use = minetest.item_eat(10, "mcl_core:bowl"),
|
||||
groups = { food = 3, eatable = 10 },
|
||||
_mcl_saturation = 12.0,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:shulker_shell", {
|
||||
description = S("Shulker Shell"),
|
||||
_doc_items_longdesc = S("Shulker shells are used in crafting. They are dropped from dead shulkers."),
|
||||
inventory_image = "mcl_mobitems_shulker_shell.png",
|
||||
groups = { craftitem = 1 },
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:slimeball", {
|
||||
description = S("Slimeball"),
|
||||
_doc_items_longdesc = S("Slimeballs are used in crafting. They are dropped from slimes."),
|
||||
inventory_image = "mcl_mobitems_slimeball.png",
|
||||
groups = { craftitem = 1 },
|
||||
})
|
||||
|
||||
minetest.register_craftitem("mcl_mobitems:gunpowder", {
|
||||
description = S("Gunpowder"),
|
||||
_doc_items_longdesc = doc.sub.items.temp.craftitem,
|
||||
inventory_image = "default_gunpowder.png",
|
||||
stack_max = 64,
|
||||
groups = { craftitem=1, brewitem = 1 },
|
||||
})
|
||||
|
||||
minetest.register_tool("mcl_mobitems:carrot_on_a_stick", {
|
||||
description = S("Carrot on a Stick"),
|
||||
_tt_help = S("Lets you ride a saddled pig"),
|
||||
_doc_items_longdesc = S("A carrot on a stick can be used on saddled pigs to ride them."),
|
||||
_doc_items_usagehelp = S("Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick."),
|
||||
wield_image = "mcl_mobitems_carrot_on_a_stick.png",
|
||||
inventory_image = "mcl_mobitems_carrot_on_a_stick.png",
|
||||
groups = { transport = 1 },
|
||||
_mcl_toollike_wield = true,
|
||||
})
|
||||
|
||||
-----------
|
||||
-- Crafting
|
||||
-----------
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:leather",
|
||||
recipe = {
|
||||
{ "mcl_mobitems:rabbit_hide", "mcl_mobitems:rabbit_hide" },
|
||||
{ "mcl_mobitems:rabbit_hide", "mcl_mobitems:rabbit_hide" },
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:blaze_powder 2",
|
||||
recipe = {{"mcl_mobitems:blaze_rod"}},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:rabbit_stew",
|
||||
recipe = {
|
||||
{ "", "mcl_mobitems:cooked_rabbit", "", },
|
||||
{ "group:mushroom", "mcl_farming:potato_item_baked", "mcl_farming:carrot_item", },
|
||||
{ "", "mcl_core:bowl", "", },
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:rabbit_stew",
|
||||
recipe = {
|
||||
{ "", "mcl_mobitems:cooked_rabbit", "", },
|
||||
{ "mcl_farming:carrot_item", "mcl_farming:potato_item_baked", "group:mushroom", },
|
||||
{ "", "mcl_core:bowl", "", },
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:carrot_on_a_stick",
|
||||
recipe = {
|
||||
{ "mcl_fishing:fishing_rod", "", },
|
||||
{ "", "mcl_farming:carrot_item" },
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:carrot_on_a_stick",
|
||||
recipe = {
|
||||
{ "", "mcl_fishing:fishing_rod", },
|
||||
{ "mcl_farming:carrot_item", "" },
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = "mcl_mobitems:magma_cream",
|
||||
recipe = {"mcl_mobitems:blaze_powder", "mcl_mobitems:slimeball"},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_mobitems:cooked_mutton",
|
||||
recipe = "mcl_mobitems:mutton",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_mobitems:cooked_rabbit",
|
||||
recipe = "mcl_mobitems:rabbit",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_mobitems:cooked_chicken",
|
||||
recipe = "mcl_mobitems:chicken",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_mobitems:cooked_beef",
|
||||
recipe = "mcl_mobitems:beef",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "mcl_mobitems:cooked_porkchop",
|
||||
recipe = "mcl_mobitems:porkchop",
|
||||
cooktime = 10,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mcl_mobitems:blaze_rod",
|
||||
burntime = 120,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_mobitems:slimeball 9",
|
||||
recipe = {{"mcl_core:slimeblock"}},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_core:slimeblock",
|
||||
recipe = {{"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",},
|
||||
{"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",},
|
||||
{"mcl_mobitems:slimeball","mcl_mobitems:slimeball","mcl_mobitems:slimeball",}},
|
||||
})
|
||||
|
||||
minetest.register_on_item_eat(function (hp_change, replace_with_item, itemstack, user, pointed_thing)
|
||||
|
||||
-- poisoning with spider eye
|
||||
if itemstack:get_name() == "mcl_mobitems:spider_eye" then
|
||||
mcl_potions.poison_func(user, 1, 4)
|
||||
end
|
||||
|
||||
end )
|
||||
|
@ -90,7 +90,7 @@ minetest.register_entity("mcl_shields:shield_entity", {
|
||||
local color = minetest.registered_items[item]._shield_color
|
||||
if color then
|
||||
shield_texture = "mcl_shield_base_nopattern.png^(mcl_shield_pattern_base.png^[colorize:" .. color .. ")"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -128,7 +128,7 @@ mcl_damage.register_modifier(function(obj, damage, reason)
|
||||
local type = reason.type
|
||||
local damager = reason.direct
|
||||
local blocking, shieldstack = mcl_shields.is_blocking(obj)
|
||||
|
||||
|
||||
if not (obj:is_player() and blocking and mcl_shields.types[type] and damager) then
|
||||
return
|
||||
end
|
||||
@ -275,7 +275,7 @@ local function handle_blocking(player)
|
||||
player_shield.blocking = 2
|
||||
end
|
||||
elseif shield_in_offhand then
|
||||
local offhand_can_block = (wielded_item(player) == "" or not mcl_util.get_pointed_thing(player, true))
|
||||
local offhand_can_block = (wielded_item(player) == "" or not mcl_util.get_pointed_thing(player, true))
|
||||
and (minetest.get_item_group(wielded_item(player), "bow") ~= 1 and minetest.get_item_group(wielded_item(player), "crossbow") ~= 1)
|
||||
|
||||
if not offhand_can_block then
|
||||
|
@ -46,7 +46,7 @@ mcl_damage.register_modifier(function(obj, damage, reason)
|
||||
|
||||
-- Effects
|
||||
minetest.sound_play({name = "mcl_totems_totem", gain = 1}, {pos=ppos, max_hear_distance = 16}, true)
|
||||
|
||||
|
||||
for i = 1, 4 do
|
||||
for c = 1, #particle_colors do
|
||||
minetest.add_particlespawner({
|
||||
|
@ -2096,7 +2096,7 @@ local function basic(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
|
||||
lvm_used = true
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Set param2 (=color) of sugar cane
|
||||
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:reeds"})
|
||||
for n=1, #nodes do
|
||||
|
@ -234,7 +234,7 @@ end
|
||||
|
||||
function settlements.place_schematics(settlement_info, pr)
|
||||
local building_all_info
|
||||
|
||||
|
||||
--attempt to place one belltower in the center of the village - this doesn't always work out great but it's a lot better than doing it first or last.
|
||||
local belltower = table.remove(settlement_info,math.floor(#settlement_info/2))
|
||||
if belltower then
|
||||
@ -251,10 +251,10 @@ function settlements.place_schematics(settlement_info, pr)
|
||||
pr
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
for i, built_house in ipairs(settlement_info) do
|
||||
local is_last = i == #settlement_info
|
||||
|
||||
|
||||
for j, schem in ipairs(settlements.schematic_table) do
|
||||
if settlement_info[i]["name"] == schem["name"] then
|
||||
building_all_info = schem
|
||||
|
@ -26,7 +26,7 @@ for _, action in pairs({"grant", "revoke"}) do
|
||||
end
|
||||
|
||||
local meta = player:get_meta()
|
||||
|
||||
|
||||
if priv == "fly" then
|
||||
meta:set_int("mcl_privs:fly_changed", 1)
|
||||
end
|
||||
|
@ -1,57 +1,57 @@
|
||||
local random = math.random
|
||||
|
||||
local ipairs = ipairs
|
||||
|
||||
mcl_death_drop = {}
|
||||
|
||||
mcl_death_drop.registered_dropped_lists = {}
|
||||
|
||||
function mcl_death_drop.register_dropped_list(inv, listname, drop)
|
||||
table.insert(mcl_death_drop.registered_dropped_lists, {inv = inv, listname = listname, drop = drop})
|
||||
end
|
||||
|
||||
mcl_death_drop.register_dropped_list("PLAYER", "main", true)
|
||||
mcl_death_drop.register_dropped_list("PLAYER", "craft", true)
|
||||
mcl_death_drop.register_dropped_list("PLAYER", "armor", true)
|
||||
mcl_death_drop.register_dropped_list("PLAYER", "offhand", true)
|
||||
|
||||
minetest.register_on_dieplayer(function(player)
|
||||
local keep = minetest.settings:get_bool("mcl_keepInventory", false)
|
||||
if keep == false then
|
||||
-- Drop inventory, crafting grid and armor
|
||||
local playerinv = player:get_inventory()
|
||||
local pos = player:get_pos()
|
||||
-- No item drop if in deep void
|
||||
local _, void_deadly = mcl_worlds.is_in_void(pos)
|
||||
|
||||
for l=1,#mcl_death_drop.registered_dropped_lists do
|
||||
local inv = mcl_death_drop.registered_dropped_lists[l].inv
|
||||
if inv == "PLAYER" then
|
||||
inv = playerinv
|
||||
elseif type(inv) == "function" then
|
||||
inv = inv(player)
|
||||
end
|
||||
local listname = mcl_death_drop.registered_dropped_lists[l].listname
|
||||
local drop = mcl_death_drop.registered_dropped_lists[l].drop
|
||||
if inv then
|
||||
for i, stack in ipairs(inv:get_list(listname)) do
|
||||
local x = random(0, 9)/3
|
||||
local z = random(0, 9)/3
|
||||
pos.x = pos.x + x
|
||||
pos.z = pos.z + z
|
||||
if not void_deadly and drop and not mcl_enchanting.has_enchantment(stack, "curse_of_vanishing") then
|
||||
local def = minetest.registered_items[stack:get_name()]
|
||||
if def and def.on_drop then
|
||||
stack = def.on_drop(stack, player, pos)
|
||||
end
|
||||
minetest.add_item(pos, stack)
|
||||
end
|
||||
pos.x = pos.x - x
|
||||
pos.z = pos.z - z
|
||||
end
|
||||
inv:set_list(listname, {})
|
||||
end
|
||||
end
|
||||
mcl_armor.update(player)
|
||||
end
|
||||
end)
|
||||
local random = math.random
|
||||
|
||||
local ipairs = ipairs
|
||||
|
||||
mcl_death_drop = {}
|
||||
|
||||
mcl_death_drop.registered_dropped_lists = {}
|
||||
|
||||
function mcl_death_drop.register_dropped_list(inv, listname, drop)
|
||||
table.insert(mcl_death_drop.registered_dropped_lists, {inv = inv, listname = listname, drop = drop})
|
||||
end
|
||||
|
||||
mcl_death_drop.register_dropped_list("PLAYER", "main", true)
|
||||
mcl_death_drop.register_dropped_list("PLAYER", "craft", true)
|
||||
mcl_death_drop.register_dropped_list("PLAYER", "armor", true)
|
||||
mcl_death_drop.register_dropped_list("PLAYER", "offhand", true)
|
||||
|
||||
minetest.register_on_dieplayer(function(player)
|
||||
local keep = minetest.settings:get_bool("mcl_keepInventory", false)
|
||||
if keep == false then
|
||||
-- Drop inventory, crafting grid and armor
|
||||
local playerinv = player:get_inventory()
|
||||
local pos = player:get_pos()
|
||||
-- No item drop if in deep void
|
||||
local _, void_deadly = mcl_worlds.is_in_void(pos)
|
||||
|
||||
for l=1,#mcl_death_drop.registered_dropped_lists do
|
||||
local inv = mcl_death_drop.registered_dropped_lists[l].inv
|
||||
if inv == "PLAYER" then
|
||||
inv = playerinv
|
||||
elseif type(inv) == "function" then
|
||||
inv = inv(player)
|
||||
end
|
||||
local listname = mcl_death_drop.registered_dropped_lists[l].listname
|
||||
local drop = mcl_death_drop.registered_dropped_lists[l].drop
|
||||
if inv then
|
||||
for i, stack in ipairs(inv:get_list(listname)) do
|
||||
local x = random(0, 9)/3
|
||||
local z = random(0, 9)/3
|
||||
pos.x = pos.x + x
|
||||
pos.z = pos.z + z
|
||||
if not void_deadly and drop and not mcl_enchanting.has_enchantment(stack, "curse_of_vanishing") then
|
||||
local def = minetest.registered_items[stack:get_name()]
|
||||
if def and def.on_drop then
|
||||
stack = def.on_drop(stack, player, pos)
|
||||
end
|
||||
minetest.add_item(pos, stack)
|
||||
end
|
||||
pos.x = pos.x - x
|
||||
pos.z = pos.z - z
|
||||
end
|
||||
inv:set_list(listname, {})
|
||||
end
|
||||
end
|
||||
mcl_armor.update(player)
|
||||
end
|
||||
end)
|
||||
|
@ -473,10 +473,10 @@ function mcl_spawn.get_player_spawn_pos(player)
|
||||
player:get_meta():set_string("mcl_beds:spawn", "")
|
||||
minetest.chat_send_player(player:get_player_name(), S("Your spawn bed was missing or blocked, and you had no charged respawn anchor!"))
|
||||
return mcl_spawn.get_world_spawn_pos(), false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
-- Find spawning position on/near the bed free of solid or damaging blocks iterating a square spiral 15x15:
|
||||
|
2
tools/strip_trailing_whitespace.sh
Executable file
2
tools/strip_trailing_whitespace.sh
Executable file
@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
sed --in-place 's/[[:space:]]\+$//' $(find -name "*.lua")
|
Loading…
Reference in New Issue
Block a user