Compare commits
31 Commits
patch_skin
...
master
Author | SHA1 | Date |
---|---|---|
nixnoxus | 760fe1aa68 | |
Eliy21 | f78ad93fd3 | |
the-real-herowl | d321b166ea | |
JoseDouglas26 | 18342e44c8 | |
JoseDouglas26 | 2430953a81 | |
SmokeyDope | 538c206985 | |
Doods | 31facbd902 | |
the-real-herowl | 5f70189e08 | |
the-real-herowl | 4e12c6747c | |
the-real-herowl | 1d8fc7abac | |
teknomunk | 09c595c363 | |
teknomunk | 6fbe60f1ac | |
teknomunk | 3705be24d7 | |
teknomunk | 681075df5a | |
teknomunk | 6ecb304946 | |
teknomunk | 034b0142c6 | |
teknomunk | e02d1c0e27 | |
teknomunk | bdcd89e1bf | |
teknomunk | 62ab68637a | |
teknomunk | 0839f35a12 | |
teknomunk | 84d6b593b2 | |
the-real-herowl | 3bcbb99878 | |
the-real-herowl | 9e8661ae95 | |
SOS-Games | 4f37c1600f | |
MysticTempest | 57409973b9 | |
Mikita Wiśniewski | 312ad5b63b | |
Mikita Wiśniewski | 46ed6a6dda | |
the-real-herowl | e582c3bb97 | |
nixnoxus | 9809c627dc | |
the-real-herowl | 8d5c9996a2 | |
the-real-herowl | 13825763b0 |
|
@ -257,12 +257,21 @@ end
|
||||||
---@param dst_inventory InvRef Destination inventory to push to
|
---@param dst_inventory InvRef Destination inventory to push to
|
||||||
---@param dst_list string Name of destination inventory list to push to
|
---@param dst_list string Name of destination inventory list to push to
|
||||||
---@param condition? fun(stack: ItemStack) Condition which items are allowed to be transfered.
|
---@param condition? fun(stack: ItemStack) Condition which items are allowed to be transfered.
|
||||||
|
---@param count? integer Number of items to try to transfer at once
|
||||||
---@return integer Item stack number to be transfered
|
---@return integer Item stack number to be transfered
|
||||||
function mcl_util.select_stack(src_inventory, src_list, dst_inventory, dst_list, condition)
|
function mcl_util.select_stack(src_inventory, src_list, dst_inventory, dst_list, condition, count)
|
||||||
local src_size = src_inventory:get_size(src_list)
|
local src_size = src_inventory:get_size(src_list)
|
||||||
local stack
|
local stack
|
||||||
for i = 1, src_size do
|
for i = 1, src_size do
|
||||||
stack = src_inventory:get_stack(src_list, i)
|
stack = src_inventory:get_stack(src_list, i)
|
||||||
|
|
||||||
|
-- Allow for partial stack movement
|
||||||
|
if count and stack:get_count() >= count then
|
||||||
|
local new_stack = ItemStack(stack)
|
||||||
|
new_stack:set_count(count)
|
||||||
|
stack = new_stack
|
||||||
|
end
|
||||||
|
|
||||||
if not stack:is_empty() and dst_inventory:room_for_item(dst_list, stack) and ((condition == nil or condition(stack))) then
|
if not stack:is_empty() and dst_inventory:room_for_item(dst_list, stack) and ((condition == nil or condition(stack))) then
|
||||||
return i
|
return i
|
||||||
end
|
end
|
||||||
|
@ -280,21 +289,22 @@ end
|
||||||
-- Returns true on success and false on failure
|
-- Returns true on success and false on failure
|
||||||
-- Possible failures: No item in source slot, destination inventory full
|
-- Possible failures: No item in source slot, destination inventory full
|
||||||
function mcl_util.move_item(source_inventory, source_list, source_stack_id, destination_inventory, destination_list)
|
function mcl_util.move_item(source_inventory, source_list, source_stack_id, destination_inventory, destination_list)
|
||||||
if not source_inventory:is_empty(source_list) then
|
-- Can't move items we don't have
|
||||||
local stack = source_inventory:get_stack(source_list, source_stack_id)
|
if source_inventory:is_empty(source_list) then return false end
|
||||||
if not stack:is_empty() then
|
|
||||||
local new_stack = ItemStack(stack)
|
-- Can't move from an empty stack
|
||||||
new_stack:set_count(1)
|
local stack = source_inventory:get_stack(source_list, source_stack_id)
|
||||||
if not destination_inventory:room_for_item(destination_list, new_stack) then
|
if stack:is_empty() then return false end
|
||||||
return false
|
|
||||||
end
|
local new_stack = ItemStack(stack)
|
||||||
stack:take_item()
|
new_stack:set_count(1)
|
||||||
source_inventory:set_stack(source_list, source_stack_id, stack)
|
if not destination_inventory:room_for_item(destination_list, new_stack) then
|
||||||
destination_inventory:add_item(destination_list, new_stack)
|
return false
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
return false
|
stack:take_item()
|
||||||
|
source_inventory:set_stack(source_list, source_stack_id, stack)
|
||||||
|
destination_inventory:add_item(destination_list, new_stack)
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Try pushing item from hopper inventory to destination inventory
|
--- Try pushing item from hopper inventory to destination inventory
|
||||||
|
@ -314,25 +324,23 @@ function mcl_util.hopper_push(pos, dst_pos)
|
||||||
local dst_list = 'main'
|
local dst_list = 'main'
|
||||||
local dst_inv, stack_id
|
local dst_inv, stack_id
|
||||||
|
|
||||||
|
-- Find a inventory stack in the destination
|
||||||
if dst_def._mcl_hoppers_on_try_push then
|
if dst_def._mcl_hoppers_on_try_push then
|
||||||
dst_inv, dst_list, stack_id = dst_def._mcl_hoppers_on_try_push(dst_pos, pos, hop_inv, hop_list)
|
dst_inv, dst_list, stack_id = dst_def._mcl_hoppers_on_try_push(dst_pos, pos, hop_inv, hop_list)
|
||||||
else
|
else
|
||||||
local dst_meta = minetest.get_meta(dst_pos)
|
local dst_meta = minetest.get_meta(dst_pos)
|
||||||
dst_inv = dst_meta:get_inventory()
|
dst_inv = dst_meta:get_inventory()
|
||||||
stack_id = mcl_util.select_stack(hop_inv, hop_list, dst_inv, dst_list)
|
stack_id = mcl_util.select_stack(hop_inv, hop_list, dst_inv, dst_list, nil, 1)
|
||||||
|
end
|
||||||
|
if not stack_id then return false end
|
||||||
|
|
||||||
|
-- Move the item
|
||||||
|
local ok = mcl_util.move_item(hop_inv, hop_list, stack_id, dst_inv, dst_list)
|
||||||
|
if dst_def._mcl_hoppers_on_after_push then
|
||||||
|
dst_def._mcl_hoppers_on_after_push(dst_pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
if stack_id ~= nil then
|
return ok
|
||||||
local ok = mcl_util.move_item(hop_inv, hop_list, stack_id, dst_inv, dst_list)
|
|
||||||
if dst_def._mcl_hoppers_on_after_push then
|
|
||||||
dst_def._mcl_hoppers_on_after_push(dst_pos)
|
|
||||||
end
|
|
||||||
if ok then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Try pulling from source inventory to hopper inventory
|
-- Try pulling from source inventory to hopper inventory
|
||||||
|
@ -357,7 +365,7 @@ function mcl_util.hopper_pull(pos, src_pos)
|
||||||
else
|
else
|
||||||
local src_meta = minetest.get_meta(src_pos)
|
local src_meta = minetest.get_meta(src_pos)
|
||||||
src_inv = src_meta:get_inventory()
|
src_inv = src_meta:get_inventory()
|
||||||
stack_id = mcl_util.select_stack(src_inv, src_list, hop_inv, hop_list)
|
stack_id = mcl_util.select_stack(src_inv, src_list, hop_inv, hop_list, nil, 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
if stack_id ~= nil then
|
if stack_id ~= nil then
|
||||||
|
|
|
@ -168,7 +168,7 @@ end
|
||||||
|
|
||||||
|
|
||||||
function boat.on_activate(self, staticdata, dtime_s)
|
function boat.on_activate(self, staticdata, dtime_s)
|
||||||
self.object:set_armor_groups({fleshy = 100})
|
self.object:set_armor_groups({fleshy = 125})
|
||||||
local data = minetest.deserialize(staticdata)
|
local data = minetest.deserialize(staticdata)
|
||||||
if type(data) == "table" then
|
if type(data) == "table" then
|
||||||
self._v = data.v
|
self._v = data.v
|
||||||
|
|
|
@ -325,12 +325,19 @@ function mcl_mobs.register_mob(name, def)
|
||||||
|
|
||||||
_spawner = def._spawner,
|
_spawner = def._spawner,
|
||||||
}
|
}
|
||||||
minetest.register_entity(name, setmetatable(final_def,mcl_mobs.mob_class_meta))
|
|
||||||
|
|
||||||
if minetest.get_modpath("doc_identifier") ~= nil then
|
if minetest.get_modpath("doc_identifier") ~= nil then
|
||||||
doc.sub.identifier.register_object(name, "basics", "mobs")
|
doc.sub.identifier.register_object(name, "basics", "mobs")
|
||||||
|
|
||||||
|
if def.unused ~= true then
|
||||||
|
doc.add_entry("mobs", name, {
|
||||||
|
name = def.description or name,
|
||||||
|
data = final_def,
|
||||||
|
})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
minetest.register_entity(name, setmetatable(final_def,mcl_mobs.mob_class_meta))
|
||||||
end -- END mcl_mobs.register_mob function
|
end -- END mcl_mobs.register_mob function
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
local S = minetest.get_translator(minetest.get_current_modname())
|
local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
|
|
||||||
local axolotl = {
|
local axolotl = {
|
||||||
|
description = S("Axolotl"),
|
||||||
type = "animal",
|
type = "animal",
|
||||||
spawn_class = "axolotl",
|
spawn_class = "axolotl",
|
||||||
can_despawn = true,
|
can_despawn = true,
|
||||||
|
|
|
@ -30,6 +30,7 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local cod = {
|
local cod = {
|
||||||
|
description = S("Cod"),
|
||||||
type = "animal",
|
type = "animal",
|
||||||
spawn_class = "water_ambient",
|
spawn_class = "water_ambient",
|
||||||
can_despawn = true,
|
can_despawn = true,
|
||||||
|
|
|
@ -136,7 +136,7 @@ mcl_mobs.register_mob("mobs_mc:creeper", {
|
||||||
})
|
})
|
||||||
|
|
||||||
mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
mcl_mobs.register_mob("mobs_mc:creeper_charged", {
|
||||||
description = S("Creeper"),
|
description = S("Charged Creeper"),
|
||||||
type = "monster",
|
type = "monster",
|
||||||
spawn_class = "hostile",
|
spawn_class = "hostile",
|
||||||
hp_min = 20,
|
hp_min = 20,
|
||||||
|
|
|
@ -30,6 +30,7 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local dolphin = {
|
local dolphin = {
|
||||||
|
description = S("Dolphin"),
|
||||||
type = "animal",
|
type = "animal",
|
||||||
spawn_class = "water",
|
spawn_class = "water",
|
||||||
can_despawn = true,
|
can_despawn = true,
|
||||||
|
|
|
@ -30,6 +30,7 @@ for i=1,4 do
|
||||||
end
|
end
|
||||||
|
|
||||||
mcl_mobs.register_mob("mobs_mc:glow_squid", {
|
mcl_mobs.register_mob("mobs_mc:glow_squid", {
|
||||||
|
description = S("Glow Squid"),
|
||||||
type = "animal",
|
type = "animal",
|
||||||
spawn_class = "water_underground",
|
spawn_class = "water_underground",
|
||||||
can_despawn = true,
|
can_despawn = true,
|
||||||
|
|
|
@ -343,8 +343,13 @@ mcl_mobs.register_mob("mobs_mc:baby_zombified_piglin", baby_zombified_piglin)
|
||||||
|
|
||||||
-- Compatibility code. These were removed, and now are called zombie piglins. They don't spawn.
|
-- Compatibility code. These were removed, and now are called zombie piglins. They don't spawn.
|
||||||
-- This is only to catch old cases. Maybe could be an alias?
|
-- This is only to catch old cases. Maybe could be an alias?
|
||||||
mcl_mobs.register_mob("mobs_mc:pigman", zombified_piglin)
|
local pigman_unused = table.copy(zombified_piglin)
|
||||||
mcl_mobs.register_mob("mobs_mc:baby_pigman", baby_zombified_piglin)
|
pigman_unused.unused = true
|
||||||
|
local baby_pigman_unused = table.copy(baby_zombified_piglin)
|
||||||
|
baby_pigman_unused.unused = true
|
||||||
|
|
||||||
|
mcl_mobs.register_mob("mobs_mc:pigman", pigman_unused)
|
||||||
|
mcl_mobs.register_mob("mobs_mc:baby_pigman", baby_pigman_unused)
|
||||||
|
|
||||||
|
|
||||||
-- Piglin Brute --
|
-- Piglin Brute --
|
||||||
|
|
|
@ -10,6 +10,7 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
--###################
|
--###################
|
||||||
|
|
||||||
local salmon = {
|
local salmon = {
|
||||||
|
description = S("Salmon"),
|
||||||
type = "animal",
|
type = "animal",
|
||||||
spawn_class = "water_ambient",
|
spawn_class = "water_ambient",
|
||||||
can_despawn = true,
|
can_despawn = true,
|
||||||
|
|
|
@ -176,7 +176,7 @@ end
|
||||||
|
|
||||||
-- Slime
|
-- Slime
|
||||||
local slime_big = {
|
local slime_big = {
|
||||||
description = S("Slime"),
|
description = S("Slime - big"),
|
||||||
type = "monster",
|
type = "monster",
|
||||||
spawn_class = "hostile",
|
spawn_class = "hostile",
|
||||||
group_attack = { "mobs_mc:slime_big", "mobs_mc:slime_small", "mobs_mc:slime_tiny" },
|
group_attack = { "mobs_mc:slime_big", "mobs_mc:slime_small", "mobs_mc:slime_tiny" },
|
||||||
|
@ -231,6 +231,7 @@ local slime_big = {
|
||||||
mcl_mobs.register_mob("mobs_mc:slime_big", slime_big)
|
mcl_mobs.register_mob("mobs_mc:slime_big", slime_big)
|
||||||
|
|
||||||
local slime_small = table.copy(slime_big)
|
local slime_small = table.copy(slime_big)
|
||||||
|
slime_small.description = S("Slime - small")
|
||||||
slime_small.sounds.base_pitch = 1.15
|
slime_small.sounds.base_pitch = 1.15
|
||||||
slime_small.hp_min = 4
|
slime_small.hp_min = 4
|
||||||
slime_small.hp_max = 4
|
slime_small.hp_max = 4
|
||||||
|
@ -248,6 +249,7 @@ slime_small.on_die = spawn_children_on_die("mobs_mc:slime_tiny", 0.6, 1.0)
|
||||||
mcl_mobs.register_mob("mobs_mc:slime_small", slime_small)
|
mcl_mobs.register_mob("mobs_mc:slime_small", slime_small)
|
||||||
|
|
||||||
local slime_tiny = table.copy(slime_big)
|
local slime_tiny = table.copy(slime_big)
|
||||||
|
slime_tiny.description = S("Slime - tiny")
|
||||||
slime_tiny.sounds.base_pitch = 1.3
|
slime_tiny.sounds.base_pitch = 1.3
|
||||||
slime_tiny.hp_min = 1
|
slime_tiny.hp_min = 1
|
||||||
slime_tiny.hp_max = 1
|
slime_tiny.hp_max = 1
|
||||||
|
@ -397,7 +399,7 @@ swamp_max)
|
||||||
|
|
||||||
-- Magma cube
|
-- Magma cube
|
||||||
local magma_cube_big = {
|
local magma_cube_big = {
|
||||||
description = S("Magma Cube"),
|
description = S("Magma Cube - big"),
|
||||||
type = "monster",
|
type = "monster",
|
||||||
spawn_class = "hostile",
|
spawn_class = "hostile",
|
||||||
hp_min = 16,
|
hp_min = 16,
|
||||||
|
@ -458,6 +460,7 @@ local magma_cube_big = {
|
||||||
mcl_mobs.register_mob("mobs_mc:magma_cube_big", magma_cube_big)
|
mcl_mobs.register_mob("mobs_mc:magma_cube_big", magma_cube_big)
|
||||||
|
|
||||||
local magma_cube_small = table.copy(magma_cube_big)
|
local magma_cube_small = table.copy(magma_cube_big)
|
||||||
|
magma_cube_small.description = S("Magma Cube - small")
|
||||||
magma_cube_small.sounds.jump = "mobs_mc_magma_cube_small"
|
magma_cube_small.sounds.jump = "mobs_mc_magma_cube_small"
|
||||||
magma_cube_small.sounds.death = "mobs_mc_magma_cube_small"
|
magma_cube_small.sounds.death = "mobs_mc_magma_cube_small"
|
||||||
magma_cube_small.hp_min = 4
|
magma_cube_small.hp_min = 4
|
||||||
|
@ -479,6 +482,7 @@ magma_cube_small.on_die = spawn_children_on_die("mobs_mc:magma_cube_tiny", 0.6,
|
||||||
mcl_mobs.register_mob("mobs_mc:magma_cube_small", magma_cube_small)
|
mcl_mobs.register_mob("mobs_mc:magma_cube_small", magma_cube_small)
|
||||||
|
|
||||||
local magma_cube_tiny = table.copy(magma_cube_big)
|
local magma_cube_tiny = table.copy(magma_cube_big)
|
||||||
|
magma_cube_tiny.description = S("Magma Cube - tiny")
|
||||||
magma_cube_tiny.sounds.jump = "mobs_mc_magma_cube_small"
|
magma_cube_tiny.sounds.jump = "mobs_mc_magma_cube_small"
|
||||||
magma_cube_tiny.sounds.death = "mobs_mc_magma_cube_small"
|
magma_cube_tiny.sounds.death = "mobs_mc_magma_cube_small"
|
||||||
magma_cube_tiny.sounds.base_pitch = 1.25
|
magma_cube_tiny.sounds.base_pitch = 1.25
|
||||||
|
|
|
@ -11,6 +11,7 @@ local S = minetest.get_translator("mobs_mc")
|
||||||
|
|
||||||
|
|
||||||
local strider = {
|
local strider = {
|
||||||
|
description = S("Strider"),
|
||||||
type = "animal",
|
type = "animal",
|
||||||
passive = true,
|
passive = true,
|
||||||
spawn_class = "passive",
|
spawn_class = "passive",
|
||||||
|
@ -205,6 +206,7 @@ mcl_mobs.register_mob("mobs_mc:strider", strider)
|
||||||
-- Baby strider.
|
-- Baby strider.
|
||||||
|
|
||||||
local baby_strider = table.copy(strider)
|
local baby_strider = table.copy(strider)
|
||||||
|
baby_strider.description = S("Baby Strider")
|
||||||
baby_strider.collisionbox = {-.3, -0.01, -.3, .3, 0.94, .3}
|
baby_strider.collisionbox = {-.3, -0.01, -.3, .3, 0.94, .3}
|
||||||
baby_strider.xp_min = 13
|
baby_strider.xp_min = 13
|
||||||
baby_strider.xp_max = 13
|
baby_strider.xp_max = 13
|
||||||
|
|
|
@ -58,6 +58,7 @@ local function set_textures(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
local tropical_fish = {
|
local tropical_fish = {
|
||||||
|
description = S("Tropical Fish"),
|
||||||
type = "animal",
|
type = "animal",
|
||||||
spawn_class = "water_ambient",
|
spawn_class = "water_ambient",
|
||||||
can_despawn = true,
|
can_despawn = true,
|
||||||
|
|
|
@ -1989,6 +1989,17 @@ local trade_inventory = {
|
||||||
-- Otherwise, 20% chance to unlock if used freshly reset trade
|
-- Otherwise, 20% chance to unlock if used freshly reset trade
|
||||||
unlock_stuff = true
|
unlock_stuff = true
|
||||||
end
|
end
|
||||||
|
-- calculate xp based on the price
|
||||||
|
local emeralds = 0
|
||||||
|
if wanted1:get_name() == "mcl_core:emerald" then
|
||||||
|
emeralds = wanted1:get_count()
|
||||||
|
elseif wanted2:get_name() == "mcl_core:emerald" then
|
||||||
|
emeralds = wanted2:get_count()
|
||||||
|
else
|
||||||
|
local offered = inv:get_stack("offered", 1)
|
||||||
|
emeralds = offered:get_name() == "mcl_core:emerald" and offered:get_count() or 0
|
||||||
|
end
|
||||||
|
local xp = 2 + math.ceil(emeralds / (64/4)) -- 1..64 emeralds = 3..6 xp
|
||||||
local update_formspec = false
|
local update_formspec = false
|
||||||
if unlock_stuff then
|
if unlock_stuff then
|
||||||
-- First-time trade unlock all trades and unlock next trade tier
|
-- First-time trade unlock all trades and unlock next trade tier
|
||||||
|
@ -2000,6 +2011,7 @@ local trade_inventory = {
|
||||||
set_textures(trader)
|
set_textures(trader)
|
||||||
update_max_tradenum(trader)
|
update_max_tradenum(trader)
|
||||||
update_formspec = true
|
update_formspec = true
|
||||||
|
xp = xp + 5
|
||||||
end
|
end
|
||||||
for t=1, #trades do
|
for t=1, #trades do
|
||||||
trades[t].locked = false
|
trades[t].locked = false
|
||||||
|
@ -2010,6 +2022,7 @@ local trade_inventory = {
|
||||||
-- TODO: Replace by Regeneration I
|
-- TODO: Replace by Regeneration I
|
||||||
trader.health = math.min(trader.hp_max, trader.health + 4)
|
trader.health = math.min(trader.hp_max, trader.health + 4)
|
||||||
end
|
end
|
||||||
|
mcl_experience.add_xp(player, xp)
|
||||||
trade.trade_counter = trade.trade_counter + 1
|
trade.trade_counter = trade.trade_counter + 1
|
||||||
mcl_log("Trade counter is: ".. trade.trade_counter)
|
mcl_log("Trade counter is: ".. trade.trade_counter)
|
||||||
-- Semi-randomly lock trade for repeated trade (not if there's only 1 trade)
|
-- Semi-randomly lock trade for repeated trade (not if there's only 1 trade)
|
||||||
|
@ -2047,6 +2060,7 @@ local trade_inventory = {
|
||||||
if update_formspec then
|
if update_formspec then
|
||||||
show_trade_formspec(name, trader, tradenum)
|
show_trade_formspec(name, trader, tradenum)
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
minetest.log("error", "[mobs_mc] Player took item from trader output but player_trading_with or player_tradenum is nil!")
|
minetest.log("error", "[mobs_mc] Player took item from trader output but player_trading_with or player_tradenum is nil!")
|
||||||
end
|
end
|
||||||
|
|
|
@ -135,6 +135,7 @@ end
|
||||||
|
|
||||||
-- Tamed wolf (aka “dog”)
|
-- Tamed wolf (aka “dog”)
|
||||||
local dog = table.copy(wolf)
|
local dog = table.copy(wolf)
|
||||||
|
dog.description = S("Dog")
|
||||||
dog.can_despawn = false
|
dog.can_despawn = false
|
||||||
dog.passive = true
|
dog.passive = true
|
||||||
dog.hp_min = 20
|
dog.hp_min = 20
|
||||||
|
|
|
@ -53,7 +53,7 @@ doc.data = {}
|
||||||
doc.data.categories = {}
|
doc.data.categories = {}
|
||||||
doc.data.aliases = {}
|
doc.data.aliases = {}
|
||||||
-- Default order (includes categories of other mods from the Docuentation System modpack)
|
-- Default order (includes categories of other mods from the Docuentation System modpack)
|
||||||
doc.data.category_order = {"basics", "nodes", "tools", "craftitems", "advanced"}
|
doc.data.category_order = {"basics", "nodes", "tools", "craftitems", "advanced", "mobs"}
|
||||||
doc.data.category_count = 0
|
doc.data.category_count = 0
|
||||||
doc.data.players = {}
|
doc.data.players = {}
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,11 @@ function doc_identifier.identify(itemstack, user, pointed_thing)
|
||||||
end
|
end
|
||||||
-- A known registered object
|
-- A known registered object
|
||||||
elseif ro then
|
elseif ro then
|
||||||
doc.show_entry(username, ro.category, ro.entry, true)
|
if doc.entry_exists("mobs", le.name) then
|
||||||
|
doc.show_entry(username, "mobs", le.name, true)
|
||||||
|
else
|
||||||
|
doc.show_entry(username, ro.category, ro.entry, true)
|
||||||
|
end
|
||||||
-- Undefined object (error)
|
-- Undefined object (error)
|
||||||
elseif minetest.registered_entities[le.name] == nil then
|
elseif minetest.registered_entities[le.name] == nil then
|
||||||
show_message(username, "error_unknown", le.name)
|
show_message(username, "error_unknown", le.name)
|
||||||
|
|
|
@ -1136,6 +1136,86 @@ doc.add_category("craftitems", {
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
doc.add_category("mobs", {
|
||||||
|
name = S("Mobs"),
|
||||||
|
description = S("different mobs"),
|
||||||
|
build_formspec = function(data, playername)
|
||||||
|
if data then
|
||||||
|
local datastring = ""
|
||||||
|
|
||||||
|
if data.description then
|
||||||
|
datastring = datastring .. S("Description: @1", data.description)
|
||||||
|
datastring = newline2(datastring)
|
||||||
|
end
|
||||||
|
|
||||||
|
if data.type then
|
||||||
|
datastring = datastring .. S("Type: @1", data.type)
|
||||||
|
datastring = newline2(datastring)
|
||||||
|
end
|
||||||
|
|
||||||
|
if data.spawn_class then
|
||||||
|
datastring = datastring .. S("spawn class: @1", data.spawn_class)
|
||||||
|
datastring = newline2(datastring)
|
||||||
|
end
|
||||||
|
|
||||||
|
if data.jump then
|
||||||
|
datastring = datastring .. S("Can Jump")
|
||||||
|
datastring = newline2(datastring)
|
||||||
|
end
|
||||||
|
|
||||||
|
if data.fly then
|
||||||
|
datastring = datastring .. S("Can Fly")
|
||||||
|
datastring = newline2(datastring)
|
||||||
|
end
|
||||||
|
|
||||||
|
if data.drops then
|
||||||
|
count = 0
|
||||||
|
for _,item in ipairs(data.drops) do
|
||||||
|
count = count + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if count > 0 then
|
||||||
|
datastring = datastring .. S("drops: ")
|
||||||
|
datastring = newline(datastring)
|
||||||
|
|
||||||
|
for _,item in ipairs(data.drops) do
|
||||||
|
local itemDescription = ItemStack(item.name):get_short_description()
|
||||||
|
datastring = datastring .. itemDescription
|
||||||
|
datastring = newline(datastring)
|
||||||
|
end
|
||||||
|
|
||||||
|
datastring = newline2(datastring)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if data.follow then
|
||||||
|
datastring = datastring .. S("follows player when these items are held:")
|
||||||
|
datastring = newline(datastring)
|
||||||
|
|
||||||
|
if type(data.follow) == "string" then
|
||||||
|
datastring = datastring .. data.follow
|
||||||
|
datastring = newline(datastring)
|
||||||
|
else
|
||||||
|
for i=1, #data.follow do
|
||||||
|
local itemstring = data.follow[i]
|
||||||
|
local itemDescription = ItemStack(itemstring):get_short_description()
|
||||||
|
datastring = datastring .. itemDescription
|
||||||
|
datastring = newline(datastring)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
datastring = newline2(datastring)
|
||||||
|
end
|
||||||
|
|
||||||
|
local formstring = doc.widgets.text(datastring, nil, nil, doc.FORMSPEC.ENTRY_WIDTH - 1.2)
|
||||||
|
|
||||||
|
return formstring
|
||||||
|
else
|
||||||
|
return "label[0,1;NO DATA AVALIABLE!]"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
-- Register group definition stuff
|
-- Register group definition stuff
|
||||||
-- More (user-)friendly group names to replace the rather technical names
|
-- More (user-)friendly group names to replace the rather technical names
|
||||||
-- for better understanding
|
-- for better understanding
|
||||||
|
|
|
@ -76,6 +76,7 @@ function tt.reload_itemstack_description(itemstack)
|
||||||
orig_desc = minetest.colorize(tt.NAME_COLOR, meta:get_string("name"))
|
orig_desc = minetest.colorize(tt.NAME_COLOR, meta:get_string("name"))
|
||||||
end
|
end
|
||||||
local desc = apply_snippets(orig_desc, itemstring, toolcaps or def.tool_capabilities, itemstack)
|
local desc = apply_snippets(orig_desc, itemstring, toolcaps or def.tool_capabilities, itemstack)
|
||||||
|
if desc == def.description and meta:get_string("description") == "" then return end
|
||||||
meta:set_string("description", desc)
|
meta:set_string("description", desc)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -204,7 +204,8 @@ local function init(player)
|
||||||
local playername = player:get_player_name()
|
local playername = player:get_player_name()
|
||||||
minetest.create_detached_inventory("creative_" .. playername, {
|
minetest.create_detached_inventory("creative_" .. playername, {
|
||||||
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
||||||
if minetest.is_creative_enabled(playername) then
|
if minetest.is_creative_enabled(playername) and
|
||||||
|
from_list ~= to_list then
|
||||||
return count
|
return count
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
@ -541,7 +542,6 @@ function mcl_inventory.set_creative_formspec(player)
|
||||||
"style[" .. this_tab .. ";border=false;bgimg=;bgimg_pressed=;noclip=true]",
|
"style[" .. this_tab .. ";border=false;bgimg=;bgimg_pressed=;noclip=true]",
|
||||||
"image[" .. offset[this_tab] .. ";1.5,1.44;" .. bg_img .. "]",
|
"image[" .. offset[this_tab] .. ";1.5,1.44;" .. bg_img .. "]",
|
||||||
"item_image_button[" .. boffset[this_tab] .. ";1,1;" .. tab_icon[this_tab] .. ";" .. this_tab .. ";]",
|
"item_image_button[" .. boffset[this_tab] .. ";1,1;" .. tab_icon[this_tab] .. ";" .. this_tab .. ";]",
|
||||||
"tooltip[blocks;" .. F(filtername[this_tab]) .. "]"
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -570,20 +570,33 @@ function mcl_inventory.set_creative_formspec(player)
|
||||||
|
|
||||||
listrings,
|
listrings,
|
||||||
|
|
||||||
tab(name, "blocks"),
|
tab(name, "blocks") ..
|
||||||
tab(name, "deco"),
|
"tooltip[blocks;"..F(filtername["blocks"]).."]"..
|
||||||
tab(name, "redstone"),
|
tab(name, "deco") ..
|
||||||
tab(name, "rail"),
|
"tooltip[deco;"..F(filtername["deco"]).."]"..
|
||||||
tab(name, "misc"),
|
tab(name, "redstone") ..
|
||||||
tab(name, "nix"),
|
"tooltip[redstone;"..F(filtername["redstone"]).."]"..
|
||||||
|
tab(name, "rail") ..
|
||||||
|
"tooltip[rail;"..F(filtername["rail"]).."]"..
|
||||||
|
tab(name, "misc") ..
|
||||||
|
"tooltip[misc;"..F(filtername["misc"]).."]"..
|
||||||
|
tab(name, "nix") ..
|
||||||
|
"tooltip[nix;"..F(filtername["nix"]).."]"..
|
||||||
|
|
||||||
tab(name, "food"),
|
tab(name, "food") ..
|
||||||
tab(name, "tools"),
|
"tooltip[food;"..F(filtername["food"]).."]"..
|
||||||
tab(name, "combat"),
|
tab(name, "tools") ..
|
||||||
tab(name, "mobs"),
|
"tooltip[tools;"..F(filtername["tools"]).."]"..
|
||||||
tab(name, "brew"),
|
tab(name, "combat") ..
|
||||||
tab(name, "matr"),
|
"tooltip[combat;"..F(filtername["combat"]).."]"..
|
||||||
tab(name, "inv"),
|
tab(name, "mobs") ..
|
||||||
|
"tooltip[mobs;"..F(filtername["mobs"]).."]"..
|
||||||
|
tab(name, "brew") ..
|
||||||
|
"tooltip[brew;"..F(filtername["brew"]).."]"..
|
||||||
|
tab(name, "matr") ..
|
||||||
|
"tooltip[matr;"..F(filtername["matr"]).."]"..
|
||||||
|
tab(name, "inv") ..
|
||||||
|
"tooltip[inv;"..F(filtername["inv"]).."]"
|
||||||
})
|
})
|
||||||
|
|
||||||
if name == "nix" then
|
if name == "nix" then
|
||||||
|
@ -594,6 +607,7 @@ function mcl_inventory.set_creative_formspec(player)
|
||||||
formspec = formspec .. table.concat({
|
formspec = formspec .. table.concat({
|
||||||
"field[5.325,0.15;6.1,0.6;search;;" .. minetest.formspec_escape(filter) .. "]",
|
"field[5.325,0.15;6.1,0.6;search;;" .. minetest.formspec_escape(filter) .. "]",
|
||||||
"field_close_on_enter[search;false]",
|
"field_close_on_enter[search;false]",
|
||||||
|
"field_enter_after_edit[search;true]",
|
||||||
"set_focus[search;true]",
|
"set_focus[search;true]",
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
|
@ -77,16 +77,31 @@ local function rotate(pos, node, user, mode, new_param2)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local creative_dig = {}
|
||||||
local function destruct_bed(pos, oldnode)
|
local function destruct_bed(pos, oldnode)
|
||||||
local node = oldnode or minetest_get_node_or_nil(pos)
|
local node = oldnode or minetest_get_node_or_nil(pos)
|
||||||
if not node then return end
|
if not node then return end
|
||||||
|
|
||||||
local pos2, node2, bottom = get_bed_next_node(pos, oldnode)
|
local pos2, node2, bottom = get_bed_next_node(pos, oldnode)
|
||||||
|
|
||||||
|
-- Check creative dig flags and don't drop an item if the bed was dug by a player in
|
||||||
|
-- creative mode
|
||||||
|
local pos_hash = minetest.hash_node_position(pos)
|
||||||
|
local pos2_hash = minetest.hash_node_position(pos2)
|
||||||
|
local creative_mode = creative_dig[pos_hash] or creative_dig[pos2_hash]
|
||||||
|
|
||||||
if bottom then
|
if bottom then
|
||||||
if node2 and string.sub(node2.name, -4) == "_top" then
|
if node2 and string.sub(node2.name, -4) == "_top" then
|
||||||
minetest_remove_node(pos2)
|
minetest_remove_node(pos2)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Drop the bed only when removing the top to prevent duplication and only if
|
||||||
|
-- it wasn't dug by a player in creative mode
|
||||||
|
local bed_node_def = minetest.registered_nodes[node.name]
|
||||||
|
if bed_node_def and bed_node_def._mcl_beds_drop and not creative_mode then
|
||||||
|
local stack = ItemStack(bed_node_def._mcl_beds_drop)
|
||||||
|
minetest.add_item(pos2, stack)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
if node2 and string.sub(node2.name, -7) == "_bottom" then
|
if node2 and string.sub(node2.name, -7) == "_bottom" then
|
||||||
minetest_remove_node(pos2)
|
minetest_remove_node(pos2)
|
||||||
|
@ -94,6 +109,29 @@ local function destruct_bed(pos, oldnode)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function dig_bed(pos, node, digger)
|
||||||
|
local pos_hash = minetest.hash_node_position(pos)
|
||||||
|
|
||||||
|
if digger then
|
||||||
|
local name = digger:get_player_name()
|
||||||
|
if minetest.is_protected(pos, name) then
|
||||||
|
minetest.record_protection_violation(pos, name)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Set creative dig flags to stop dropping items
|
||||||
|
if minetest.is_creative_enabled(name) then
|
||||||
|
creative_dig[pos_hash] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Trigger the destruct_bed function
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
|
||||||
|
-- Clean up creative dig flag
|
||||||
|
creative_dig[pos_hash] = nil
|
||||||
|
end
|
||||||
|
|
||||||
local function kick_player_after_destruct(destruct_pos)
|
local function kick_player_after_destruct(destruct_pos)
|
||||||
for name, player_bed_pos in pairs(mcl_beds.bed_pos) do
|
for name, player_bed_pos in pairs(mcl_beds.bed_pos) do
|
||||||
if vector.distance(destruct_pos, player_bed_pos) < 0.1 then
|
if vector.distance(destruct_pos, player_bed_pos) < 0.1 then
|
||||||
|
@ -126,6 +164,26 @@ if minetest.get_modpath("mcl_sounds") then
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function place_bed(name, placer, pos, dir)
|
||||||
|
local botpos = vector_add(pos, minetest_facedir_to_dir(dir))
|
||||||
|
|
||||||
|
if minetest.is_protected(botpos, placer:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(placer, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(botpos, placer:get_player_name())
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local botdef = minetest.registered_nodes[minetest_get_node(botpos).name]
|
||||||
|
if not botdef or not botdef.buildable_to then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.set_node(pos, {name = name .. "_bottom", param2 = dir})
|
||||||
|
minetest.set_node(botpos, {name = name .. "_top", param2 = dir})
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
function mcl_beds.register_bed(name, def)
|
function mcl_beds.register_bed(name, def)
|
||||||
local common_box = {
|
local common_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
@ -156,7 +214,8 @@ function mcl_beds.register_bed(name, def)
|
||||||
sounds = def.sounds or default_sounds,
|
sounds = def.sounds or default_sounds,
|
||||||
selection_box = common_box,
|
selection_box = common_box,
|
||||||
collision_box = common_box,
|
collision_box = common_box,
|
||||||
drop = def.recipe and name or "",
|
_mcl_beds_drop = def.recipe and name or "",
|
||||||
|
drop = "",
|
||||||
node_placement_prediction = "",
|
node_placement_prediction = "",
|
||||||
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
@ -189,30 +248,23 @@ function mcl_beds.register_bed(name, def)
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Try to place in three directions: inline with the view and rotated to
|
||||||
|
-- the right and left
|
||||||
local dir = minetest.dir_to_facedir(placer:get_look_dir())
|
local dir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||||
local botpos = vector_add(pos, minetest_facedir_to_dir(dir))
|
if place_bed(name, placer, pos, dir) or
|
||||||
|
place_bed(name, placer, pos, (dir+1)%4) or
|
||||||
if minetest.is_protected(botpos, placer:get_player_name()) and
|
place_bed(name, placer, pos, (dir+3)%4) or
|
||||||
not minetest.check_player_privs(placer, "protection_bypass") then
|
place_bed(name, placer, pos, (dir+2)%4) then
|
||||||
minetest.record_protection_violation(botpos, placer:get_player_name())
|
-- Bed was places
|
||||||
return itemstack
|
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
||||||
end
|
itemstack:take_item()
|
||||||
|
end
|
||||||
local botdef = minetest.registered_nodes[minetest_get_node(botpos).name]
|
|
||||||
if not botdef or not botdef.buildable_to then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.set_node(pos, {name = name .. "_bottom", param2 = dir})
|
|
||||||
minetest.set_node(botpos, {name = name .. "_top", param2 = dir})
|
|
||||||
|
|
||||||
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
|
||||||
itemstack:take_item()
|
|
||||||
end
|
end
|
||||||
return itemstack
|
return itemstack
|
||||||
end,
|
end,
|
||||||
|
|
||||||
after_destruct = destruct_bed,
|
after_destruct = destruct_bed,
|
||||||
|
on_dig = dig_bed,
|
||||||
|
|
||||||
on_destruct = kick_player_after_destruct,
|
on_destruct = kick_player_after_destruct,
|
||||||
|
|
||||||
|
@ -239,7 +291,7 @@ function mcl_beds.register_bed(name, def)
|
||||||
_mcl_hardness = 0.2,
|
_mcl_hardness = 0.2,
|
||||||
_mcl_blast_resistance = 1,
|
_mcl_blast_resistance = 1,
|
||||||
sounds = def.sounds or default_sounds,
|
sounds = def.sounds or default_sounds,
|
||||||
drop = def.recipe and name or "",
|
drop = "",
|
||||||
selection_box = common_box,
|
selection_box = common_box,
|
||||||
collision_box = common_box,
|
collision_box = common_box,
|
||||||
|
|
||||||
|
@ -250,6 +302,7 @@ function mcl_beds.register_bed(name, def)
|
||||||
|
|
||||||
on_rotate = rotate,
|
on_rotate = rotate,
|
||||||
after_destruct = destruct_bed,
|
after_destruct = destruct_bed,
|
||||||
|
on_dig = dig_bed,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_alias(name, name .. "_bottom")
|
minetest.register_alias(name, name .. "_bottom")
|
||||||
|
|
|
@ -191,6 +191,18 @@ minetest.register_craft({
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "group:bee_nest",
|
||||||
|
burntime = 15,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "group:beehive",
|
||||||
|
burntime = 15,
|
||||||
|
})
|
||||||
|
|
||||||
-- Temporary ABM to update honey levels
|
-- Temporary ABM to update honey levels
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
label = "Update Beehive Honey Levels",
|
label = "Update Beehive Honey Levels",
|
||||||
|
|
|
@ -475,8 +475,11 @@ minetest.register_node("mcl_books:bookshelf", {
|
||||||
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
return inv, "main", mcl_util.select_stack(hop_inv, hop_list, inv, "main",
|
local function filter(stack)
|
||||||
function(stack) return minetest.get_item_group(stack:get_name(), "book") == 1 or stack:get_name() == "mcl_enchanting:book_enchanted" end)
|
return minetest.get_item_group(stack:get_name(), "book") == 1 or
|
||||||
|
stack:get_name() == "mcl_enchanting:book_enchanted"
|
||||||
|
end
|
||||||
|
return inv, "main", mcl_util.select_stack(hop_inv, hop_list, inv, "main", filter, 1)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -379,16 +379,27 @@ end
|
||||||
local function hoppers_on_try_push(pos, hop_pos, hop_inv, hop_list)
|
local function hoppers_on_try_push(pos, hop_pos, hop_inv, hop_list)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
if math.abs(pos.y - hop_pos.y) > math.abs(pos.x - hop_pos.x) and math.abs(pos.y - hop_pos.y) > math.abs(pos.z - hop_pos.z) then
|
|
||||||
return inv, "input", mcl_util.select_stack(hop_inv, hop_list, inv, "input",
|
if math.abs(pos.y - hop_pos.y) > math.abs(pos.x - hop_pos.x) and math.abs(pos.y - hop_pos.y) > math.abs(pos.z - hop_pos.z)
|
||||||
function(stack) return minetest.get_item_group(stack:get_name(), "brewitem") == 1 and minetest.get_item_group(stack:get_name(), "bottle") == 0 end)
|
then
|
||||||
|
local function filter(stack)
|
||||||
|
return minetest.get_item_group(stack:get_name(), "brewitem") == 1 and
|
||||||
|
minetest.get_item_group(stack:get_name(), "bottle") == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
return inv, "input", mcl_util.select_stack(hop_inv, hop_list, inv, "input", filter, 1)
|
||||||
else
|
else
|
||||||
local stack = mcl_util.select_stack(hop_inv, hop_list, inv, "fuel", function(stack) return stack:get_name() == "mcl_mobitems:blaze_powder" end)
|
local filter = function(stack)
|
||||||
|
return stack:get_name() == "mcl_mobitems:blaze_powder"
|
||||||
|
end
|
||||||
|
local stack = mcl_util.select_stack(hop_inv, hop_list, inv, "fuel", filter, 1 )
|
||||||
if stack then
|
if stack then
|
||||||
return inv, "fuel", stack
|
return inv, "fuel", stack
|
||||||
else
|
else
|
||||||
return inv, "stand", mcl_util.select_stack(hop_inv, hop_list, inv, "stand",
|
local function filter(stack)
|
||||||
function(stack) return minetest.get_item_group(stack:get_name(), "bottle") == 1 end)
|
return minetest.get_item_group(stack:get_name(), "bottle") == 1
|
||||||
|
end
|
||||||
|
return inv, "stand", mcl_util.select_stack(hop_inv, hop_list, inv, "stand", filter, 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,3 +26,9 @@ minetest.register_craft({
|
||||||
{ "group:wood", "group:wood", "" },
|
{ "group:wood", "group:wood", "" },
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mcl_cartography_table:cartography_table",
|
||||||
|
burntime = 15,
|
||||||
|
})
|
||||||
|
|
|
@ -760,7 +760,7 @@ local function register_chest(basename, desc, longdesc, usagehelp, tt_help, tile
|
||||||
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
local stack_id = mcl_util.select_stack(hop_inv, hop_list, inv, "main")
|
local stack_id = mcl_util.select_stack(hop_inv, hop_list, inv, "main", nil, 1)
|
||||||
if stack_id ~= nil then
|
if stack_id ~= nil then
|
||||||
return inv, "main", stack_id
|
return inv, "main", stack_id
|
||||||
end
|
end
|
||||||
|
@ -768,7 +768,7 @@ local function register_chest(basename, desc, longdesc, usagehelp, tt_help, tile
|
||||||
local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left")
|
local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left")
|
||||||
local meta_other = minetest.get_meta(pos_other)
|
local meta_other = minetest.get_meta(pos_other)
|
||||||
local inv_other = meta_other:get_inventory()
|
local inv_other = meta_other:get_inventory()
|
||||||
stack_id = mcl_util.select_stack(hop_inv, hop_list, inv_other, "main")
|
stack_id = mcl_util.select_stack(hop_inv, hop_list, inv_other, "main", nil, 1)
|
||||||
return inv_other, "main", stack_id
|
return inv_other, "main", stack_id
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
@ -955,13 +955,13 @@ local function register_chest(basename, desc, longdesc, usagehelp, tt_help, tile
|
||||||
local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right")
|
local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right")
|
||||||
local meta_other = minetest.get_meta(pos_other)
|
local meta_other = minetest.get_meta(pos_other)
|
||||||
local inv_other = meta_other:get_inventory()
|
local inv_other = meta_other:get_inventory()
|
||||||
local stack_id = mcl_util.select_stack(hop_inv, hop_list, inv_other, "main")
|
local stack_id = mcl_util.select_stack(hop_inv, hop_list, inv_other, "main", nil, 1)
|
||||||
if stack_id ~= nil then
|
if stack_id ~= nil then
|
||||||
return inv_other, "main", stack_id
|
return inv_other, "main", stack_id
|
||||||
end
|
end
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
stack_id = mcl_util.select_stack(hop_inv, hop_list, inv, "main")
|
stack_id = mcl_util.select_stack(hop_inv, hop_list, inv, "main", nil, 1)
|
||||||
return inv, "main", stack_id
|
return inv, "main", stack_id
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
@ -1522,7 +1522,7 @@ for color, desc in pairs(boxtypes) do
|
||||||
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
return inv, "main", mcl_util.select_stack(hop_inv, hop_list, inv, "main", mcl_chests.is_not_shulker_box)
|
return inv, "main", mcl_util.select_stack(hop_inv, hop_list, inv, "main", mcl_chests.is_not_shulker_box, 1)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -238,7 +238,7 @@ minetest.register_node("mcl_composters:composter", {
|
||||||
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
return inv, "src", mcl_util.select_stack(hop_inv, hop_list, inv, "src", hopper_push_condition)
|
return inv, "src", mcl_util.select_stack(hop_inv, hop_list, inv, "src", hopper_push_condition, 1)
|
||||||
end,
|
end,
|
||||||
_mcl_hoppers_on_after_push = function(pos)
|
_mcl_hoppers_on_after_push = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
@ -293,7 +293,7 @@ local function register_filled_composter(level)
|
||||||
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
_mcl_hoppers_on_try_push = function(pos, hop_pos, hop_inv, hop_list)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
return inv, "src", mcl_util.select_stack(hop_inv, hop_list, inv, "src", hopper_push_condition)
|
return inv, "src", mcl_util.select_stack(hop_inv, hop_list, inv, "src", hopper_push_condition, 1)
|
||||||
end,
|
end,
|
||||||
_mcl_hoppers_on_after_push = function(pos)
|
_mcl_hoppers_on_after_push = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
|
|
@ -164,6 +164,12 @@ minetest.register_node("mcl_core:deadbush", {
|
||||||
_mcl_hardness = 0,
|
_mcl_hardness = 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mcl_core:deadbush",
|
||||||
|
burntime = 5,
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_node("mcl_core:barrier", {
|
minetest.register_node("mcl_core:barrier", {
|
||||||
description = S("Barrier"),
|
description = S("Barrier"),
|
||||||
_doc_items_longdesc = S("Barriers are invisible walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block."),
|
_doc_items_longdesc = S("Barriers are invisible walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block."),
|
||||||
|
|
|
@ -74,6 +74,7 @@ local end_rod_def = {
|
||||||
light_source = minetest.LIGHT_MAX,
|
light_source = minetest.LIGHT_MAX,
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
groups = { dig_immediate=3, deco_block=1, destroy_by_lava_flow=1, end_rod=1 },
|
groups = { dig_immediate=3, deco_block=1, destroy_by_lava_flow=1, end_rod=1 },
|
||||||
|
use_texture_alpha = "clip",
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
|
@ -153,6 +154,7 @@ for num, row in ipairs(colored_end_rods) do
|
||||||
def.description = desc
|
def.description = desc
|
||||||
def._doc_items_longdesc = nil
|
def._doc_items_longdesc = nil
|
||||||
def._doc_items_create_entry = false
|
def._doc_items_create_entry = false
|
||||||
|
def.use_texture_alpha = "clip"
|
||||||
local side_tex
|
local side_tex
|
||||||
if name == "pink" then
|
if name == "pink" then
|
||||||
def.tiles[1] = def.tiles[1] .. "^(" .. def.tiles[1] .. end_rod_mask .. "^[multiply:" .. name .. "^[hsl:0:300)"
|
def.tiles[1] = def.tiles[1] .. "^(" .. def.tiles[1] .. end_rod_mask .. "^[multiply:" .. name .. "^[hsl:0:300)"
|
||||||
|
|
|
@ -23,4 +23,10 @@ minetest.register_craft({
|
||||||
{ "group:wood", "group:wood", "" },
|
{ "group:wood", "group:wood", "" },
|
||||||
{ "group:wood", "group:wood", "" },
|
{ "group:wood", "group:wood", "" },
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mcl_fletching_table:fletching_table",
|
||||||
|
burntime = 15,
|
||||||
|
})
|
||||||
|
|
|
@ -195,6 +195,7 @@ def_clover.tiles = { "mcl_flowers_clover.png" }
|
||||||
def_clover.inventory_image = "mcl_flowers_clover_inv.png"
|
def_clover.inventory_image = "mcl_flowers_clover_inv.png"
|
||||||
def_clover.wield_image = "mcl_flowers_clover_inv.png"
|
def_clover.wield_image = "mcl_flowers_clover_inv.png"
|
||||||
def_clover.drop = nil
|
def_clover.drop = nil
|
||||||
|
def_clover.use_texture_alpha = "clip"
|
||||||
def_clover.selection_box = {
|
def_clover.selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -4/16, -0.5, -4/16, 4/16, 0, 4/16 },
|
fixed = { -4/16, -0.5, -4/16, 4/16, 0, 4/16 },
|
||||||
|
@ -210,6 +211,7 @@ def_4l_clover.mesh = "mcl_clover_4leaf.obj"
|
||||||
def_4l_clover.tiles = { "mcl_flowers_fourleaf_clover.png" }
|
def_4l_clover.tiles = { "mcl_flowers_fourleaf_clover.png" }
|
||||||
def_4l_clover.inventory_image = "mcl_flowers_fourleaf_clover_inv.png"
|
def_4l_clover.inventory_image = "mcl_flowers_fourleaf_clover_inv.png"
|
||||||
def_4l_clover.wield_image = "mcl_flowers_fourleaf_clover_inv.png"
|
def_4l_clover.wield_image = "mcl_flowers_fourleaf_clover_inv.png"
|
||||||
|
def_4l_clover.use_texture_alpha = "clip"
|
||||||
|
|
||||||
minetest.register_node("mcl_flowers:fourleaf_clover", def_4l_clover)
|
minetest.register_node("mcl_flowers:fourleaf_clover", def_4l_clover)
|
||||||
|
|
||||||
|
@ -268,6 +270,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
||||||
end
|
end
|
||||||
-- Sunflower mesh and tiles
|
-- Sunflower mesh and tiles
|
||||||
local top_drawtype, bottom_drawtype
|
local top_drawtype, bottom_drawtype
|
||||||
|
local alpha = nil
|
||||||
local bottom_tiles = {}
|
local bottom_tiles = {}
|
||||||
if not mesh then
|
if not mesh then
|
||||||
top_drawtype = "plantlike"
|
top_drawtype = "plantlike"
|
||||||
|
@ -277,6 +280,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
||||||
top_drawtype = "airlike"
|
top_drawtype = "airlike"
|
||||||
bottom_drawtype = "mesh"
|
bottom_drawtype = "mesh"
|
||||||
bottom_tiles = bottom_img
|
bottom_tiles = bottom_img
|
||||||
|
alpha = "clip"
|
||||||
end
|
end
|
||||||
-- Bottom
|
-- Bottom
|
||||||
minetest.register_node("mcl_flowers:"..name, {
|
minetest.register_node("mcl_flowers:"..name, {
|
||||||
|
@ -298,6 +302,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
||||||
_mcl_shears_drop = shears_drop,
|
_mcl_shears_drop = shears_drop,
|
||||||
_mcl_fortune_drop = fortune_drop,
|
_mcl_fortune_drop = fortune_drop,
|
||||||
node_placement_prediction = "",
|
node_placement_prediction = "",
|
||||||
|
use_texture_alpha = alpha,
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -selbox_radius, -0.5, -selbox_radius, selbox_radius, 0.5, selbox_radius },
|
fixed = { -selbox_radius, -0.5, -selbox_radius, selbox_radius, 0.5, selbox_radius },
|
||||||
|
@ -397,6 +402,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
||||||
palette = palette,
|
palette = palette,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
buildable_to = false,
|
buildable_to = false,
|
||||||
|
use_texture_alpha = alpha,
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = { -selbox_radius, -0.5, -selbox_radius, selbox_radius, selbox_top_height, selbox_radius },
|
fixed = { -selbox_radius, -0.5, -selbox_radius, selbox_radius, selbox_top_height, selbox_radius },
|
||||||
|
|
|
@ -466,9 +466,9 @@ function mcl_furnaces.hoppers_on_try_push(pos, hop_pos, hop_inv, hop_list)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
if math.abs(pos.y - hop_pos.y) > math.abs(pos.x - hop_pos.x) and math.abs(pos.y - hop_pos.y) > math.abs(pos.z - hop_pos.z) then
|
if math.abs(pos.y - hop_pos.y) > math.abs(pos.x - hop_pos.x) and math.abs(pos.y - hop_pos.y) > math.abs(pos.z - hop_pos.z) then
|
||||||
return inv, "src", mcl_util.select_stack(hop_inv, hop_list, inv, "src")
|
return inv, "src", mcl_util.select_stack(hop_inv, hop_list, inv, "src", nil, 1)
|
||||||
else
|
else
|
||||||
return inv, "fuel", mcl_util.select_stack(hop_inv, hop_list, inv, "fuel", mcl_util.is_fuel)
|
return inv, "fuel", mcl_util.select_stack(hop_inv, hop_list, inv, "fuel", mcl_util.is_fuel, 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,68 @@ local mcl_hoppers_formspec = table.concat({
|
||||||
"listring[current_player;main]",
|
"listring[current_player;main]",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local function straight_hopper_act(pos, node, active_object_count, active_count_wider)
|
||||||
|
local timer = minetest.get_node_timer(pos)
|
||||||
|
if timer:is_started() then
|
||||||
|
--Pause if already recived item this tick
|
||||||
|
return
|
||||||
|
end
|
||||||
|
timer:start(1.0)
|
||||||
|
|
||||||
|
-- Move from internal inventory to dst first
|
||||||
|
local dst_pos = vector.offset(pos, 0, -1, 0)
|
||||||
|
local dst_node = minetest.get_node(dst_pos)
|
||||||
|
local dst_name = dst_node.name
|
||||||
|
local dst_def = minetest.registered_nodes[dst_name]
|
||||||
|
|
||||||
|
if dst_def and dst_def._mcl_hopper_act then
|
||||||
|
dst_def._mcl_hopper_act( dst_pos, dst_node, active_object_count, active_count_wider )
|
||||||
|
end
|
||||||
|
|
||||||
|
mcl_util.hopper_push(pos, dst_pos)
|
||||||
|
local src_pos = vector.offset(pos, 0, 1, 0)
|
||||||
|
mcl_util.hopper_pull(pos, src_pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function bent_hopper_act(pos, node, active_object_count, active_object_count_wider)
|
||||||
|
local timer = minetest.get_node_timer(pos)
|
||||||
|
if timer:is_started() then
|
||||||
|
--Pause if already recived item this tick
|
||||||
|
return
|
||||||
|
end
|
||||||
|
timer:start(1.0)
|
||||||
|
|
||||||
|
-- Check if we are empty
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
local empty = inv:is_empty("main")
|
||||||
|
|
||||||
|
-- Determine to which side the hopper is facing, get nodes
|
||||||
|
local face = minetest.get_node(pos).param2
|
||||||
|
local dst_pos = {}
|
||||||
|
if face == 0 then
|
||||||
|
dst_pos = vector.offset(pos, -1, 0, 0)
|
||||||
|
elseif face == 1 then
|
||||||
|
dst_pos = vector.offset(pos, 0, 0, 1)
|
||||||
|
elseif face == 2 then
|
||||||
|
dst_pos = vector.offset(pos, 1, 0, 0)
|
||||||
|
elseif face == 3 then
|
||||||
|
dst_pos = vector.offset(pos, 0, 0, -1)
|
||||||
|
end
|
||||||
|
local dst_node = minetest.get_node(dst_pos)
|
||||||
|
local dst_name = dst_node.name
|
||||||
|
local dst_def = minetest.registered_nodes[dst_name]
|
||||||
|
if dst_def and dst_def._mcl_hopper_act then
|
||||||
|
dst_def._mcl_hopper_act( dst_pos, dst_node, active_object_count, active_object_count_wider )
|
||||||
|
end
|
||||||
|
if not empty then
|
||||||
|
mcl_util.hopper_push(pos, dst_pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
local src_pos = vector.offset(pos, 0, 1, 0)
|
||||||
|
mcl_util.hopper_pull(pos, src_pos)
|
||||||
|
end
|
||||||
|
|
||||||
-- Downwards hopper (base definition)
|
-- Downwards hopper (base definition)
|
||||||
|
|
||||||
---@type node_definition
|
---@type node_definition
|
||||||
|
@ -206,6 +268,7 @@ def_hopper_enabled.mesecons = {
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
def_hopper_enabled._mcl_hopper_act = straight_hopper_act
|
||||||
|
|
||||||
minetest.register_node("mcl_hoppers:hopper", def_hopper_enabled)
|
minetest.register_node("mcl_hoppers:hopper", def_hopper_enabled)
|
||||||
|
|
||||||
|
@ -355,6 +418,7 @@ def_hopper_side_enabled.mesecons = {
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
def_hopper_side_enabled._mcl_hopper_act = bent_hopper_act
|
||||||
minetest.register_node("mcl_hoppers:hopper_side", def_hopper_side_enabled)
|
minetest.register_node("mcl_hoppers:hopper_side", def_hopper_side_enabled)
|
||||||
|
|
||||||
---@type node_definition
|
---@type node_definition
|
||||||
|
@ -559,24 +623,7 @@ minetest.register_abm({
|
||||||
neighbors = { "group:container" },
|
neighbors = { "group:container" },
|
||||||
interval = 1.0,
|
interval = 1.0,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = straight_hopper_act,
|
||||||
if minetest.get_node_timer(pos):is_started() then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Move from internal inventory to dst first
|
|
||||||
local dst_pos = vector.offset(pos, 0, -1, 0)
|
|
||||||
local pushed = mcl_util.hopper_push(pos, dst_pos)
|
|
||||||
|
|
||||||
local src_pos = vector.offset(pos, 0, 1, 0)
|
|
||||||
mcl_util.hopper_pull(pos, src_pos)
|
|
||||||
|
|
||||||
local dst_node = minetest.get_node(dst_pos)
|
|
||||||
if pushed and (dst_node.name == "mcl_hoppers:hopper" or dst_node.name == "mcl_hoppers:hopper_side") then
|
|
||||||
--Pause destination hopper
|
|
||||||
minetest.get_node_timer(dst_pos):start(1.0)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Register push/pull for "bent" hopper
|
-- Register push/pull for "bent" hopper
|
||||||
|
@ -586,35 +633,7 @@ minetest.register_abm({
|
||||||
neighbors = { "group:container" },
|
neighbors = { "group:container" },
|
||||||
interval = 1.0,
|
interval = 1.0,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = bent_hopper_act,
|
||||||
if minetest.get_node_timer(pos):is_started() then
|
|
||||||
--Pause if already recived item this tick
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Determine to which side the hopper is facing, get nodes
|
|
||||||
local face = minetest.get_node(pos).param2
|
|
||||||
local dst_pos = {}
|
|
||||||
if face == 0 then
|
|
||||||
dst_pos = vector.offset(pos, -1, 0, 0)
|
|
||||||
elseif face == 1 then
|
|
||||||
dst_pos = vector.offset(pos, 0, 0, 1)
|
|
||||||
elseif face == 2 then
|
|
||||||
dst_pos = vector.offset(pos, 1, 0, 0)
|
|
||||||
elseif face == 3 then
|
|
||||||
dst_pos = vector.offset(pos, 0, 0, -1)
|
|
||||||
end
|
|
||||||
local pushed = mcl_util.hopper_push(pos, dst_pos)
|
|
||||||
|
|
||||||
local src_pos = vector.offset(pos, 0, 1, 0)
|
|
||||||
mcl_util.hopper_pull(pos, src_pos)
|
|
||||||
|
|
||||||
local dst_node = minetest.get_node(dst_pos)
|
|
||||||
if pushed and (dst_node.name == "mcl_hoppers:hopper" or dst_node.name == "mcl_hoppers:hopper_side") then
|
|
||||||
--Pause destination hopper
|
|
||||||
minetest.get_node_timer(dst_pos):start(1.0)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
|
|
@ -76,8 +76,7 @@ local lectern_def = {
|
||||||
if wdir == 0 then
|
if wdir == 0 then
|
||||||
return itemstack
|
return itemstack
|
||||||
-- IE., no Hanging Lecterns for you!
|
-- IE., no Hanging Lecterns for you!
|
||||||
end
|
else
|
||||||
if wdir == 1 then
|
|
||||||
-- (only make standing nodes...)
|
-- (only make standing nodes...)
|
||||||
-- Determine the rotation based on player's yaw
|
-- Determine the rotation based on player's yaw
|
||||||
local yaw = pi * 2 - placer:get_look_horizontal()
|
local yaw = pi * 2 - placer:get_look_horizontal()
|
||||||
|
@ -136,5 +135,11 @@ minetest.register_craft({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mcl_lectern:lectern",
|
||||||
|
burntime = 15,
|
||||||
|
})
|
||||||
|
|
||||||
-- Base Aliases.
|
-- Base Aliases.
|
||||||
minetest.register_alias("lectern", "mcl_lectern:lectern")
|
minetest.register_alias("lectern", "mcl_lectern:lectern")
|
||||||
|
|
|
@ -26,3 +26,9 @@ minetest.register_craft({
|
||||||
{ "group:wood", "group:wood", "" },
|
{ "group:wood", "group:wood", "" },
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mcl_loom:loom",
|
||||||
|
burntime = 15,
|
||||||
|
})
|
||||||
|
|
|
@ -426,6 +426,12 @@ minetest.register_craft({
|
||||||
burntime = 15,
|
burntime = 15,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mcl_mangrove:mangrove_roots",
|
||||||
|
burntime = 15,
|
||||||
|
})
|
||||||
|
|
||||||
local adjacents = {
|
local adjacents = {
|
||||||
vector.new(1,0,0),
|
vector.new(1,0,0),
|
||||||
vector.new(-1,0,0),
|
vector.new(-1,0,0),
|
||||||
|
|
|
@ -257,6 +257,12 @@ minetest.register_craft({
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mcl_smithing_table:table",
|
||||||
|
burntime = 15,
|
||||||
|
})
|
||||||
|
|
||||||
-- this is the exact same as mcl_smithing_table.upgrade_item_netherite , in case something relies on the old function
|
-- this is the exact same as mcl_smithing_table.upgrade_item_netherite , in case something relies on the old function
|
||||||
function mcl_smithing_table.upgrade_item(itemstack)
|
function mcl_smithing_table.upgrade_item(itemstack)
|
||||||
return mcl_smithing_table.upgrade_item_netherite(itemstack)
|
return mcl_smithing_table.upgrade_item_netherite(itemstack)
|
||||||
|
|
|
@ -57,6 +57,7 @@ end
|
||||||
|
|
||||||
-- Variables for each player, to handle delayed eating
|
-- Variables for each player, to handle delayed eating
|
||||||
mcl_hunger.eat_internal = {}
|
mcl_hunger.eat_internal = {}
|
||||||
|
mcl_hunger.eat_anim_hud = {}
|
||||||
|
|
||||||
-- Set per player internal variables for delayed eating
|
-- Set per player internal variables for delayed eating
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
@ -81,6 +82,7 @@ minetest.register_on_joinplayer(function(player)
|
||||||
_custom_do_delayed = false, -- If true, then will execute only _custom_wrapper after holding RMB or LMB within a delay specified by mcl_hunger.EATING_DELAY (Use to bypass minetest.do_item_eat entirely)
|
_custom_do_delayed = false, -- If true, then will execute only _custom_wrapper after holding RMB or LMB within a delay specified by mcl_hunger.EATING_DELAY (Use to bypass minetest.do_item_eat entirely)
|
||||||
}
|
}
|
||||||
playerphysics.remove_physics_factor(player, "speed", "mcl_hunger:eating_speed")
|
playerphysics.remove_physics_factor(player, "speed", "mcl_hunger:eating_speed")
|
||||||
|
player:hud_set_flags({wielditem = true})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Clear when player leaves
|
-- Clear when player leaves
|
||||||
|
@ -88,6 +90,7 @@ minetest.register_on_leaveplayer(function(player)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
|
|
||||||
mcl_hunger.eat_internal[name] = nil
|
mcl_hunger.eat_internal[name] = nil
|
||||||
|
mcl_hunger.eat_anim_hud[name] = nil
|
||||||
end)
|
end)
|
||||||
|
|
||||||
dofile(modpath.."/api.lua")
|
dofile(modpath.."/api.lua")
|
||||||
|
@ -120,11 +123,21 @@ mcl_hunger.poison_hunger = {} -- food poisoning, increasing hunger
|
||||||
|
|
||||||
-- HUD
|
-- HUD
|
||||||
local function init_hud(player)
|
local function init_hud(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
hb.init_hudbar(player, "hunger", mcl_hunger.get_hunger(player))
|
hb.init_hudbar(player, "hunger", mcl_hunger.get_hunger(player))
|
||||||
if mcl_hunger.debug then
|
if mcl_hunger.debug then
|
||||||
hb.init_hudbar(player, "saturation", mcl_hunger.get_saturation(player), mcl_hunger.get_hunger(player))
|
hb.init_hudbar(player, "saturation", mcl_hunger.get_saturation(player), mcl_hunger.get_hunger(player))
|
||||||
hb.init_hudbar(player, "exhaustion", mcl_hunger.get_exhaustion(player))
|
hb.init_hudbar(player, "exhaustion", mcl_hunger.get_exhaustion(player))
|
||||||
end
|
end
|
||||||
|
mcl_hunger.eat_anim_hud[name] = player:hud_add({
|
||||||
|
hud_elem_type = "image",
|
||||||
|
text = "blank.png",
|
||||||
|
position = {x = 0.5, y = 1},
|
||||||
|
scale = {x = -25, y = -45},
|
||||||
|
alignment = {x = 0, y = -1},
|
||||||
|
offset = {x = 0, y = -30},
|
||||||
|
z_index = -200,
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
-- HUD updating functions for Debug Mode. No-op if not in Debug Mode
|
-- HUD updating functions for Debug Mode. No-op if not in Debug Mode
|
||||||
|
@ -195,6 +208,8 @@ local eat_effects_cooldown = {}
|
||||||
|
|
||||||
local function clear_eat_internal_and_timers(player, player_name)
|
local function clear_eat_internal_and_timers(player, player_name)
|
||||||
playerphysics.remove_physics_factor(player, "speed", "mcl_hunger:eating_speed")
|
playerphysics.remove_physics_factor(player, "speed", "mcl_hunger:eating_speed")
|
||||||
|
player:hud_set_flags({wielditem = true})
|
||||||
|
player:hud_change(mcl_hunger.eat_anim_hud[player_name], "text", "blank.png")
|
||||||
mcl_hunger.eat_internal[player_name] = {
|
mcl_hunger.eat_internal[player_name] = {
|
||||||
is_eating = false,
|
is_eating = false,
|
||||||
is_eating_no_padding = false,
|
is_eating_no_padding = false,
|
||||||
|
@ -299,13 +314,20 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
playerphysics.add_physics_factor(player, "speed", "mcl_hunger:eating_speed", mcl_hunger.EATING_WALK_SPEED)
|
playerphysics.add_physics_factor(player, "speed", "mcl_hunger:eating_speed", mcl_hunger.EATING_WALK_SPEED)
|
||||||
|
|
||||||
|
player:hud_set_flags({wielditem = false})
|
||||||
|
local itemstackdef = current_itemstack:get_definition()
|
||||||
|
local wield_image = itemstackdef.wield_image
|
||||||
|
if not wield_image or wield_image == "" then wield_image = itemstackdef.inventory_image end
|
||||||
|
player:hud_change(mcl_hunger.eat_anim_hud[player_name], "text", wield_image)
|
||||||
|
player:hud_change(mcl_hunger.eat_anim_hud[player_name], "offset", {x = 0, y = 50*math.sin(10*eat_tick_timers[player]+math.random())-50})
|
||||||
|
|
||||||
if eat_effects_cooldown[player] > 0.2 then
|
if eat_effects_cooldown[player] > 0.2 then
|
||||||
eat_effects_cooldown[player] = 0
|
eat_effects_cooldown[player] = 0
|
||||||
|
|
||||||
if not mcl_hunger.eat_internal[player_name].user then
|
if not mcl_hunger.eat_internal[player_name].user then
|
||||||
mcl_hunger.eat_internal[player_name].user = player
|
mcl_hunger.eat_internal[player_name].user = player
|
||||||
end
|
end
|
||||||
|
|
||||||
if not mcl_hunger.eat_internal[player_name].itemname then
|
if not mcl_hunger.eat_internal[player_name].itemname then
|
||||||
mcl_hunger.eat_internal[player_name].itemname = current_itemstack:get_name()
|
mcl_hunger.eat_internal[player_name].itemname = current_itemstack:get_name()
|
||||||
end
|
end
|
||||||
|
@ -357,6 +379,8 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
elseif eat_start_timers[player] and eat_start_timers[player] > 0.2 then
|
elseif eat_start_timers[player] and eat_start_timers[player] > 0.2 then
|
||||||
playerphysics.remove_physics_factor(player, "speed", "mcl_hunger:eating_speed")
|
playerphysics.remove_physics_factor(player, "speed", "mcl_hunger:eating_speed")
|
||||||
|
player:hud_set_flags({wielditem = true})
|
||||||
|
player:hud_change(mcl_hunger.eat_anim_hud[player_name], "text", "blank.png")
|
||||||
mcl_hunger.eat_internal[player_name].is_eating_no_padding = false
|
mcl_hunger.eat_internal[player_name].is_eating_no_padding = false
|
||||||
|
|
||||||
elseif eat_start_timers[player] and eat_start_timers[player] > mcl_hunger.EATING_TOUCHSCREEN_DELAY_PADDING then
|
elseif eat_start_timers[player] and eat_start_timers[player] > mcl_hunger.EATING_TOUCHSCREEN_DELAY_PADDING then
|
||||||
|
|
|
@ -161,8 +161,6 @@ function mcl_skins.update_player_skin(player)
|
||||||
end
|
end
|
||||||
|
|
||||||
local skin = mcl_skins.player_skins[player]
|
local skin = mcl_skins.player_skins[player]
|
||||||
if not skin then return end
|
|
||||||
|
|
||||||
local skinval = mcl_skins.compile_skin(skin)
|
local skinval = mcl_skins.compile_skin(skin)
|
||||||
|
|
||||||
if not skin.cape then skin.cape = "blank.png" end
|
if not skin.cape then skin.cape = "blank.png" end
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 265 B After Width: | Height: | Size: 261 B |
|
@ -1151,15 +1151,28 @@ Source path,Source file,Target file,xs,ys,xl,yl,xt,yt,Blacklisted?
|
||||||
/assets/minecraft/textures/block,redstone_dust_line1.png,redstone_redstone_dust_line1.png,,,,,,,
|
/assets/minecraft/textures/block,redstone_dust_line1.png,redstone_redstone_dust_line1.png,,,,,,,
|
||||||
/assets/minecraft/textures/block,attached_melon_stem.png,mcl_farming_melon_stem_connected.png,,,,,,,
|
/assets/minecraft/textures/block,attached_melon_stem.png,mcl_farming_melon_stem_connected.png,,,,,,,
|
||||||
/assets/minecraft/textures/block,melon_stem.png,mcl_farming_melon_stem_disconnected.png,,,,,,,
|
/assets/minecraft/textures/block,melon_stem.png,mcl_farming_melon_stem_disconnected.png,,,,,,,
|
||||||
/assets/minecraft/textures/entity/signs,acacia.png,mcl_signs_sign_acacia.png,,,,,,,
|
/assets/minecraft/textures/entity/signs,acacia.png,mcl_signs_acacia_sign.png,,,,,,,
|
||||||
/assets/minecraft/textures/entity/signs,bamboo.png,mcl_bamboo_bamboo_sign.png,,,,,,,
|
/assets/minecraft/textures/entity/signs,bamboo.png,mcl_bamboo_bamboo_sign.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/entity/signs,birch.png,mcl_signs_birch_sign.png,,,,,,,
|
||||||
/assets/minecraft/textures/entity/signs,cherry.png,mcl_cherry_blossom_sign.png,,,,,,,
|
/assets/minecraft/textures/entity/signs,cherry.png,mcl_cherry_blossom_sign.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/entity/signs,crimson.png,mcl_signs_crimson_sign.png,,,,,,,
|
||||||
/assets/minecraft/textures/entity/signs,dark_oak.png,mcl_signs_sign_dark.png,,,,,,,
|
/assets/minecraft/textures/entity/signs,dark_oak.png,mcl_signs_sign_dark.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/entity/signs,jungle.png,mcl_signs_jungle_sign.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/entity/signs,mangrove.png,mcl_signs_mangrove_sign.png,,,,,,,
|
||||||
/assets/minecraft/textures/entity/signs,oak.png,mcl_signs_sign.png,,,,,,,
|
/assets/minecraft/textures/entity/signs,oak.png,mcl_signs_sign.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/entity/signs,spruce.png,mcl_signs_spruce_sign.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/entity/signs,warped.png,mcl_signs_warped_sign.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/item,acacia_sign.png,mcl_signs_acacia_sign_inv.png,,,,,,,
|
||||||
/assets/minecraft/textures/item,bamboo_sign.png,mcl_bamboo_bamboo_sign_wield.png,,,,,,,
|
/assets/minecraft/textures/item,bamboo_sign.png,mcl_bamboo_bamboo_sign_wield.png,,,,,,,
|
||||||
/assets/minecraft/textures/item,cherry_sign.png,mcl_cherry_blossom_sign_inv.png,,,,,,,
|
/assets/minecraft/textures/item,birch_sign.png,mcl_signs_birch_sign_inv.png,,,,,,,
|
||||||
/assets/minecraft/textures/item,dark_oak_sign.png,mcl_signs_default_sign_dark.png,,,,,,,
|
/assets/minecraft/textures/item,cherry_sign.png,mcl_cherry_blossom_inv.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/item,crimson_sign.png,mcl_signs_crimson_sign_inv.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/item,dark_oak_sign.png,mcl_signs_default_dark.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/item,jungle_sign.png,mcl_signs_jungle_sign_inv.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/item,mangrove_sign.png,mcl_signs_mangrove_sign_inv.png,,,,,,,
|
||||||
/assets/minecraft/textures/item,oak_sign.png,mcl_signs_default_sign.png,,,,,,,
|
/assets/minecraft/textures/item,oak_sign.png,mcl_signs_default_sign.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/item,spruce_sign.png,mcl_signs_spruce_sign_inv.png,,,,,,,
|
||||||
|
/assets/minecraft/textures/item,warped_sign.png,mcl_signs_warped_sign_inv.png,,,,,,,
|
||||||
/assets/minecraft/textures/entity,banner_base.png,mcl_banners_banner_base.png,,,,,,,
|
/assets/minecraft/textures/entity,banner_base.png,mcl_banners_banner_base.png,,,,,,,
|
||||||
/assets/minecraft/textures/entity/banner,base.png,mcl_banners_base.png,,,,,,,
|
/assets/minecraft/textures/entity/banner,base.png,mcl_banners_base.png,,,,,,,
|
||||||
/assets/minecraft/textures/block,nether_portal.png,mcl_portals_portal.png,,,,,,,
|
/assets/minecraft/textures/block,nether_portal.png,mcl_portals_portal.png,,,,,,,
|
||||||
|
|
|
|
@ -122,6 +122,9 @@ def convert_textures(make_texture_pack, dry_run, verbose, base_dir, tex_dir, tem
|
||||||
description_file.write(description)
|
description_file.write(description)
|
||||||
description_file.close()
|
description_file.close()
|
||||||
|
|
||||||
|
# Create override file
|
||||||
|
shutil.copyfile("override.txt", target_dir("/", make_texture_pack, output_dir, output_dir_name, mineclone2_path) + "/override.txt")
|
||||||
|
|
||||||
# Create preview image (screenshot.png)
|
# Create preview image (screenshot.png)
|
||||||
os.system("convert -size 300x200 canvas:transparent "+target_dir("/", make_texture_pack, output_dir, output_dir_name, mineclone2_path) + "/screenshot.png")
|
os.system("convert -size 300x200 canvas:transparent "+target_dir("/", make_texture_pack, output_dir, output_dir_name, mineclone2_path) + "/screenshot.png")
|
||||||
os.system("composite "+base_dir+"/pack.png "+target_dir("/", make_texture_pack, output_dir, output_dir_name, mineclone2_path) + "/screenshot.png -gravity center "+target_dir("/", make_texture_pack, output_dir, output_dir_name, mineclone2_path) + "/screenshot.png")
|
os.system("composite "+base_dir+"/pack.png "+target_dir("/", make_texture_pack, output_dir, output_dir_name, mineclone2_path) + "/screenshot.png -gravity center "+target_dir("/", make_texture_pack, output_dir, output_dir_name, mineclone2_path) + "/screenshot.png")
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
Signs:
|
||||||
|
|
||||||
|
mcl_signs:wall_sign_warped_hyphae_wood inventory mcl_signs_warped_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_warped_hyphae_wood wield mcl_signs_warped_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_warped_hyphae_wood all mcl_signs_warped_sign.png
|
||||||
|
mcl_signs:standing_sign_warped_hyphae_wood all mcl_signs_warped_sign.png
|
||||||
|
mcl_signs:standing_sign22_5_warped_hyphae_wood all mcl_signs_warped_sign.png
|
||||||
|
mcl_signs:standing_sign45_warped_hyphae_wood all mcl_signs_warped_sign.png
|
||||||
|
mcl_signs:standing_sign67_5_warped_hyphae_wood all mcl_signs_warped_sign.png
|
||||||
|
|
||||||
|
mcl_signs:wall_sign_c rimson_hyphae_wood inventory mcl_signs_crimson_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_crimson_hyphae_wood wield mcl_signs_crimson_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_crimson_hyphae_wood all mcl_signs_crimson_sign.png
|
||||||
|
mcl_signs:standing_sign_crimson_hyphae_wood all mcl_signs_crimson_sign.png
|
||||||
|
mcl_signs:standing_sign22_5_crimson_hyphae_wood all mcl_signs_crimson_sign.png
|
||||||
|
mcl_signs:standing_sign45_crimson_hyphae_wood all mcl_signs_crimson_sign.png
|
||||||
|
mcl_signs:standing_sign67_5_crimson_hyphae_wood all mcl_signs_crimson_sign.png
|
||||||
|
|
||||||
|
mcl_signs:wall_sign_acaciawood inventory mcl_signs_acacia_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_acaciawood wield mcl_signs_acacia_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_acaciawood all mcl_signs_acacia_sign.png
|
||||||
|
mcl_signs:standing_sign_acaciawood all mcl_signs_acacia_sign.png
|
||||||
|
mcl_signs:standing_sign22_5_acaciawood all mcl_signs_acacia_sign.png
|
||||||
|
mcl_signs:standing_sign45_acaciawood all mcl_signs_acacia_sign.png
|
||||||
|
mcl_signs:standing_sign67_5_acaciawood all mcl_signs_acacia_sign.png
|
||||||
|
|
||||||
|
mcl_signs:wall_sign_birchwood inventory mcl_signs_birch_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_birchwood wield mcl_signs_birch_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_birchwood all mcl_signs_birch_sign.png
|
||||||
|
mcl_signs:standing_sign_birchwood all mcl_signs_birch_sign.png
|
||||||
|
mcl_signs:standing_sign22_5_birchwood all mcl_signs_birch_sign.png
|
||||||
|
mcl_signs:standing_sign45_birchwood all mcl_signs_birch_sign.png
|
||||||
|
mcl_signs:standing_sign67_5_birchwood all mcl_signs_birch_sign.png
|
||||||
|
|
||||||
|
mcl_signs:wall_sign_junglewood inventory mcl_signs_jungle_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_junglewood wield mcl_signs_jungle_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_junglewood all mcl_signs_jungle_sign.png
|
||||||
|
mcl_signs:standing_sign_junglewood all mcl_signs_jungle_sign.png
|
||||||
|
mcl_signs:standing_sign22_5_junglewood all mcl_signs_jungle_sign.png
|
||||||
|
mcl_signs:standing_sign45_junglewood all mcl_signs_jungle_sign.png
|
||||||
|
mcl_signs:standing_sign67_5_junglewood all mcl_signs_jungle_sign.png
|
||||||
|
|
||||||
|
mcl_signs:wall_sign_mangrove_wood inventory mcl_signs_mangrove_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_mangrove_wood wield mcl_signs_mangrove_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_mangrove_wood all mcl_signs_mangrove_sign.png
|
||||||
|
mcl_signs:standing_sign_mangrove_wood all mcl_signs_mangrove_sign.png
|
||||||
|
mcl_signs:standing_sign22_5_mangrove_wood all mcl_signs_mangrove_sign.png
|
||||||
|
mcl_signs:standing_sign45_mangrove_wood all mcl_signs_mangrove_sign.png
|
||||||
|
mcl_signs:standing_sign67_5_mangrove_wood all mcl_signs_mangrove_sign.png
|
||||||
|
|
||||||
|
mcl_signs:wall_sign_sprucewood inventory mcl_signs_spruce_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_sprucewood wield mcl_signs_spruce_sign_inv.png
|
||||||
|
mcl_signs:wall_sign_sprucewood all mcl_signs_spruce_sign.png
|
||||||
|
mcl_signs:standing_sign_sprucewood all mcl_signs_spruce_sign.png
|
||||||
|
mcl_signs:standing_sign22_5_sprucewood all mcl_signs_spruce_sign.png
|
||||||
|
mcl_signs:standing_sign45_sprucewood all mcl_signs_spruce_sign.png
|
||||||
|
mcl_signs:standing_sign67_5_sprucewood all mcl_signs_spruce_sign.png
|
Loading…
Reference in New Issue