1
0
Fork 0

Compare commits

..

23 Commits

Author SHA1 Message Date
Wbjitscool d4c164f4f6 Add better smoke particles 2023-07-05 08:44:02 -06:00
thunder1035 f88a9468e6 Update campfire model and textures 2023-07-03 12:55:37 -06:00
PrairieWind 7706fdf577 Offset smoke a bit 2023-07-03 12:41:53 -06:00
PrairieWind 38a4f13d7c Add changes to campfires from feedback 2023-06-29 20:56:43 -06:00
PrairieWind 7c1fd89ae9 Throw experience points after food is cooked 2023-06-29 20:56:43 -06:00
PrairieWind 2afd532f17 Campfires are unaffected by pistons 2023-06-29 20:56:43 -06:00
PrairieWind ebc4a8871c Players don't take burn damage when they have fire resistance potion in use, or frost walker boots
Entities seem to not burn anymore, and I am not sure why.
2023-06-29 20:56:43 -06:00
PrairieWind c3d2805752 Fix campfire drops to work correctly with creative and silk touch 2023-06-29 20:56:43 -06:00
DinoNuggies4665 dfb2fa81d1 changed line 82 to vector.new(), and refactored setting food wield item (wield_image doesn't matter) 2023-06-29 20:56:43 -06:00
PrairieWind 571d9f69d0 Update campfire rightclick and smothering 2023-06-29 20:56:43 -06:00
DinoNuggies4665 7a0db8967a Food entities don't turn back to mutton when leaving a re-joining now 2023-06-29 20:56:42 -06:00
DinoNuggies4665 6a315b2005 The food is now oriented the right direction when on the cooking on the campfire, and food entities are removed when the campfire is destroyed, still doesn't drop items though 2023-06-29 20:56:42 -06:00
DinoNuggies4665 285862b35b Fixed crash when standing on campfire whilst food is cooking 2023-06-29 20:56:42 -06:00
DinoNuggies4665 ca2ca70537 Made food entities local to evcery campfire, and made one food entity that works for all foods 2023-06-29 20:56:42 -06:00
PrairieWind 8b2b3a2a15 Update ignition, smothering, and campfire inventory drops
Bonus fix for grass path creation sound traveling across the entire server
2023-06-29 20:56:42 -06:00
DinoNuggies4665 31df65c0b2 modified: mods/ITEMS/mcl_campfires/api.lua
modified:   mods/ITEMS/mcl_fishing/init.lua
	modified:   mods/ITEMS/mcl_mobitems/init.lua
2023-06-29 20:56:42 -06:00
DinoNuggies4665 05c601d220 A couple of fixes 2023-06-29 20:56:42 -06:00
DinoNuggies4665 30e05d514e Added visible items cooking on the fire 2023-06-29 20:56:42 -06:00
DinoNuggies4665 5d970af1b0 modified: mods/ITEMS/mcl_campfires/mod.conf 2023-06-29 20:56:42 -06:00
DinoNuggies4665 e1e97b5d45 modified: mods/ITEMS/mcl_campfires/api.lua
modified:   mods/ITEMS/mcl_mobitems/init.lua
2023-06-29 20:56:42 -06:00
DinoNuggies4665 9d147e2783 Added visible items cooking on the fire 2023-06-29 20:56:42 -06:00
PrairieWind 1908602a9e Campfires make big smoke
Smells like carcenogens, yum
2023-06-29 20:56:42 -06:00
PrairieWind 5e3f820d77 Make campfires cook items 2023-06-29 20:56:41 -06:00
60 changed files with 5519 additions and 1116 deletions

View File

@ -27,7 +27,6 @@
* jordan4ibanez
* iliekprogrammar
* kabou
* kay27
* Faerraven / Michieal
* MysticTempest
* NO11
@ -71,6 +70,7 @@
* erlehmann
* E
* n_to
* kay27
* debiankaios
* Gustavo6046 / wallabra
* CableGuy67
@ -111,7 +111,6 @@
* uqers
* Niterux
* appgurueu
* seventeenthShulker
## Music
* Jordach for the jukebox music compilation from Big Freaking Dig

View File

@ -79,14 +79,12 @@ The MineClone2 repository is hosted at Mesehub. To contribute or report issues,
* Mesehub: <https://git.minetest.land/MineClone2/MineClone2>
* Discord: <https://discord.gg/xE4z8EEpDC>
* YouTube: <https://www.youtube.com/channel/UClI_YcsXMF3KNeJtoBfnk9A>
* IRC: <https://web.libera.chat/#mineclone2>
* Matrix: <https://app.element.io/#/room/#mc2:matrix.org>
* Reddit: <https://www.reddit.com/r/MineClone2/>
* Minetest forums: <https://forum.minetest.net/viewtopic.php?f=50&t=16407>
* ContentDB: <https://content.minetest.net/packages/wuzzy/mineclone2/>
* OpenCollective: <https://opencollective.com/mineclone2>
* Mastodon: <https://fosstodon.org/@MineClone2>
* Lemmy: <https://lemmy.world/c/mineclone2>
* Matrix space: <https://app.element.io/#/room/#mcl2:matrix.org>
* Minetest forums: <https://forum.minetest.net/viewtopic.php?f=50&t=16407>
* Reddit: <https://www.reddit.com/r/MineClone2/>
* IRC (barely used): <https://web.libera.chat/#mineclone2>
## Target
- Create a stable, moddable, free/libre game based on Minecraft

View File

@ -71,13 +71,5 @@ Note: If you have to do more than 1 hotfix release, can do it on the same releas
##### Inform people
* Upload video to YouTube
* Add a comment to the forum post with the release number and change log. Maintainer will update main post with code link.
* Add a Discord announcement post and @everyone with link to video, forum post and release notes.
* Share the news on reddit + Lemmy. Good subs to share with:
* r/linux_gaming
* r/opensourcegames
* r/opensource
* r/freesoftware
* r/linuxmasterrace
* r/MineClone2
* Add a comment to the forum post with the release number and what is involved, and maintainer will update main post.
* Add a comment in Discord announcement

View File

@ -1,4 +1,4 @@
title = MineClone 2
description = A survival sandbox game. Survive, gather, hunt, build, explore, and do much more.
disallowed_mapgens = v6
version=0.85.0-SNAPSHOT
version=0.84.0-SNAPSHOT

View File

@ -96,8 +96,8 @@ function mcl_damage.finish_reason(mcl_reason)
end
function mcl_damage.from_mt(mt_reason)
if mt_reason._mcl_cached_reason then
return mt_reason._mcl_cached_reason
if mt_reason._mcl_chached_reason then
return mt_reason._mcl_chached_reason
end
local mcl_reason

View File

@ -351,7 +351,7 @@ local professions = {
leatherworker = {
name = N("Leatherworker"),
texture = "mobs_mc_villager_leatherworker.png",
jobsite = "group:cauldron",
jobsite = "mcl_cauldrons:cauldron",
trades = {
{
{ { "mcl_mobitems:leather", 9, 12 }, E1 },
@ -1008,15 +1008,7 @@ end
----- JOBSITE LOGIC
local function get_profession_by_jobsite(js)
for k,v in pairs(professions) do
if v.jobsite == js then
return k
-- Catch Nitwit doesn't have a jobsite
elseif v.jobsite and v.jobsite:find("^group:") then
local group = v.jobsite:gsub("^group:", "")
if minetest.get_item_group(js, group) > 0 then
return k
end
end
if v.jobsite == js then return k end
end
end

View File

@ -53,8 +53,8 @@ Range: 4=Range: 4
Rating @1=Classificação @1
# @1 is minimal rating, @2 is maximum rating
Rating @1-@2=Classificação @1-@2
The fall damage on this block is increased by @1%.=O dano por queda nesse bloco é aumentado em @1%.
The fall damage on this block is reduced by @1%.=O dano por queda nesse bloco é reduzido em @1%.
The fall damage on this block is increased by @1%.=O dano por queda nesse bloco é aumentado em @ 1%.
The fall damage on this block is reduced by @1%.=O dano por queda nesse bloco é reduzido em @ 1%.
This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.=Esse bloco permite que a luz se propague com uma pequena perda de brilho, e a luz solar pode até passar sem perdas.
This block allows light to propagate with a small loss of brightness.=Esse bloco permite que a luz se propague com uma pequena perda de brilho.
This block allows sunlight to propagate without loss in brightness.=Esse bloco permite que a luz solar se propague sem perda de brilho.
@ -78,7 +78,7 @@ This block connects to this block: @1.=Esse bloco se conecta a esse bloco: @1.
This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Esse bloco diminui a sua respiração e causa um dano por afogamento de @1 ponto de vida a cada 2 segundos.
This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Esse bloco diminui a sua respiração e causa um dano por afogamento de @1 pontos de vida a cada 2 segundos.
This block is a light source with a light level of @1.=Esse bloco é uma fonte de luz com um nível de luz de @1.
This block glows faintly with a light level of @1.=Esse bloco tem um brilho fraco com um nível de luz de @1.
This block glows faintly with a light level of @1.=Esse bloco tem um brilho fraco com um nível de luz de @ 1.
This block is a building block for creating various buildings.=Esse bloco é um bloco de construção para criar vários edifícios.
This block is a liquid with these properties:=Esse bloco é um líquido com as seguintes propriedades:
This block is affected by gravity and can fall.=Esse bloco é afetado pela gravidade e pode cair.
@ -123,7 +123,7 @@ any level=qualquer nível
level 0=nível 0
level 0-@1=nivel 0-@1
unknown=desconhecido
Unknown item (@1)=Item desconhecido (@1)
Unknown item (@1)=Item desconhecido
• @1: @2=
• @1: @2 HP=
• @1: @2, @3=

View File

@ -0,0 +1 @@
-- This mod has no code and is only a collection of textures.

View File

@ -0,0 +1,3 @@
name = mcl_base_textures
author = Wuzzy
description = Provides core textures needed by Minetest.

View File

@ -29,7 +29,6 @@ return {
"jordan4ibanez",
"iliekprogrammar",
"kabou",
"kay27",
"Faerraven / Michieal",
"MysticTempest",
"NO11",
@ -73,6 +72,7 @@ return {
"erlehmann",
"E",
"n_to",
"kay27",
"debiankaios",
"Gustavo6046 / wallabra",
"CableGuy67",
@ -113,7 +113,6 @@ return {
"uqers",
"Niterux",
"appgurueu",
"seventeenthShulker",
}},
{S("Music"), 0xA60014, {
"Jordach for the jukebox music compilation from Big Freaking Dig",

View File

@ -411,6 +411,10 @@ mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_on")
mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_off")
mesecon.register_mvps_stopper("mcl_banners:hanging_banner")
mesecon.register_mvps_stopper("mcl_banners:standing_banner")
mesecon.register_mvps_stopper("mcl_campfires:campfire")
mesecon.register_mvps_stopper("mcl_campfires:campfire_lit")
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire")
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire_lit")
-- Unmovable by technical restrictions.
-- Open formspec would screw up if node is destroyed (minor problem)
@ -935,6 +939,11 @@ mesecon.register_mvps_unsticky("mcl_farming:wheat_4")
mesecon.register_mvps_unsticky("mcl_farming:wheat_5")
mesecon.register_mvps_unsticky("mcl_farming:wheat_6")
mesecon.register_mvps_unsticky("mcl_farming:wheat_7")
-- Campfires
mesecon.register_mvps_unsticky("mcl_campfires:campfire")
mesecon.register_mvps_unsticky("mcl_campfires:campfire_lit")
mesecon.register_mvps_unsticky("mcl_campfires:soul_campfire")
mesecon.register_mvps_unsticky("mcl_campfires:soul_campfire_lit")
-- Includes node heat when moving them
mesecon.register_on_mvps_move(mesecon.move_hot_nodes)

View File

@ -203,11 +203,11 @@ local bamboo_def = {
if node_above_name ~= "mcl_core:water_source" and node_above_name ~= "mcl_core:lava_source"
and node_above_name ~= "mcl_nether:nether_lava_source" then
local _, position = minetest.item_place(place_item, placer, pointed_thing, fdir)
if position then
if not minetest.is_creative_enabled(placer:get_player_name()) then
itemstack:take_item(1)
end
if rand_height and rand_height > 1 then
if not minetest.is_creative_enabled(placer:get_player_name()) then
itemstack:take_item(1)
end
if rand_height and rand_height > 1 then
if position then
mcl_bamboo.mcl_log("Setting Height Data...")
meta = minetest.get_meta(position)
if meta then

View File

@ -1,45 +0,0 @@
# textdomain: mcl_bamboo
### bamboo_base.lua ###
Bamboo=Бамбук
Bamboo Mosaic Plank=Бамбуковая мозаика
Bamboo Plank=Бамбуковые доски
Stripped Bamboo Block=Блок обтёсанного бамбука
Bamboo Block=Блок бамбука
### bamboo_items.lua ###
A bamboo button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Бамбуковая кнопка - это компонент красного камня, который изготовлен из краснокаменной руды. Ее можно нажать, чтобы обеспечить питание красному камню. При нажатии он приводит в действие соседние компоненты красного камня на 1 секунду.
A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Деревянная нажимная пластина - это компонент красного камня, который снабжает окружающие блоки энергией красного камня, в то время как любой подвижный объект (включая выпавшие предметы, игроков и мобов) стоит на ней.
Bamboo=Бамбук
Bamboo Button=Бамбуковая кнопка
Bamboo Door=Бамбуковая дверь
Bamboo Fence=Бамбуковый забор
Bamboo Fence Gate=Бамбуковая калитка
Bamboo Mosaic Slab=Плита из бамбуковой мозаики
Bamboo Mosaic Stair=Ступеньки из бамбуковой мозаики
Bamboo Plank Slab=Бамбуковая плита из досок
Bamboo Plank Stair=Бамбуковые ступеньки из досок
Bamboo Pressure Plate=Бамбуковая нажимная плита
Bamboo Slab=Бамбуковая плита
Bamboo Stair=Бамбуковые ступеньки
Bamboo Trapdoor=Бамбуковый люк
Double Bamboo Mosaic Slab=Двойная бамбуковая мозаичная плита
Double Bamboo Plank Slab=Двойная бамбуковая дощатая плита
Double Bamboo Slab=Двойная бамбуковая плита
Double Stripped Bamboo Slab=Двойная обтесанная бамбуковая плита
Scaffolding=Строительные леса
Scaffolding (horizontal)=Строительные леса (горизонтальный)
Scaffolding block used to climb up or out across areas.=Блок строительных лесов, используемый для подъема вверх или перемещения по другим участкам.
Stripped Bamboo Slab=Обтесанная бамбуковая плита
Stripped Bamboo Stair=Обтесанные бамбуковые ступеньки
To open or close the trapdoor, rightclick it or send a redstone signal to it.=Чтобы открыть или закрыть люк, щелкните по нему правой кнопкой мыши или отправьте на него сигнал redstone.
Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Деревянные люки - это горизонтальные барьеры, которые можно открывать и закрывать вручную или по сигналу красного камня. Они занимают верхнюю или нижнюю часть блока, в зависимости от того, как они были размещены. Когда они открыты, по ним можно подниматься, как по лестнице.
Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Деревянные двери представляют собой барьеры высотой в 2 блока, которые можно открывать или закрывать вручную и по сигналу redstone.
To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Чтобы открыть или закрыть деревянную дверь, щелкните по ней правой кнопкой мыши или снабдите ее нижнюю половину сигналом красного камня.

View File

@ -1,6 +0,0 @@
# textdomain: mcl_beacons
Beacon=Маяк
Beacon:=Маяк:
Primary Power:=Основной эффект:
Inventory:=Инвентарь:

View File

@ -1,5 +0,0 @@
# textdomain: mcl_beehives
Beehive=Улей
Artificial bee nest.=Искусственное пчелиное гнездо.
Bee Nest=Пчелиное гнездо
A naturally generating block that houses bees and a tasty treat...if you can get it.=Блок естественной выработки, в котором живут пчелы, и вкусное угощение... если вы сможете его достать.

View File

@ -1,29 +0,0 @@
# textdomain: mcl_blackstone
Blackstone=Чернит
Polished Blackstone=Полированный чернит
Chiseled Polished Blackstone=Резной полированный чернит
Polished Blackstone Bricks=Полированный чернокаменный кирпич
Basalt=Базальт
Polished Basalt=Полированный базальт
Blackstone Slab=Чернитная плита
Polished Blackstone Slab=Плита из полированного чернита
Chiseled Polished Blackstone Slab=Резная полированная чернитная плита
Polished Blackstone Brick Slab=Плита из полированно-чернитного кирпича
Blackstone Stair=Чернитные ступеньки
Polished Blackstone Stair=Ступеньки из полированно-чернитного кирпича
Chiseled Polished Blackstone Stair=Резные полированные чернитные ступеньки
Polished Blackstone Brick Stair=Ступеньки из полированно-чернитного кирпича
Quartz Bricks=Кварцевые кирпичи
Soul Torch=Факел душ
Torches are light sources which can be placed at the side or on the top of most blocks.=Факелы - это источники света, которые могут быть размещены сбоку или сверху большинства блоков.
Soul Lantern=Фонарь душ
Soul Soil=Почва душ
Eternal Soul Fire=Пламя душ
Gilded Blackstone=Золочёный чернит
Nether Gold Ore=Незерская золотая руда
Smooth Basalt=Гладкий базальт
Blackstone Wall=Чернитная стена
Double Blackstone Slab=Двойная чернитная плита
Polished Double Blackstone Slab=Полированная двойная чернитная плита
Double Chiseled Polished Blackstone Slab=Двойная резная полированная чернитная плита
Double Polished Blackstone Brick Slab=Двойная плита из полированно-чернитного кирпича

View File

@ -1,6 +1,7 @@
local S = minetest.get_translator(minetest.get_current_modname())
local mod_target = minetest.get_modpath("mcl_target")
local mod_campfire = minetest.get_modpath("mcl_campfires")
local enable_pvp = minetest.settings:get_bool("enable_pvp")
local math = math
@ -395,6 +396,11 @@ function ARROW_ENTITY.on_step(self, dtime)
tnt.ignite(self._stuckin)
end
-- Ignite Campfires
if mod_campfire and mcl_burning.is_burning(self.object) and minetest.get_item_group(snode.name, "campfire") ~= 0 then
mcl_campfires.light_campfire(self._stuckin)
end
-- Activate target
if mod_target and snode.name == "mcl_target:target_off" then
mcl_target.hit(self._stuckin, 1) --10 redstone ticks

View File

@ -105,20 +105,8 @@ local function player_shoot_arrow(wielditem, player, power, damage, is_critical)
local yaw = player:get_look_horizontal()
if has_multishot_enchantment then
-- calculate rotation by 10 degrees 'left' and 'right' of facing direction
local pitch = player:get_look_vertical()
local pitch_c = math.cos(pitch)
local pitch_s = math.sin(pitch)
local yaw_c = math.cos(yaw + math.pi / 2)
local yaw_s = math.sin(yaw + math.pi / 2)
local rot_left = {x = yaw_c * pitch_s * math.pi / 18, y = pitch_c * math.pi / 18, z = yaw_s * pitch_s * math.pi / 18}
local rot_right = {x = - yaw_c * pitch_s * math.pi / 18, y = - pitch_c * math.pi / 18, z = - yaw_s * pitch_s * math.pi / 18}
local dir_left = vector.rotate(dir, rot_left)
local dir_right = vector.rotate(dir, rot_right)
mcl_bows_s.shoot_arrow_crossbow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, {x=dir_left.x, y=dir_left.y, z=dir_left.z}, yaw, player, power, damage, is_critical, player:get_wielded_item(), false)
mcl_bows_s.shoot_arrow_crossbow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, {x=dir_right.x, y=dir_right.y, z=dir_right.z}, yaw, player, power, damage, is_critical, player:get_wielded_item(), false)
mcl_bows_s.shoot_arrow_crossbow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, {x=dir.x, y=dir.y, z=dir.z + .2}, yaw, player, power, damage, is_critical, player:get_wielded_item(), false)
mcl_bows_s.shoot_arrow_crossbow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, {x=dir.x, y=dir.y, z=dir.z - .2}, yaw, player, power, damage, is_critical, player:get_wielded_item(), false)
mcl_bows_s.shoot_arrow_crossbow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, dir, yaw, player, power, damage, is_critical, player:get_wielded_item(), true)
else
mcl_bows_s.shoot_arrow_crossbow(arrow_itemstring, {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, dir, yaw, player, power, damage, is_critical, player:get_wielded_item(), true)

View File

@ -1,7 +1,5 @@
MineClone 2 Campfire API
========================
`mcl_campfires.register_campfire`
---------------------------------
# MineClone 2 Campfire API
## `mcl_campfires.register_campfire`
Used to register campfires.
**Example Usage**
@ -23,4 +21,7 @@ mcl_campfires.register_campfire("mcl_campfires:campfire", {
* lit_logs_texture - texture for the logs of the lit campfire. if not changed, specify mcl_campfires_log.png.
* drops - what items drop when the campfire is mined.
* lightlevel - the level of light the campfire emits.
* damage - amount of damage the campfire deals when the player stands on it.
* damage - amount of damage the campfire deals when the player stands on it.
## Cooking Items
To allow an item to be cooked on the campfire, it must first have a registered cooked variant. To allow placing the item on the campfire to be cooked, add `campfire_cookable = 1` into the item groups list.

View File

@ -1,6 +1,166 @@
local S = minetest.get_translator(minetest.get_current_modname())
mcl_campfires = {}
local COOK_TIME = 30 -- Time it takes to cook food on a campfire.
local food_entity = {nil, nil, nil, nil}
local campfire_spots = {
vector.new(-0.25, -0.04, -0.25),
vector.new( 0.25, -0.04, -0.25),
vector.new( 0.25, -0.04, 0.25),
vector.new(-0.25, -0.04, 0.25),
}
local drop_inventory = mcl_util.drop_items_from_meta_container("main")
local function campfire_drops(pos, digger, drops, nodename)
local wield_item = digger:get_wielded_item()
local silk_touch = mcl_enchanting.has_enchantment(wield_item, "silk_touch")
local is_creative = minetest.is_creative_enabled(digger:get_player_name())
local inv = digger:get_inventory()
if not is_creative then
if silk_touch then
minetest.add_item(pos, nodename)
else
minetest.add_item(pos, drops)
end
elseif is_creative and inv:room_for_item("main", nodename) and not inv:contains_item("main", nodename) then
inv:add_item("main", nodename)
end
end
local function drop_items(pos, node, oldmeta)
local meta = minetest.get_meta(pos)
drop_inventory(pos, node, oldmeta)
local entites = minetest.get_objects_inside_radius(pos, 0.5)
if entites then
for _, food_entity in ipairs(entites) do
if food_entity then
if food_entity:get_luaentity().name == "mcl_campfires:food_entity" then
food_entity:remove()
for i = 1, 4 do
meta:set_string("food_x_"..tostring(i), nil)
meta:set_string("food_y_"..tostring(i), nil)
meta:set_string("food_z_"..tostring(i), nil)
end
end
end
end
end
end
local function on_blast(pos)
local node = minetest.get_node(pos)
drop_items(pos, node)
minetest.remove_node(pos)
end
function mcl_campfires.light_campfire(pos)
local campfire = minetest.get_node(pos)
local name = campfire.name .. "_lit"
minetest.set_node(pos, {name = name, param2 = campfire.param2})
end
-- on_rightclick function to take items that are cookable in a campfire, and put them in the campfire inventory
function mcl_campfires.take_item(pos, node, player, itemstack)
local food_entity = {nil,nil,nil,nil}
local is_creative = minetest.is_creative_enabled(player:get_player_name())
local inv = player:get_inventory()
local campfire_meta = minetest.get_meta(pos)
local campfire_inv = campfire_meta:get_inventory()
local timer = minetest.get_node_timer(pos)
local stack = itemstack:peek_item(1)
if minetest.get_item_group(itemstack:get_name(), "campfire_cookable") ~= 0 then
local cookable = minetest.get_craft_result({method = "cooking", width = 1, items = {itemstack}})
if cookable then
for space = 1, 4 do -- Cycle through spots
local spot = campfire_inv:get_stack("main", space)
if not spot or spot == (ItemStack("") or ItemStack("nil")) then -- Check if the spot is empty or not
if not is_creative then itemstack:take_item(1) end -- Take the item if in creative
campfire_inv:set_stack("main", space, stack) -- Set the inventory itemstack at the empty spot
campfire_meta:set_int("cooktime_"..tostring(space), COOK_TIME) -- Set the cook time meta
food_entity[space] = minetest.add_entity(pos + campfire_spots[space], "mcl_campfires:food_entity") -- Spawn food item on the campfire
local food_luaentity = food_entity[space]:get_luaentity()
food_luaentity.wield_item = campfire_inv:get_stack("main", space):get_name() -- Set the wielditem of the food item to the food on the campfire
food_luaentity.wield_image = "mcl_mobitems_"..string.sub(campfire_inv:get_stack("main", space):get_name(), 14).."_raw.png" -- Set the wield_image to the food item on the campfire
food_entity[space]:set_properties(food_luaentity) -- Apply changes to the food entity
campfire_meta:set_string("food_x_"..tostring(space), tostring(food_entity[space]:get_pos().x))
campfire_meta:set_string("food_y_"..tostring(space), tostring(food_entity[space]:get_pos().y))
campfire_meta:set_string("food_z_"..tostring(space), tostring(food_entity[space]:get_pos().z))
break
end
end
end
timer:start(1) -- Start cook timer
end
end
-- on_timer function to run the cook timer and cook items.
function mcl_campfires.cook_item(pos, elapsed)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local continue = 0
-- Cycle through slots to cook them.
for i = 1, 4 do
local time_r = meta:get_int("cooktime_"..tostring(i))
local item = inv:get_stack("main", i)
local food_entity = nil
local food_x = tonumber(meta:get_string("food_x_"..tostring(i)))
local food_y = tonumber(meta:get_string("food_y_"..tostring(i)))
local food_z = tonumber(meta:get_string("food_z_"..tostring(i)))
if food_x and food_y and food_z then
local entites = minetest.get_objects_inside_radius(vector.new(food_x, food_y, food_z), 0)
if entites then
for _, entity in ipairs(entites) do
if entity then
local luaentity = entity:get_luaentity()
if luaentity then
local name = luaentity.name
if name == "mcl_campfires:food_entity" then
food_entity = entity
food_entity:set_properties({wield_item = inv:get_stack("main", i):get_name()})
end
end
end
end
end
end
if item ~= (ItemStack("") or ItemStack("nil")) then
-- Item hasn't been cooked completely, continue cook timer countdown.
if time_r > 0 then
meta:set_int("cooktime_"..tostring(i), time_r - 1)
-- Item cook timer is up, finish cooking process and drop cooked item.
elseif time_r <= 0 then
local cooked = minetest.get_craft_result({method = "cooking", width = 1, items = {item}})
if cooked then
if food_entity then
food_entity:remove() -- Remove visual food entity
meta:set_string("food_x_"..tostring(i), nil)
meta:set_string("food_y_"..tostring(i), nil)
meta:set_string("food_z_"..tostring(i), nil)
minetest.add_item(pos, cooked.item) -- Drop Cooked Item
-- Throw some Experience Points because why not?
-- Food is cooked, xp is deserved for using this unique cooking method. Take that Minecraft ;)
local dir = vector.divide(minetest.facedir_to_dir(minetest.get_node(pos).param2),-1.95)
mcl_experience.throw_xp(vector.add(pos, dir), 1)
inv:set_stack("main", i, "") -- Clear Inventory
continue = continue + 1 -- Indicate that the slot is clear.
end
end
end
else
continue = continue + 1
end
end
-- Not all slots are empty, continue timer.
if continue ~= 4 then
return true
-- Slots are empty, stop node timer.
else
return false
end
end
function mcl_campfires.register_campfire(name, def)
-- Define Campfire
minetest.register_node(name, {
@ -15,16 +175,13 @@ function mcl_campfires.register_campfire(name, def)
use_texture_alpha = "clip",
groups = { handy=1, axey=1, material_wood=1, not_in_creative_inventory=1, campfire=1, },
paramtype = "light",
paramtype2 = "facedir",
on_rightclick = function (pos, node, player, itemstack, pointed_thing)
if player:get_wielded_item():get_name() == "mcl_fire:flint_and_steel" then
node.name = name.."_lit"
minetest.set_node(pos, node)
end
paramtype2 = "4dir",
_on_ignite = function(player, node)
mcl_campfires.light_campfire(node.under)
return true
end,
drop = def.drops,
_mcl_silk_touch_drop = {name},
mcl_sounds.node_sound_wood_defaults(),
drop = "",
sounds = mcl_sounds.node_sound_wood_defaults(),
selection_box = {
type = 'fixed',
fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top
@ -35,6 +192,9 @@ function mcl_campfires.register_campfire(name, def)
},
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
after_dig_node = function(pos, node, oldmeta, digger)
campfire_drops(pos, digger, def.drops, name.."_lit")
end,
})
--Define Lit Campfire
@ -45,38 +205,64 @@ function mcl_campfires.register_campfire(name, def)
inventory_image = def.inv_texture,
wield_image = def.inv_texture,
drawtype = "mesh",
mesh = "mcl_campfires_campfire_lit.obj",
tiles = {{
name=def.fire_texture,
mesh = "mcl_campfires_campfire.obj",
tiles = {
{name=def.fire_texture,
animation={
type="vertical_frames",
aspect_w=16,
aspect_h=16,
length=2.0
}},
{name=def.lit_logs_texture,
animation={
type="vertical_frames",
aspect_w=16,
aspect_w=32,
aspect_h=16,
length=2.0
}}
},
overlay_tiles = {{
name=def.lit_logs_texture,
animation = {
type = "vertical_frames",
aspect_w = 32,
aspect_h = 16,
length = 2.0,
}},
},
use_texture_alpha = "clip",
groups = { handy=1, axey=1, material_wood=1, campfire=1, lit_campfire=1 },
groups = { handy=1, axey=1, material_wood=1, lit_campfire=1 },
paramtype = "light",
paramtype2 = "facedir",
paramtype2 = "4dir",
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("main", 4)
end,
on_rightclick = function (pos, node, player, itemstack, pointed_thing)
if player:get_wielded_item():get_name():find("shovel") then
node.name = name
minetest.set_node(pos, node)
minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if not inv then inv:set_size("main", 4) end
if minetest.get_item_group(itemstack:get_name(), "shovel") ~= 0 then
local protected = mcl_util.check_position_protection(pos, player)
if not protected then
if not minetest.is_creative_enabled(player:get_player_name()) then
-- Add wear (as if digging a shovely node)
local toolname = itemstack:get_name()
local wear = mcl_autogroup.get_wear(toolname, "shovely")
if wear then
itemstack:add_wear(wear)
end
end
node.name = name
minetest.set_node(pos, node)
minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true)
end
elseif minetest.get_item_group(itemstack:get_name(), "campfire_cookable") ~= 0 then
mcl_campfires.take_item(pos, node, player, itemstack)
else
minetest.item_place_node(itemstack, player, pointed_thing)
end
end,
drop = def.drops,
_mcl_silk_touch_drop = {name.."_lit"},
on_timer = mcl_campfires.cook_item,
drop = "",
light_source = def.lightlevel,
mcl_sounds.node_sound_wood_defaults(),
sounds = mcl_sounds.node_sound_wood_defaults(),
selection_box = {
type = "fixed",
fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top
@ -87,7 +273,13 @@ function mcl_campfires.register_campfire(name, def)
},
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
damage_per_second = def.damage,
damage_per_second = def.damage, -- FIXME: Once entity burning is fixed, this needs to be removed.
on_blast = on_blast,
after_dig_node = function(pos, node, oldmeta, digger)
drop_items(pos, node, oldmeta)
campfire_drops(pos, digger, def.drops, name.."_lit")
end,
_mcl_campfires_smothered_form = name,
})
end
@ -107,11 +299,50 @@ minetest.register_globalstep(function(dtime)
if etime < 0.5 then return end
etime = 0
for _,pl in pairs(minetest.get_connected_players()) do
local armor_feet = pl:get_inventory():get_stack("armor", 5)
if pl and pl:get_player_control().sneak or (minetest.global_exists("mcl_enchanting") and mcl_enchanting.has_enchantment(armor_feet, "frost_walker")) or (minetest.global_exists("mcl_potions") and mcl_potions.player_has_effect(pl, "fire_proof")) then
return
end
burn_in_campfire(pl)
end
for _,ent in pairs(minetest.luaentities) do
if ent.is_mob then
burn_in_campfire(ent.object)
burn_in_campfire(ent.object) -- FIXME: Mobs don't seem to burn properly anymore.
end
end
end)
function mcl_campfires.generate_smoke(pos, haybale)
local smoke_timer
if haybale then
smoke_timer = 8
else
smoke_timer = 4.75
end
minetest.add_particle({
pos = vector.offset(pos, math.random(-0.5, 0.5), 0, math.random(-0.5, 0.5)),
velocity = vector.new(0, 1, 0),
texture = "mcl_campfires_particle_" .. math.random(1, 12) .. ".png",
size = 10,
acceleration = vector.new(0, 0.5, 0),
collisiondetection = true,
expirationtime = smoke_timer,
})
end
minetest.register_abm({
label = "Campfire Smoke",
nodenames = {"group:lit_campfire"},
interval = 2,
chance = 2,
action = function(pos, node)
local node_below = vector.offset(pos, 0, -1, 0)
local haybale = false
if minetest.get_node(node_below).name == "mcl_farming:hay_block" then
haybale = true
end
mcl_campfires.generate_smoke(pos, haybale)
end,
})

View File

@ -1,8 +1,8 @@
-- TO-DO:
-- * Add Smoke Particles
-- * Add Spark Particles
-- * Add Cooking Meat
-- * Add Working Sounds
-- * Waterlogging (needs engine change)
-- * Fix the mob damage when mobs go back to burning again
local modname = minetest.get_modpath(minetest.get_current_modname())
dofile(modname.."/api.lua") -- Load API File

View File

@ -1,3 +1,3 @@
name = mcl_campfires
depends = mcl_sounds
depends = mcl_sounds, mcl_util
author = PrairieWind, Gerold55

File diff suppressed because it is too large Load Diff

View File

@ -1,35 +0,0 @@
# Blender MTL File: 'campfire.blend'
# Material Count: 3
newmtl Material.001
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd G:\minetest-0.4.16-win641\textures\Pixel Perfection v4.0\mcl_campfire_fire.png
newmtl none
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd \home\nathan\Downloads\mcl_campfire_log.png
newmtl none_NONE
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd \\home\\nathan\\Downloads\\mcl_campfire_log.png

View File

@ -1,248 +0,0 @@
# Blender v2.78 (sub 0) OBJ File: 'campfire.blend'
# www.blender.org
mtllib campfire1.mtl
o nodebox4.005_nodebox4.006
v 0.243779 -0.499707 -0.497529
v 0.493779 -0.499707 -0.497421
v 0.493779 -0.249707 -0.497421
v 0.243779 -0.249707 -0.497529
v 0.243349 -0.499707 0.502471
v 0.493349 -0.499707 0.502578
v 0.493349 -0.249707 0.502578
v 0.243349 -0.249707 0.502471
v 0.493779 -0.499707 -0.497421
v 0.493779 -0.249707 -0.497421
v 0.493349 -0.499707 0.502578
v 0.493349 -0.249707 0.502578
vt -0.0000 0.7500
vt -0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt -0.0000 0.7500
vt -0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vn -0.0004 0.0000 1.0000
vn 1.0000 -0.0000 0.0004
vn -0.0000 -1.0000 0.0000
usemtl none
s off
f 1/1/1 2/2/1 3/3/1 4/4/1
f 5/5/1 6/6/1 7/7/1 8/8/1
f 1/9/2 4/10/2 8/11/2 5/5/2
f 1/9/3 2/12/3 6/13/3 5/5/3
f 4/14/3 3/15/3 7/16/3 8/17/3
f 9/18/2 10/19/2 12/20/2 11/21/2
o nodebox4.004_nodebox4.005
v -0.500021 -0.499707 -0.497848
v -0.250021 -0.499707 -0.497741
v -0.250021 -0.249707 -0.497741
v -0.500021 -0.249707 -0.497848
v -0.500451 -0.499707 0.502152
v -0.250451 -0.499707 0.502259
v -0.250451 -0.249707 0.502259
v -0.500451 -0.249707 0.502152
v -0.250021 -0.499707 -0.497741
v -0.250021 -0.249707 -0.497741
v -0.250451 -0.499707 0.502259
v -0.250451 -0.249707 0.502259
vt -0.0000 0.7500
vt -0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt -0.0000 0.7500
vt -0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vn -0.0004 0.0000 1.0000
vn 1.0000 -0.0000 0.0004
vn -0.0000 -1.0000 0.0000
usemtl none
s off
f 13/22/4 14/23/4 15/24/4 16/25/4
f 17/26/4 18/27/4 19/28/4 20/29/4
f 13/30/5 16/31/5 20/32/5 17/26/5
f 13/30/6 14/33/6 18/34/6 17/26/6
f 16/35/6 15/36/6 19/37/6 20/38/6
f 21/39/5 22/40/5 24/41/5 23/42/5
o nodebox4.001_nodebox4.004
v 0.500000 -0.312500 -0.493800
v 0.500000 -0.312500 -0.243800
v 0.500000 -0.062500 -0.243800
v 0.500000 -0.062500 -0.493800
v -0.500000 -0.312500 -0.493800
v -0.500000 -0.312500 -0.243800
v -0.500000 -0.062500 -0.243800
v -0.500000 -0.062500 -0.493800
v 0.500000 -0.312500 -0.243800
v 0.500000 -0.062500 -0.243800
v -0.500000 -0.312500 -0.243800
v -0.500000 -0.062500 -0.243800
vt 0.0000 0.7500
vt 0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt 0.0000 0.7500
vt 0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.7500
vn -1.0000 0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
usemtl none
s off
f 25/43/7 26/44/7 27/45/7 28/46/7
f 29/47/7 30/48/7 31/49/7 32/50/7
f 25/51/8 28/52/8 32/53/8 29/47/8
f 25/51/9 26/54/9 30/55/9 29/47/9
f 28/56/9 27/57/9 31/58/9 32/59/9
f 33/60/8 34/61/8 36/62/8 35/63/8
o Plane
v -0.311754 -0.438770 -0.196249
v 0.276360 -0.438621 0.247948
v -0.311276 0.135801 -0.196634
v 0.276838 0.135950 0.247562
v -0.274993 -0.438696 0.270317
v 0.240407 -0.438696 -0.218656
v -0.275322 0.135875 0.269969
v 0.240077 0.135875 -0.219003
vt 0.0000 0.0000
vt 1.0000 0.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.0000
vt 1.0000 0.0000
vt 1.0000 1.0000
vt -0.0000 1.0000
vn -0.6027 0.0010 0.7980
vn 0.6883 0.0008 0.7255
usemtl Material.001
s off
f 37/64/10 38/65/10 40/66/10 39/67/10
f 41/68/11 42/69/11 44/70/11 43/71/11
o nodebox3
v 0.250000 -0.500000 -0.500000
v 0.250000 -0.500000 0.500000
v 0.250000 -0.437500 0.500000
v 0.250000 -0.437500 -0.500000
v -0.250000 -0.500000 -0.500000
v -0.250000 -0.500000 0.500000
v -0.250000 -0.437500 0.500000
v -0.250000 -0.437500 -0.500000
vt 1.0000 0.0000
vt 1.0000 0.0625
vt 0.0000 0.0625
vt 0.0000 0.0000
vt 1.0000 0.0000
vt 1.0000 0.0625
vt 0.0000 0.0625
vt 0.0000 0.0000
vt 1.0000 0.4375
vt 0.0000 0.4375
vt 0.0001 0.0001
vt 0.9999 0.0001
vt 1.0000 0.5000
vt 0.0000 0.5000
vt 0.0001 0.0001
vt 0.0000 0.0000
vt 0.0000 0.0000
vt 0.0000 0.0000
vt 0.0000 0.0000
vt 0.0000 0.0000
vt 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
vn -1.0000 0.0000 0.0000
usemtl none
s off
f 45/72/12 48/73/12 52/74/12 49/75/12
f 46/76/12 47/77/12 51/78/12 50/79/12
f 45/72/13 46/80/13 50/81/13 49/82/13
f 48/83/13 47/84/13 51/85/13 52/86/13
usemtl none_NONE
f 45/87/14 46/88/14 47/89/14 48/90/14
f 49/75/14 50/79/14 51/91/14 52/92/14
o nodebox4
v 0.500000 -0.312500 0.250000
v 0.500000 -0.312500 0.500000
v 0.500000 -0.062500 0.500000
v 0.500000 -0.062500 0.250000
v -0.500000 -0.312500 0.250000
v -0.500000 -0.312500 0.500000
v -0.500000 -0.062500 0.500000
v -0.500000 -0.062500 0.250000
v 0.500000 -0.312500 0.500000
v 0.500000 -0.062500 0.500000
v -0.500000 -0.312500 0.500000
v -0.500000 -0.062500 0.500000
vt -0.0000 0.7500
vt 0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt -0.0000 0.7500
vt -0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vn -1.0000 0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
usemtl none
s off
f 53/93/15 54/94/15 55/95/15 56/96/15
f 57/97/15 58/98/15 59/99/15 60/100/15
f 53/101/16 56/102/16 60/103/16 57/97/16
f 53/101/17 54/104/17 58/105/17 57/97/17
f 56/106/17 55/107/17 59/108/17 60/109/17
f 61/110/16 62/111/16 64/112/16 63/113/16

View File

@ -1,225 +0,0 @@
# Blender v2.79 (sub 7) OBJ File: 'campfire.blend'
# www.blender.org
o Plane
v -0.240246 -0.438696 -0.141059
v 0.205043 -0.438696 0.192756
v -0.239959 0.135875 -0.141442
v 0.205331 0.135875 0.192373
v -0.216088 -0.438696 0.214432
v 0.181502 -0.438696 -0.162771
v -0.216417 0.135875 0.214085
v 0.181172 0.135875 -0.163119
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vn -0.5998 0.0008 0.8001
vn 0.6883 0.0008 0.7255
g Plane_Plane_Material.001
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 5/5/2 6/6/2 8/7/2 7/8/2
o nodebox3
v 0.250000 -0.500000 -0.500000
v 0.250000 -0.500000 0.500000
v 0.250000 -0.437500 0.500000
v 0.250000 -0.437500 -0.500000
v -0.250000 -0.500000 -0.500000
v -0.250000 -0.500000 0.500000
v -0.250000 -0.437500 0.500000
v -0.250000 -0.437500 -0.500000
v 0.243779 -0.499707 -0.497529
v 0.493779 -0.499707 -0.497421
v 0.493779 -0.249707 -0.497421
v 0.243779 -0.249707 -0.497529
v 0.243349 -0.499707 0.502471
v 0.493349 -0.499707 0.502579
v 0.493349 -0.249707 0.502578
v 0.243349 -0.249707 0.502471
v 0.493779 -0.499707 -0.497421
v 0.493779 -0.249707 -0.497421
v 0.493349 -0.499707 0.502579
v 0.493349 -0.249707 0.502578
v -0.500021 -0.499707 -0.497848
v -0.250021 -0.499707 -0.497741
v -0.250021 -0.249707 -0.497741
v -0.500021 -0.249707 -0.497848
v -0.500451 -0.499707 0.502152
v -0.250451 -0.499707 0.502259
v -0.250451 -0.249707 0.502259
v -0.500451 -0.249707 0.502152
v -0.250021 -0.499707 -0.497741
v -0.250021 -0.249707 -0.497741
v -0.250451 -0.499707 0.502259
v -0.250451 -0.249707 0.502259
v 0.500000 -0.312500 -0.493800
v 0.500000 -0.312500 -0.243800
v 0.500000 -0.062500 -0.243800
v 0.500000 -0.062500 -0.493800
v -0.500000 -0.312500 -0.493800
v -0.500000 -0.312500 -0.243800
v -0.500000 -0.062500 -0.243800
v -0.500000 -0.062500 -0.493800
v 0.500000 -0.312500 -0.243800
v 0.500000 -0.062500 -0.243800
v -0.500000 -0.312500 -0.243800
v -0.500000 -0.062500 -0.243800
v 0.500000 -0.312500 0.250000
v 0.500000 -0.312500 0.500000
v 0.500000 -0.062500 0.500000
v 0.500000 -0.062500 0.250000
v -0.500000 -0.312500 0.250000
v -0.500000 -0.312500 0.500000
v -0.500000 -0.062500 0.500000
v -0.500000 -0.062500 0.250000
v 0.500000 -0.312500 0.500000
v 0.500000 -0.062500 0.500000
v -0.500000 -0.312500 0.500000
v -0.500000 -0.062500 0.500000
vt 0.999982 0.000018
vt 1.000000 0.062500
vt 0.000000 0.062500
vt 0.000018 0.000018
vt 0.999982 0.000018
vt 1.000000 0.062500
vt 0.000000 0.062500
vt 0.000018 0.000018
vt 1.000000 0.437500
vt 0.000000 0.437500
vt 0.000071 0.000071
vt 0.999929 0.000071
vt 1.000000 0.500000
vt 0.000000 0.500000
vt 0.000071 0.000071
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt 0.000000 0.750000
vt 0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 0.000000 0.750000
vt 0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.750000
vt -0.000000 0.750000
vt 0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
vn -0.0004 0.0000 1.0000
vn 1.0000 -0.0000 0.0004
vn -1.0000 0.0000 0.0000
g nodebox3_nodebox3_none
s off
f 9/9/3 12/10/3 16/11/3 13/12/3
f 10/13/3 11/14/3 15/15/3 14/16/3
f 9/9/4 10/17/4 14/18/4 13/19/4
f 12/20/4 11/21/4 15/22/4 16/23/4
f 17/24/5 18/25/5 19/26/5 20/27/5
f 21/28/5 22/29/5 23/30/5 24/31/5
f 17/32/6 20/33/6 24/34/6 21/28/6
f 17/32/4 18/35/4 22/36/4 21/28/4
f 20/37/4 19/38/4 23/39/4 24/40/4
f 25/41/6 26/42/6 28/43/6 27/44/6
f 29/45/5 30/46/5 31/47/5 32/48/5
f 33/49/5 34/50/5 35/51/5 36/52/5
f 29/53/6 32/54/6 36/55/6 33/49/6
f 29/53/4 30/56/4 34/57/4 33/49/4
f 32/58/4 31/59/4 35/60/4 36/61/4
f 37/62/6 38/63/6 40/64/6 39/65/6
f 41/66/7 42/67/7 43/68/7 44/69/7
f 45/70/7 46/71/7 47/72/7 48/73/7
f 41/74/3 44/75/3 48/76/3 45/70/3
f 41/74/4 42/77/4 46/78/4 45/70/4
f 44/79/4 43/80/4 47/81/4 48/82/4
f 49/83/3 50/84/3 52/85/3 51/86/3
f 53/87/7 54/88/7 55/89/7 56/90/7
f 57/91/7 58/92/7 59/93/7 60/94/7
f 53/95/3 56/96/3 60/97/3 57/91/3
f 53/95/4 54/98/4 58/99/4 57/91/4
f 56/100/4 55/101/4 59/102/4 60/103/4
f 61/104/3 62/105/3 64/106/3 63/107/3
g nodebox3_nodebox3_none_NONE
f 9/108/7 10/109/7 11/110/7 12/111/7
f 13/12/7 14/16/7 15/112/7 16/113/7

View File

@ -40,3 +40,19 @@ minetest.register_craft({
{ "group:tree", "group:tree", "group:tree" },
}
})
-- Register Visual Food Entity
minetest.register_entity("mcl_campfires:food_entity", {
initial_properties = {
physical = false,
visual = "wielditem",
wield_item = "mcl_mobitems:mutton",
wield_image = "mcl_mobitems_mutton_raw.png",
visual_size = {x=0.25, y=0.25},
collisionbox = {0,0,0,0,0,0},
pointable = false,
},
on_activate = function(self, staticdata)
self.object:set_rotation({x = math.pi / -2, y = 0, z = 0})
end,
})

View File

@ -1,24 +0,0 @@
# textdomain: mcl_cherry_blossom
Cherry Log=Вишнёвое бревно
The trunk of a cherry blossom tree.=Ствол цветущего вишневого дерева.
Stripped Cherry Log=Обтёсанное вишнёвое бревно
The stripped trunk of a cherry blossom tree.=Обтёсанный ствол цветущей вишни.
Cherry Bark=Вишня
This is a decorative block surrounded by the bark of a tree trunk.=Это декоративный блок, окруженный корой ствола дерева.
Stripped Cherry Wood=Обтёсанная вишнёвая древесина
The stripped wood of a cherry blossom tree.=Обтёсанная древесина цветущей вишни.
Cherry Wood Planks=Вишнёвые доски
Cherry Leaves=Вишнёвые листья
Cherry blossom leaves are grown from cherry blossom trees.=Листья цветущей вишни выращивают на вишневых деревьях.
Cherry Sapling=Саженец вишни
Cherry blossom sapling can be planted to grow cherry trees.=Саженец цветущей вишни можно посадить для выращивания вишневых деревьев.
Cherry Door=Вишнёвая дверь
Cherry Trapdoor=Вишнёвый люк
Cherry Stairs=Вишнёвые ступеньки
Cherry Slab=Вишнёвая плита
Double Cherry Slab=Двойная вишнёвая плита
Cherry Sign=Вишнёвая табличка
Cherry Fence=Вишнёвый забор
Cherry Gate=Вишнёвая калитка
Cherry Pressure Plate=Вишнёвая нажимная плита
Cherry Button=Вишнёвая кнопка

View File

@ -217,7 +217,8 @@ Stripped Spruce Wood=Madeira de Pinheiro Descascada
Stone Bricks=Tijolo de Rocha
Sugar=Açúcar
Sugar Canes=Cana de Açúcar
Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=Canas de açúcar são plantas que possui alguns usos em fabricações. Canas de açúcar crescerão lentamente até 3 blocos quando estão próximas da água e são colocadas em blocos de grama, terra, areia, areia vermelha, podzol ou terra infértil. Quando uma cana de açúcar é quebrada, todas as canas de açúcar conectadas acima também se quebrarão.
Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=
Canas de açúcar são plantas que possui alguns usos em fabricações. Canas de açúcar crescerão lentamente até 3 blocos quando estão próximas da água e são colocadas em blocos de grama, terra, areia, areia vermelha, podzol ou terra infértil.
Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=Canas de açúcar só podem ser colocados emcima de outras canas de açúcar ou sobre blocos em qual elas podem crescer.
Sugar comes from sugar canes and is used to make sweet foods.=Açúcar vem de canas de açúcar e é utilizado para fazer doces comidas.
The stripped trunk of an acacia tree.=O tronco descascado de uma acácia.

View File

@ -681,7 +681,7 @@ mcl_doors:register_trapdoor("mcl_crimson:crimson_trapdoor", {
_doc_items_longdesc = S("Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."),
_doc_items_usagehelp = S("To open or close the trapdoor, rightclick it or send a redstone signal to it."),
tile_front = "mcl_crimson_crimson_trapdoor.png",
tile_side = "mcl_crimson_crimson_trapdoor_side.png",
tile_side = "mcl_crimson_crimson_hyphae_wood.png",
wield_image = "mcl_crimson_crimson_trapdoor.png",
groups = {handy=1,axey=1, mesecon_effector_on=1, material_wood=1, flammable=-1},
_mcl_hardness = 3,
@ -719,7 +719,7 @@ mcl_doors:register_trapdoor("mcl_crimson:warped_trapdoor", {
_doc_items_longdesc = S("Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."),
_doc_items_usagehelp = S("To open or close the trapdoor, rightclick it or send a redstone signal to it."),
tile_front = "mcl_crimson_warped_trapdoor.png",
tile_side = "mcl_crimson_warped_trapdoor_side.png",
tile_side = "mcl_crimson_warped_hyphae_wood.png",
wield_image = "mcl_crimson_warped_trapdoor.png",
groups = {handy=1,axey=1, mesecon_effector_on=1, material_wood=1, flammable=-1},
_mcl_hardness = 3,

View File

@ -66,6 +66,12 @@ minetest.register_tool("mcl_fire:flint_and_steel", {
if not minetest.is_creative_enabled("") then
stack:add_wear(65535/65) -- 65 uses
end
-- Ignite Campfire
elseif minetest.get_item_group(dropnode.name, "campfire") ~= 0 then
add_node(droppos, {name=dropnode.name.."_lit"})
if not minetest.is_creative_enabled("") then
stack:add_wear(65535/65) -- 65 uses
end
end
return stack
end,

View File

@ -435,7 +435,7 @@ minetest.register_craftitem("mcl_fishing:fish_raw", {
on_place = minetest.item_eat(2),
on_secondary_use = minetest.item_eat(2),
stack_max = 64,
groups = { food=2, eatable = 2, smoker_cookable = 1 },
groups = { food=2, eatable = 2, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 0.4,
})
@ -465,7 +465,7 @@ minetest.register_craftitem("mcl_fishing:salmon_raw", {
on_place = minetest.item_eat(2),
on_secondary_use = minetest.item_eat(2),
stack_max = 64,
groups = { food=2, eatable = 2, smoker_cookable = 1 },
groups = { food=2, eatable = 2, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 0.4,
})

View File

@ -209,9 +209,3 @@ mcl_flowerpots.register_potted_flower("mcl_core:deadbush", {
desc = S("Dead Bush"),
image = "default_dry_shrub.png",
})
mcl_flowerpots.register_potted_flower("mcl_cherry_blossom:cherrysapling", {
name = "cherrysapling",
desc = S("Cherry Sapling"),
image = "mcl_cherry_blossom_sapling.png",
})

View File

@ -24,4 +24,3 @@ Flower Pot=
Flower pots are decorative blocks in which flowers and other small plants can be placed.=
Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=
Can hold a small flower or plant=
Cherry Sapling Flower Pot=

View File

@ -298,7 +298,7 @@ mcl_doors:register_trapdoor("mcl_mangrove:mangrove_trapdoor", {
_doc_items_longdesc = S("Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."),
_doc_items_usagehelp = S("To open or close the trapdoor, rightclick it or send a redstone signal to it."),
tile_front = "mcl_mangrove_trapdoor.png",
tile_side = "mcl_mangrove_trapdoor_side.png",
tile_side = "mcl_mangrove_planks.png",
wield_image = "mcl_mangrove_trapdoor.png",
groups = {handy=1,axey=1, mesecon_effector_on=1, material_wood=1, flammable=-1},
_mcl_hardness = 3,

View File

@ -20,7 +20,7 @@ minetest.register_craftitem("mcl_mobitems:mutton", {
wield_image = "mcl_mobitems_mutton_raw.png",
on_place = minetest.item_eat(2),
on_secondary_use = minetest.item_eat(2),
groups = { food = 2, eatable = 2, smoker_cookable = 1 },
groups = { food = 2, eatable = 2, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 1.2,
stack_max = 64,
})
@ -44,7 +44,7 @@ minetest.register_craftitem("mcl_mobitems:beef", {
wield_image = "mcl_mobitems_beef_raw.png",
on_place = minetest.item_eat(3),
on_secondary_use = minetest.item_eat(3),
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
groups = { food = 2, eatable = 3, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 1.8,
stack_max = 64,
})
@ -69,7 +69,7 @@ minetest.register_craftitem("mcl_mobitems:chicken", {
wield_image = "mcl_mobitems_chicken_raw.png",
on_place = minetest.item_eat(2),
on_secondary_use = minetest.item_eat(2),
groups = { food = 2, eatable = 2, smoker_cookable = 1 },
groups = { food = 2, eatable = 2, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 1.2,
stack_max = 64,
})
@ -93,7 +93,7 @@ minetest.register_craftitem("mcl_mobitems:porkchop", {
wield_image = "mcl_mobitems_porkchop_raw.png",
on_place = minetest.item_eat(3),
on_secondary_use = minetest.item_eat(3),
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
groups = { food = 2, eatable = 3, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 1.8,
stack_max = 64,
})
@ -117,7 +117,7 @@ minetest.register_craftitem("mcl_mobitems:rabbit", {
wield_image = "mcl_mobitems_rabbit_raw.png",
on_place = minetest.item_eat(3),
on_secondary_use = minetest.item_eat(3),
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
groups = { food = 2, eatable = 3, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 1.8,
stack_max = 64,
})

View File

@ -969,7 +969,7 @@ end
function mcl_potions._extinguish_nearby_fire(pos, radius)
local epos = {x=pos.x, y=pos.y+0.5, z=pos.z}
local dnode = minetest.get_node({x=pos.x,y=pos.y-0.5,z=pos.z})
if minetest.get_item_group(dnode.name, "fire") ~= 0 then
if minetest.get_item_group(dnode.name, "fire") ~= 0 or minetest.get_item_group(dnode.name, "lit_campfire") ~= 0 then
epos.y = pos.y - 0.5
end
local exting = false
@ -989,6 +989,11 @@ function mcl_potions._extinguish_nearby_fire(pos, radius)
minetest.sound_play("fire_extinguish_flame", {pos = tpos, gain = 0.25, max_hear_distance = 16}, true)
minetest.remove_node(tpos)
exting = true
elseif minetest.get_item_group(node.name, "lit_campfire") ~= 0 then
minetest.sound_play("fire_extinguish_flame", {pos = tpos, gain = 0.25, max_hear_distance = 16}, true)
local def = minetest.registered_nodes[node.name]
minetest.set_node(tpos, {name = def._mcl_campfires_smothered_form, param2 = node.param2})
exting = true
end
end
-- Has radius: lingering, extinguish all nodes in area
@ -996,10 +1001,16 @@ function mcl_potions._extinguish_nearby_fire(pos, radius)
local nodes = minetest.find_nodes_in_area(
{x=epos.x-radius,y=epos.y,z=epos.z-radius},
{x=epos.x+radius,y=epos.y,z=epos.z+radius},
{"group:fire"})
{"group:fire", "group:lit_campfire"})
for n=1, #nodes do
local node = minetest.get_node(nodes[n])
minetest.sound_play("fire_extinguish_flame", {pos = nodes[n], gain = 0.25, max_hear_distance = 16}, true)
minetest.remove_node(nodes[n])
if minetest.get_item_group(node.name, "fire") ~= 0 then
minetest.remove_node(nodes[n])
elseif minetest.get_item_group(node.name, "lit_campfire") ~= 0 then
local def = minetest.registered_nodes[node.name]
minetest.set_node(nodes[n], {name = def._mcl_campfires_smothered_form, param2 = node.param2})
end
exting = true
end
end

View File

@ -187,7 +187,7 @@ local make_grass_path = function(itemstack, placer, pointed_thing)
itemstack:add_wear(wear)
end
end
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true)
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above, max_hear_distance = 16}, true)
minetest.swap_node(pointed_thing.under, {name="mcl_core:grass_path"})
end
end

View File

@ -1,160 +0,0 @@
### 0.84 - The Very Nice release
### Contributors
#### New contributors
* appgurueu
* kbundg
* megustanlosfrijoles
* Niterux
* seventeenthShulker
* Temak
* uqers
#### Returning contributors
* 3raven
* AncientMariner
* chmodsayshello
* cora
* epCode
* Exhale
* FlamingRCCars
* FossFanatic
* MrRar
* Nicu
* PrairieWind
* rudzik8
* SmokeyDope
* Wbjitscool
## Important Info
### New server commands
minetest.register_chatcommand("music", {
params = "[on|off|invert [<player name>]]",
description = S("Turns music for yourself or another player on or off."),
### New settings added
#Maximum amount of hostile mobs (default:300)
mcl_mob_cap_hostile (Global hostile mob cap) int 300 0 2048
#Maximum amount of non-hostile mobs (default:300)
mcl_mob_cap_non_hostile (Global non-hostile mob cap) int 300 0 2048
#Maximum amount of ambient water mobs that will spawn near a player (default:20)
mcl_mob_cap_water_ambient (Mob cap ambient water) int 20 0 1024
#Maximum amount of underground water mobs that will spawn near a player (default:5)
mcl_mob_cap_water_underground (Mob cap underground water) int 5 0 1024
#Maximum amount of axolotl mobs that will spawn near a player (default:5)
mcl_mob_cap_axolotl (Mob cap axolotl) int 5 0 1024
## Change Log
### Gameplay Improvements
* Cherry Blossoms - Saplings added as loot, and trees and craftables added. Initial changes to enable a Wood API. - PrairieWind, SmokeyDope, Wbjitscool
* Fix issue with drops turning black due to clipping into walls and floors and visually demonstrate drops merging - AncientMariner
* Hoglins attack frequency reduced now due to new attack_frequency mob setting - AncientMariner
* Hostile mobs should lose aggro if they cannot see their target - AncientMariner
* Nerf skeleton attack - AncientMariner
* Split global cap for peaceful and hostile. Introduce underground water, ambient water, axolotl cap. Slight peaceful spawn balancing. Mob spawning can have more density in some instances. Slightly less passive mob spawning. Some mobs were not counted in cap calculations. Refreshed cap space after spawning in cycle. - AncientMariner
* Prevent slime blocks from 'connecting' to honey blocks when pushing/pulling, like in Minecraft - seventeenthShulker
* Add support for external custom skins mod - MrRar
* Double doors fixed - FossFanatic
* Make elytra enchantable and the enchanted elytra usable - PrairieWind/FlamingRCCars/MrRar
* Remove slimes from mushroom islands - AncientMariner
* Remove Flower Forest Beaches from Wolf biome spawn list - PrairieWind
* Make Piglin Brutes drop golden axes = PrairieWind
* Make end crystals explode when nearby crystals are punched and explode - PrairieWind
* Improved pig riding - PrairieWind
### Visual Improvements
* Incorporate sheep eating animation. - epCode
* New textures for warped for Crimson Fungus, Crimson Fungus planks, Warped Hyphae planks - Exhale
* New sweet berry textures - SmokeyDope
* Add Piglin and Creeper description names to death message - AncientMariner
* Creeper should not walk to player if it does not have line of sight. Mob shouldn't look at player it does not have line of sight to. - AncientMariner
* Remove one cause of extra jittering in mobs - AncientMariner
* Update dead bush generation - PrairieWind
* Fix a typo in the Acquire Hardware achievement - uqers
* Clean-up mcl_bamboo text - rudzik8
### Sounds
* Add more fishing sounds! - Niterux
* Add max_hear_distance flag to composter sounds - SmokeyDope
* Add barrel sounds - SmokeyDope
### Translations
* Update russian translation - Temak
* (french) translation enhancements - 3raven
* Add spanish translations - megustanlosfrijoles
### Performance
* Reduce network activity for elytra flying rocket particles - AncientMariner
* Mapgen Performance Improvements - FossFanatic
* Migrate beacons back to abm - chmodsayshello
* Frequent danger checks and movement actions removed from non-moving and out of range mobs - AncientMariner
* Duplicate jump and danger checks removed from mob processing - AncientMariner
* Decreased frequency of processing for some mob actions - AncientMariner
* Only run certain checks if applicable for mob - AncientMariner
### Multiplayer
* Add global cooldown for the bed quick chat feature - chmodsayshello/AncientMariner
* Music toggle for players connecting to servers - chmodsayshello
* Make sure dying sign text respects protection - AncientMariner
### Code Quality
* Oxidation API - PrairieWind
* Fix sign color requirement and translation issue - PrairieWind
* Standardise despawn logic and add asserts. Add persistent flag for mobs that have been interacted with. - AncientMariner
* Replace the zombie pigman with the zombified piglin - AncientMariner
* Clean up crash code and convert to new style vectors - AncientMariner
* Fix png start warning and double slab description warning. - AncientMariner
* OptiPNG a bunch of textures - PrairieWind
* Beds mesecons dependency incorrectly named - AncientMariner
* Rename Bucket Textures - AncientMariner
* Fix global variable references and exit mob_step if missing pos - AncientMariner
* Fix texture modifiers relying on undocumented behavior - appgurueu
### Fixes
* Piglins no longer aggro for enchanted gold armour - AncientMariner
* Drop pumpkins, melons and buttons via piston or dirt next to piston - AncientMariner
* Llamas and other mobs change skin color - AncientMariner
* Mobs more easily jump from stationary up a block - epCode
* Fix waterlogged mangrove roots leaving water in the nether - AncientMariner
* Prevent ALL furnaces from being moved (xp dupe fix) - chmodsayshello
* Fix gilded blackstone fortune dupe - cora
* Lightning rod param2 is now saved upon being struck - AncientMariner
* Adjust hot stuff achievement to use new lava bucket texture name - SmokeyDope
* Fix dropped out bamboo lines from translation work - AncientMariner
* Zombie piglin no longer prevent sleep unless hostile. - AncientMariner
### Crashes
* Fix crash when creeper explodes in minecart - AncientMariner
* Fix crash when using a named spawn egg - cora
* Fix crash when parrot sits on shoulder - AncientMariner
* Fix 2 automated wool farm crash and elytra fly over unknown block crash - AncientMariner
* Change order of numbers passed into random that crash on some Lua versions - AncientMariner
* solar panels: No crash when minetest.get_natural_light() return nil - MrRar

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 B

After

Width:  |  Height:  |  Size: 670 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 B

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 B

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 B

After

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 B

After

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 B