1
0
Fork 0

Compare commits

..

31 Commits

Author SHA1 Message Date
nixnoxus 760fe1aa68 more items usable to smelt (#4184)
- group:bee_nest
- group:beehive
- mcl_cartography_table:cartography_table
- mcl_core:deadbush
- mcl_fletching_table:fletching_table
- mcl_lectern:lectern
- mcl_loom:loom
- mcl_mangrove:mangrove_roots
- mcl_smithing_table:table

Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4184
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-authored-by: nixnoxus <nixnoxus@web.de>
Co-committed-by: nixnoxus <nixnoxus@web.de>
2024-04-30 14:26:10 +00:00
Eliy21 f78ad93fd3 Make destroying boats with punch easier (#4159)
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4159
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-authored-by: Eliy21 <eliy21@noreply.git.minetest.land>
Co-committed-by: Eliy21 <eliy21@noreply.git.minetest.land>
2024-04-30 14:24:24 +00:00
the-real-herowl d321b166ea Merge pull request 'trading gives the player experience' (#4210) from nixnoxus/MineClone2:add-trading-xp into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4210
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
2024-04-30 10:47:17 +00:00
JoseDouglas26 18342e44c8 Change lectern wdir check to allow placement on node sides (#4263)
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4263
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-authored-by: JoseDouglas26 <josedouglas20002014@gmail.com>
Co-committed-by: JoseDouglas26 <josedouglas20002014@gmail.com>
2024-04-30 10:45:00 +00:00
JoseDouglas26 2430953a81 Set use_texture_alpha for some nodes (#4262)
* Tall flowers with mesh drawtype (sunflower)
* Clovers
* End rod and its colored variants

Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4262
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-authored-by: JoseDouglas26 <josedouglas20002014@gmail.com>
Co-committed-by: JoseDouglas26 <josedouglas20002014@gmail.com>
2024-04-30 10:41:23 +00:00
SmokeyDope 538c206985 Remove stray pixels in leather cap texture (#4256)
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4256
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: SmokeyDope <smokey@tilde.team>
Co-committed-by: SmokeyDope <smokey@tilde.team>
2024-04-29 16:14:46 +00:00
Doods 31facbd902 Texture converter add signs (#4238)
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4238
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Doods <yusufalishabaka@tutanota.com>
Co-committed-by: Doods <yusufalishabaka@tutanota.com>
2024-04-29 15:50:32 +00:00
the-real-herowl 5f70189e08 Don't touch description if tt snippets did nothing (#4264)
This should prevent problems like the ones described in https://git.minetest.land/MineClone2/MineClone2/pulls/4196#issuecomment-77558 or https://git.minetest.land/MineClone2/MineClone2/pulls/4130#issuecomment-77571

Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4264
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2024-04-28 15:04:39 +00:00
the-real-herowl 4e12c6747c Merge pull request 'Fix #4189 - Make hoppers move items if there is space for one item' (#4190) from teknomunk/MineClone2:hopper-changes into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4190
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
2024-04-27 13:51:34 +00:00
the-real-herowl 1d8fc7abac Merge pull request 'Bed Fixes' (#4253) from teknomunk/MineClone2:bed-fixes into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4253
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
2024-04-27 12:35:14 +00:00
teknomunk 09c595c363 Fix two hopper clocks 2024-04-27 08:41:09 +00:00
teknomunk 6fbe60f1ac Fix crash with undefined nodes 2024-04-27 08:41:09 +00:00
teknomunk 3705be24d7 Fix 'Undeclared global variable' warning 2024-04-27 08:41:09 +00:00
teknomunk 681075df5a Correct null -> nil 2024-04-27 08:41:09 +00:00
teknomunk 6ecb304946 make hoppers behave the same say regardless of the order the server processes the nodes by following a chain of hoppers to the end and processing back to the starting node and marking all those nodes as processed 2024-04-27 08:41:09 +00:00
teknomunk 034b0142c6 Make sure the inventory slot has at least the number of items requsted in it before selecting it 2024-04-27 08:41:09 +00:00
teknomunk e02d1c0e27 Update to comply with coding guidelines 2024-04-27 08:41:09 +00:00
teknomunk bdcd89e1bf Modify mcl_util.select_stack to allow specifying the number of items that will be moved, modify hopper on_try_push functions to specify only 1 item will be moved at a time, general cleanup of touched code (reduce indent - 1 place, break filter functions out of function call parameter - 4 places) 2024-04-27 08:41:09 +00:00
teknomunk 62ab68637a Stop beds from dropping as items when players in creative mode dig them 2024-04-27 07:17:24 +00:00
teknomunk 0839f35a12 Add additional bed placing attempts 2024-04-27 10:42:20 +00:00
teknomunk 84d6b593b2 Fix bed duplication bug when destroyed by TNT 2024-04-27 10:42:20 +00:00
the-real-herowl 3bcbb99878 Merge pull request 'The Pull Request that Fixed the Creative Inventory' (#4237) from creative_inv_fixes into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4237
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
2024-04-27 06:19:11 +00:00
the-real-herowl 9e8661ae95 Merge pull request 'Added eating animation' (#4169) from eating_animation into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4169
2024-04-22 01:18:11 +00:00
SOS-Games 4f37c1600f Able to see all mobs in the lookup help menu (#4186)
added a Mobs category that has pages for all mobs

Co-authored-by: SOS-Games <101518564+SOS-Games@users.noreply.github.com>
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4186
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: SOS-Games <gruberscomplete@gmail.com>
Co-committed-by: SOS-Games <gruberscomplete@gmail.com>
2024-04-21 08:16:15 +00:00
MysticTempest 57409973b9 Fix creative inv tabs showing item tooltips. 2024-04-17 16:53:59 +07:00
Mikita Wiśniewski 312ad5b63b Fix creative inventory search not working on Android (fixes #3402) 2024-04-17 16:53:59 +07:00
Mikita Wiśniewski 46ed6a6dda Fix switching items in the creative inventory (fixes #3941) 2024-04-17 16:53:59 +07:00
the-real-herowl e582c3bb97 Improved look on the mobile device
Now the food doesn't cover the full screen on mobile devices...
...at the cost of stretching at ultrawide or portrait aspect ratios.
2024-04-14 08:34:41 +02:00
nixnoxus 9809c627dc trading gives the player experience 2024-03-09 15:06:38 +01:00
the-real-herowl 8d5c9996a2 Centered the eating animation 2024-02-02 04:28:20 +01:00
the-real-herowl 13825763b0 Added eating animation 2024-01-29 04:24:39 +01:00
43 changed files with 533 additions and 145 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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 --

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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 = {}

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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")

View File

@ -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",

View File

@ -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,
}) })

View File

@ -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

View File

@ -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,
})

View File

@ -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,
}) })

View File

@ -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)

View File

@ -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."),

View File

@ -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)"

View File

@ -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,
})

View File

@ -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 },

View File

@ -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

View File

@ -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({

View File

@ -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")

View File

@ -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,
})

View File

@ -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),

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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,,,,,,,

1 Source path Source file Target file xs ys xl yl xt yt Blacklisted?
1151 /assets/minecraft/textures/block redstone_dust_line1.png redstone_redstone_dust_line1.png
1152 /assets/minecraft/textures/block attached_melon_stem.png mcl_farming_melon_stem_connected.png
1153 /assets/minecraft/textures/block melon_stem.png mcl_farming_melon_stem_disconnected.png
1154 /assets/minecraft/textures/entity/signs acacia.png mcl_signs_sign_acacia.png mcl_signs_acacia_sign.png
1155 /assets/minecraft/textures/entity/signs bamboo.png mcl_bamboo_bamboo_sign.png
1156 /assets/minecraft/textures/entity/signs birch.png mcl_signs_birch_sign.png
1157 /assets/minecraft/textures/entity/signs cherry.png mcl_cherry_blossom_sign.png
1158 /assets/minecraft/textures/entity/signs crimson.png mcl_signs_crimson_sign.png
1159 /assets/minecraft/textures/entity/signs dark_oak.png mcl_signs_sign_dark.png
1160 /assets/minecraft/textures/entity/signs jungle.png mcl_signs_jungle_sign.png
1161 /assets/minecraft/textures/entity/signs mangrove.png mcl_signs_mangrove_sign.png
1162 /assets/minecraft/textures/entity/signs oak.png mcl_signs_sign.png
1163 /assets/minecraft/textures/entity/signs spruce.png mcl_signs_spruce_sign.png
1164 /assets/minecraft/textures/entity/signs warped.png mcl_signs_warped_sign.png
1165 /assets/minecraft/textures/item acacia_sign.png mcl_signs_acacia_sign_inv.png
1166 /assets/minecraft/textures/item bamboo_sign.png mcl_bamboo_bamboo_sign_wield.png
1167 /assets/minecraft/textures/item cherry_sign.png birch_sign.png mcl_cherry_blossom_sign_inv.png mcl_signs_birch_sign_inv.png
1168 /assets/minecraft/textures/item dark_oak_sign.png cherry_sign.png mcl_signs_default_sign_dark.png mcl_cherry_blossom_inv.png
1169 /assets/minecraft/textures/item crimson_sign.png mcl_signs_crimson_sign_inv.png
1170 /assets/minecraft/textures/item dark_oak_sign.png mcl_signs_default_dark.png
1171 /assets/minecraft/textures/item jungle_sign.png mcl_signs_jungle_sign_inv.png
1172 /assets/minecraft/textures/item mangrove_sign.png mcl_signs_mangrove_sign_inv.png
1173 /assets/minecraft/textures/item oak_sign.png mcl_signs_default_sign.png
1174 /assets/minecraft/textures/item spruce_sign.png mcl_signs_spruce_sign_inv.png
1175 /assets/minecraft/textures/item warped_sign.png mcl_signs_warped_sign_inv.png
1176 /assets/minecraft/textures/entity banner_base.png mcl_banners_banner_base.png
1177 /assets/minecraft/textures/entity/banner base.png mcl_banners_base.png
1178 /assets/minecraft/textures/block nether_portal.png mcl_portals_portal.png

View File

@ -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")

57
tools/override.txt Normal file
View File

@ -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