Compare commits

...

63 Commits

Author SHA1 Message Date
Mikita Wiśniewski a764818e13 Add a new 'pumpkin' group (#4012)
Creates a new 'pumpkin' group, which combines Pumpkin, Faceless Pumkin and Jack o'Lantern under a shared category. This helps tidy up the mesecons_noteblock code a bit, and possibly other mods too.

Reviewed-on: MineClone2/MineClone2#4012
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-committed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
2023-11-14 15:35:30 +00:00
Aliaksei Urbanski 32ef89aca3 Fix minor README's imperfections (#4001)
I've prepared some minor changes for `README`s.

Reviewed-on: MineClone2/MineClone2#4001
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Aliaksei Urbanski <aliaksei.urbanski@gmail.com>
Co-committed-by: Aliaksei Urbanski <aliaksei.urbanski@gmail.com>
2023-11-11 21:01:45 +00:00
the-real-herowl accb8742dd Merge pull request 'Make golem go home. Fixes #3288' (#3929) from golem_nav into master
Reviewed-on: MineClone2/MineClone2#3929
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
2023-11-06 22:31:43 +00:00
codiac 71282e196e Move mob nav hacks to Experimental 2023-11-06 22:46:04 +01:00
codiac 89c97690c8 Add a setting to enable mod nav hacks 2023-11-06 22:01:31 +01:00
codiac 06f9486e4d Do not go home if attacking 2023-11-06 21:59:40 +01:00
codiac ae5564e658 Make golem go home. Fixes #3288 2023-11-06 21:59:40 +01:00
the-real-herowl fdf823fff6 Merge pull request 'Update trapdoor climbable behavior' (#3938) from Dehydrate6684/MineClone2:trapdoor-ladder into master
Reviewed-on: MineClone2/MineClone2#3938
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
2023-11-06 20:29:23 +00:00
Araca 52b65554d9 Do not output enchanted item if enchantment is impossible (#3998)
To Fix #3672 , I avoid displaying the output item if enchantment is not possible for various reason
* Level of added enchantment is below the one from input item
* Incompatible enchantment

Co-authored-by: Araca <>
Reviewed-on: MineClone2/MineClone2#3998
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Araca <araca.prod@gmail.com>
Co-committed-by: Araca <araca.prod@gmail.com>
2023-11-06 20:12:36 +00:00
the-real-herowl 5a069af072 Merge pull request 'Piston-breakable nodes don't fill up the push limit, items properly drop' (#3813) from seventeenthShulker/MineClone2:piston_digs_properly into master
Reviewed-on: MineClone2/MineClone2#3813
2023-11-06 19:50:31 +00:00
the-real-herowl 14f73a8c55 Merge pull request 'armor trim followup' (#3974) from trim_achievement into master
Reviewed-on: MineClone2/MineClone2#3974
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
2023-11-06 19:37:56 +00:00
the-real-herowl dbab70ea38 Fixed the wayfinder 2023-11-06 20:22:46 +01:00
chmodsayshello 952a96b57d fix leggings trim textures 2023-11-05 20:35:13 +01:00
Dehydrate6684 e5a260b563
Added vines and skulk vines to ladder group 2023-11-05 14:10:58 +08:00
Dehydrate6684 9b2b8ee56e
Removed direction checks 2023-11-05 14:06:53 +08:00
seventeenthShulker 00cfca5947 Make carpet sticky again 2023-11-04 16:01:46 +00:00
seventeenthShulker c37da143da Add crying obsidian and lodestone to mvps_stoppers 2023-11-04 16:01:46 +00:00
seventeenthShulker 520fd773fb Fix random crash when piston breaks node with no player 2023-11-04 16:01:46 +00:00
seventeenthShulker 378df76e5f Prevent signs from being replaced by pushed/pulled blocks 2023-11-04 16:01:46 +00:00
seventeenthShulker 3e12b3c700 Check protection of certain nodes before push/pull
- The node directly in front of a piston (including air)

- The 'final' position of any connected nodes
2023-11-04 16:01:46 +00:00
seventeenthShulker 0637182697 Tallgrass and dead bush added to dig_by_piston 2023-11-04 16:01:46 +00:00
seventeenthShulker 0580b14310 Vertical pistons now save owner meta 2023-11-04 16:01:46 +00:00
seventeenthShulker 98cf3b7f7a Check node_replaceable after dig_by_piston
Allows tallgrass, nether vines etc to drop
2023-11-04 16:01:46 +00:00
seventeenthShulker e5829f719d All signs are mvps_stopper upon registration
All buttons are mvps_unsticky upon registration
Add some missing unmovable nodes
Bamboo trapdoor is now sticky
2023-11-04 16:01:46 +00:00
seventeenthShulker 089e3d46f1 Several more blocks comply with MC piston mechanics. 2023-11-04 16:01:46 +00:00
seventeenthShulker 5d8688dbeb Change tall flowers to `buildable_to = false` 2023-11-04 16:01:46 +00:00
seventeenthShulker 058684f17f Improve dig_node simulation and fix duplication 2023-11-04 16:01:46 +00:00
seventeenthShulker 918b8eee38 Fix unsticky defs for shulker_box_small names (some did not exist) 2023-11-04 16:01:46 +00:00
seventeenthShulker af206ed8b3 All bamboo plant tiles can be broken with pistons 2023-11-04 16:01:46 +00:00
seventeenthShulker f2eca64e42 Blocks with dig_by_piston no longer fill up the push limit
Fix for broken nodes (e.g. sugar cane) not updating and leaving floating bits

Short-term fix for minetest.dig_node not always working (checking for group dig_immediate = 3)
2023-11-04 16:01:46 +00:00
the-real-herowl 262100be24 Fixed stew/bowl duplication bug (#3995)
Fixed #3991, copied some code over from mcl_potions

Reviewed-on: MineClone2/MineClone2#3995
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2023-11-03 22:39:21 +00:00
Eliy21 69dc013799 Prevent multiple chestboat drivers (#3992)
Fixes #3872

Reviewed-on: MineClone2/MineClone2#3992
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Eliy21 <eliy21@noreply.git.minetest.land>
Co-committed-by: Eliy21 <eliy21@noreply.git.minetest.land>
2023-11-03 22:09:49 +00:00
Michieal a425d359f5 WaterLoggedRootsKelpFix (#3994)
Fixes #3990

A very simple fix to Kelp and the current water logged nodes. It adds the group "waterlogged" to water logged items and then puts a check for the group in kelp growth. Made it as a group, because eventually there will be other waterlogged nodes.

Reviewed-on: MineClone2/MineClone2#3994
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Michieal <michieal@noreply.git.minetest.land>
Co-committed-by: Michieal <michieal@noreply.git.minetest.land>
2023-11-03 21:46:00 +00:00
Freedom 83d6e2a5d2 polar bear fix typo (#3846)
horrizonatal -> horizontal

Reviewed-on: MineClone2/MineClone2#3846
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Freeman <project@gnuhacker.org>
Co-committed-by: Freeman <project@gnuhacker.org>
2023-11-03 00:06:06 +00:00
FossFanatic ce403b9245 Rename Liquid Textures (#3758)
This pull request renames the textures of water and lava to more closely follow the MineClone 2 naming convention.

The code has also been changed to now reflect these new names.

Reviewed-on: MineClone2/MineClone2#3758
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: FossFanatic <fossfanatic@noreply.git.minetest.land>
Co-committed-by: FossFanatic <fossfanatic@noreply.git.minetest.land>
2023-11-02 23:47:26 +00:00
Eliy21 da911bd4d4 Turn non-player boat passenger sideways (#3986)
Some low hanging simple boat fixes.

Fixes #3259

Reviewed-on: MineClone2/MineClone2#3986
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Eliy21 <eliy21@noreply.git.minetest.land>
Co-committed-by: Eliy21 <eliy21@noreply.git.minetest.land>
2023-11-02 19:24:52 +00:00
the-real-herowl 8789411ab7 Merge pull request 'Add ability for shovels to turn grass paths into dirt on shift+right click' (#3932) from add-dirty-shovel-function into master
Reviewed-on: MineClone2/MineClone2#3932
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
2023-11-02 19:03:47 +00:00
the-real-herowl 5b1deedaf0 Disabled grass path making when sneaking 2023-11-02 20:00:19 +01:00
SmokeyDope fa1d8dfc47 Adjust grass path long description to inform players of new way to turn paths back to dirt. 2023-11-02 17:34:01 +00:00
SmokeyDope d2a4a6d042 add group 'path_remove_possible' to grass paths 2023-11-02 17:34:01 +00:00
SmokeyDope 5e194b33bd Adjust make_grass_path function to let shovels turn grass paths back to dirt with shift+rightclick 2023-11-02 17:34:01 +00:00
Araca 35bb569ee1 make craft guide search use local language (#3984)
Fix #3909

It is now possible to search in the crafting guide using both item id ("name", usually related to the English name) and translated item description (containing the displayed in-game name).

Co-authored-by: Araca <>
Reviewed-on: MineClone2/MineClone2#3984
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Araca <araca.prod@gmail.com>
Co-committed-by: Araca <araca.prod@gmail.com>
2023-10-31 10:00:58 +00:00
chmodsayshello 5be506830f make diamond tools upgradeable again 2023-10-25 18:04:32 +02:00
codiac 4fcd1ae541 Fix slime spawn crash (#3977)
Declare global variables before using them!

Fixes #3975

Reviewed-on: MineClone2/MineClone2#3977
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: codiac <codiac@inbox.lv>
Co-committed-by: codiac <codiac@inbox.lv>
2023-10-23 05:32:18 +00:00
the-real-herowl f941817c39 Merge pull request 'Un-hardcode blast resistance and hardness of fences and walls' (#3943) from wood_fence_blast_resistance into master
Reviewed-on: MineClone2/MineClone2#3943
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
2023-10-22 02:24:28 +00:00
seventeenthShulker bc3bde4cf8 Forgot about blackstone 2023-10-22 02:14:17 +00:00
seventeenthShulker 8099a4bd17 Walls use `source` parameter for default hardness and blast resistance
If no `source` given, fallbacks are 2 and 6 respectively
2023-10-22 02:14:17 +00:00
seventeenthShulker e2ed1ab4a6 Fix prismarine bricks and dark variant blast res.
Should be 6 like regular prismarine
2023-10-22 02:14:17 +00:00
seventeenthShulker e43a8e267d Un-hardcode blast resistance, hardness for walls,
now only based on their material
2023-10-22 02:14:17 +00:00
seventeenthShulker 570caf47eb All wood-type and nether-type fences now match material's blast resistance 2023-10-22 02:14:17 +00:00
the-real-herowl 59f3b53a51 Merge pull request 'Use MC 1.18+ light levels to control mob spawning' (#3946) from spawn_lighting into master
Reviewed-on: MineClone2/MineClone2#3946
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
2023-10-22 01:35:00 +00:00
chmodsayshello ec7e99019e add trim advancements 2023-10-21 22:25:30 +02:00
Dehydrate6684 b320d008ca
Unhardcoded nil 2023-10-18 08:04:54 +08:00
Dehydrate6684 23468cc2dd
Used vector.offset instead of add/subtract 2023-10-10 09:39:16 +08:00
Dehydrate6684 0c48a46f7c
Updated code based on reviews 2023-10-09 13:55:08 +08:00
codiac 95db118361 Add rules for blaze, wither skeleton, silverfish 2023-09-22 09:09:35 +10:00
codiac d2d7887e0f Handle bat and slime light checks 2023-09-21 14:53:32 +10:00
codiac 7577d37b38 Clarify MC version for lighting 2023-09-20 15:56:27 +10:00
codiac bf4c7e1913 Allow non monsters spawns too 2023-09-20 09:24:51 +10:00
codiac 11e3674926 Use MC 1.18 light levels to control mob spawning 2023-09-19 11:18:40 +10:00
Dehydrate6684 cc217d0089
Removed unnessary node definitions 2023-09-17 17:13:50 +08:00
Dehydrate6684 e6653b78ee
Added directional checks 2023-09-17 17:04:24 +08:00
Dehydrate6684 a960bf2e8e
Update trapdoor climbable behavior 2023-09-16 13:16:49 +08:00
85 changed files with 815 additions and 377 deletions

View File

@ -27,7 +27,7 @@ Or you can play in “creative mode” in which you can build almost anything in
## How to play (quick start)
### Getting started
* **Punch a tree** trunk until it breaks and collect wood
* Place the **wood into the 2×2 grid** (your “crafting grid” in your inventory menu and craft 4 wood planks
* Place the **wood into the 2×2 grid** (your “crafting grid” in your inventory menu) and craft 4 wood planks
* Place the 4 wood planks in a 2×2 shape in the crafting grid to **make a crafting table**
* **Rightclick the crafting table** for a 3×3 crafting grid to craft more complex things
* Use the **crafting guide** (book icon) to learn all the possible crafting recipes
@ -37,15 +37,15 @@ Or you can play in “creative mode” in which you can build almost anything in
### Farming
* Find seeds
* Craft hoe
* Rightclick dirt or similar block with hoe to create farmland
* Craft a hoe
* Rightclick dirt or a similar block with a hoe to create farmland
* Place seeds on farmland and watch them grow
* Collect plant when fully grown
* Collect plants when fully grown
* If near water, farmland becomes wet and speeds up growth
### Furnace
* Craft furnace
* Furnace allows you to obtain more items
* Craft a furnace
* The furnace allows you to obtain more items
* Upper slot must contain a smeltable item (example: iron ore)
* Lower slot must contain a fuel item (example: coal)
* See tooltips in crafting guide to learn about fuels and smeltable items
@ -162,7 +162,7 @@ Bonus features (not found in Minecraft):
* Built-in crafting guide which shows you crafting and smelting recipes
* In-game help system containing extensive help about gameplay basics, blocks, items and more
* Temporary crafting recipes. They only exist to make some otherwise unaccessible items available when you're not in creative mode. These recipes will be removed as development goes on an more features become available
* Saplings in chests in mapgen v6
* Saplings in chests in [mapgen v6](https://wiki.minetest.net/Map_generator#v6)
* Fully moddable (thanks to Minetest's powerful Lua API)
* New blocks and items:
* Lookup tool, shows you the help for whatever it touches

View File

@ -137,7 +137,7 @@ Fonctionnalités bonus (absentes de Minecraft) :
* Guide d'artisanat intégré au jeu qui montre les recettes d'artisanat et de cuisson
* Système d'aide intégré au jeu contenant des informations à propos des techniques de base, blocs, objets et plus
* Recettes d'artisanat temporaires. Elles existent uniquement pour rendre des objets accessibles qui ne le seraient pas autrement sauf en mode créatif. Elles seront retirées au cours de l'avancement du développement et de l'ajout de nouvelles fonctionnalités.
* Pousses dans les coffres en mapgen v6
* Pousses dans les coffres en [mapgen v6](https://wiki.minetest.net/Map_generator#v6)
* Entièrement moddable (grâce la puissante API Lua de Minetest)
* Nouveaux blocs et objets :
* Outil de recherche, montre l'aide de ce qu'il touche

View File

@ -154,12 +154,12 @@ Mineclone2, то ветка master обычно относительно ста
* Некоторые вагонетки (с сундуком и с воронкой уже работают)
* Пара нетривиальных блоков и предметов
Бонусные воронкой (нет в Minecraft-е):
Бонусные возможности (нет в Minecraft-е):
* Встроенный гайд для крафта покажет вам рецепты крафта и переплавки
* Внутриигровая справка содержит всестороннюю информацию об основах игры, блоках, предметах и прочее
* Временные рецепты крафта. Они существуют, чтобы получить доступ к ранее недоступным предметам вне творческого режима. Они будут удалены как только разработка позволит им стать доступными
* Саженцы в сундуках мапгена v6
* Саженцы в сундуках в [mapgen v6](https://wiki.minetest.net/Map_generator#v6)
* Полностью модифицируема (благодаря мощному Lua API в Minetest)
* Новые блоки и предметы:
* Инструмент просмотра покажет справку о том чего коснется
@ -177,7 +177,7 @@ Mineclone2, то ветка master обычно относительно ста
* Недостающие блоки, предметы, мобы
* Некоторые предметы с другими названиями, чтобы лучше их различать
* Другая музыка для проигрывателей
* Другие текступы (Pixel Perfection)
* Другие текстуры (Pixel Perfection)
* Другие звуки (разные источники)
* Другой движок (Minetest)
* Другие пасхалки

View File

@ -62,8 +62,13 @@ end
local function set_double_attach(boat)
boat._driver:set_attach(boat.object, "",
{x = 0, y = 0.42, z = 0.8}, {x = 0, y = 0, z = 0})
if boat._passenger:is_player() then
boat._passenger:set_attach(boat.object, "",
{x = 0, y = 0.42, z = -2.2}, {x = 0, y = 0, z = 0})
{x = 0, y = 0.42, z = -6.2}, {x = 0, y = 0, z = 0})
else
boat._passenger:set_attach(boat.object, "",
{x = 0, y = 0.42, z = -4.5}, {x = 0, y = 270, z = 0})
end
end
local function set_choat_attach(boat)
boat._driver:set_attach(boat.object, "",
@ -155,7 +160,7 @@ local boat = {
minetest.register_on_respawnplayer(detach_object)
function boat.on_rightclick(self, clicker)
if self._passenger or not clicker or clicker:get_attach() then
if self._passenger or not clicker or clicker:get_attach() or (self.name == "mcl_boats:chest_boat" and self._driver) then
return
end
attach_object(self, clicker)

View File

@ -21,7 +21,7 @@ mcl_dripping.register_drop({
-- The group the liquid's nodes belong to
liquid = "water",
-- The texture used (particles will take a random 2x2 area of it)
texture = "default_water_source_animated.png",
texture = "mcl_core_water_source_animation.png",
-- Define particle glow, ranges from `0` to `minetest.LIGHT_MAX`
light = 1,
-- The nodes (or node group) the particles will spawn under

View File

@ -82,7 +82,7 @@ end
mcl_dripping.register_drop({
liquid = "water",
texture = "default_water_source_animated.png",
texture = "mcl_core_water_source_animation.png",
light = 1,
nodes = { "group:opaque", "group:leaves" },
sound = "drippingwater_drip",
@ -92,7 +92,7 @@ mcl_dripping.register_drop({
mcl_dripping.register_drop({
liquid = "lava",
texture = "default_lava_source_animated.png",
texture = "mcl_core_lava_source_animation.png",
light = math.max(7, minetest.registered_nodes["mcl_core:lava_source"].light_source - 3),
nodes = { "group:opaque" },
sound = "drippingwater_lavadrip",

View File

@ -410,7 +410,7 @@ function mob_class:check_head_swivel(dtime)
--final_rotation = vector.new(0,0,0)
end
mcl_util.set_bone_position(self.object,self.head_swivel, vector.new(0,self.bone_eye_height,self.horrizonatal_head_height), final_rotation)
mcl_util.set_bone_position(self.object,self.head_swivel, vector.new(0,self.bone_eye_height,self.horizontal_head_height), final_rotation)
end

View File

@ -147,7 +147,7 @@ function mcl_mobs.register_mob(name, def)
head_eye_height = def.head_eye_height or def.bone_eye_height or 0, -- how hight aproximatly the mobs head is fromm the ground to tell the mob how high to look up at the player
curiosity = def.curiosity or 1, -- how often mob will look at player on idle
head_yaw = def.head_yaw or "y", -- axis to rotate head on
horrizonatal_head_height = def.horrizonatal_head_height or 0,
horizontal_head_height = def.horizontal_head_height or 0,
wears_armor = def.wears_armor, -- a number value used to index texture slot for armor
stepheight = def.stepheight or 0.6,
name = name,
@ -287,6 +287,7 @@ function mcl_mobs.register_mob(name, def)
spawn_in_group_min = def.spawn_in_group_min,
noyaw = def.noyaw or false,
particlespawners = def.particlespawners,
spawn_check = def.spawn_check,
-- End of MCL2 extensions
on_spawn = def.on_spawn,
on_blast = def.on_blast or function(self,damage)

View File

@ -2,6 +2,13 @@
local math, vector, minetest, mcl_mobs = math, vector, minetest, mcl_mobs
local mob_class = mcl_mobs.mob_class
local modern_lighting = minetest.settings:get_bool("mcl_mobs_modern_lighting", true)
local nether_threshold = tonumber(minetest.settings:get("mcl_mobs_nether_threshold")) or 11
local end_threshold = tonumber(minetest.settings:get("mcl_mobs_end_threshold")) or 0
local overworld_threshold = tonumber(minetest.settings:get("mcl_mobs_overworld_threshold")) or 0
local overworld_sky_threshold = tonumber(minetest.settings:get("mcl_mobs_overworld_sky_threshold")) or 7
local overworld_passive_threshold = tonumber(minetest.settings:get("mcl_mobs_overworld_passive_threshold")) or 7
local get_node = minetest.get_node
local get_item_group = minetest.get_item_group
local get_node_light = minetest.get_node_light
@ -709,9 +716,6 @@ local function spawn_check(pos, spawn_def)
and spawn_def.dimension == dimension
and biome_check(spawn_def.biomes, gotten_biome) then
--mcl_log("Level 1 spawn check passed")
--minetest.log("Mob: " .. mob_def.name)
if (is_ground or spawn_def.type_of_spawning ~= "ground")
and (spawn_def.type_of_spawning ~= "ground" or not is_leaf)
and (not is_farm_animal(spawn_def.name) or is_grass)
@ -721,20 +725,42 @@ local function spawn_check(pos, spawn_def)
and (spawn_def.check_position and spawn_def.check_position(pos) or spawn_def.check_position == nil)
and ( not spawn_protected or not minetest.is_protected(pos, "") ) then
--mcl_log("Level 2 spawn check passed")
local gotten_light = get_node_light(pos)
if gotten_light >= spawn_def.min_light and gotten_light <= spawn_def.max_light then
--mcl_log("Level 3 spawn check passed")
if modern_lighting then
local my_node = get_node(pos)
local sky_light = minetest.get_natural_light(pos)
local art_light = minetest.get_artificial_light(my_node.param1)
if dimension == "nether" then
if art_light <= nether_threshold then
return true
end
elseif dimension == "end" then
if art_light <= end_threshold then
return true
end
elseif dimension == "overworld" then
if mob_type == "monster" then
if mob_def.spawn_check then
return mob_def.spawn_check(pos, gotten_light, art_light, sky_light)
elseif art_light <= overworld_threshold and sky_light <= overworld_sky_threshold then
return true
else
--mcl_log("Spawn check level 3 failed")
end
else
--mcl_log("Spawn check level 2 failed")
if mob_def.spawn_check then
return mob_def.spawn_check(pos, gotten_light, art_light, sky_light)
elseif gotten_light > overworld_passive_threshold then
return true
end
end
end
else
--mcl_log("Spawn check level 1 failed")
if gotten_light >= spawn_def.min_light and gotten_light <= spawn_def.max_light then
return true
end
end
end
end
return false
end

View File

@ -13,7 +13,7 @@ local axolotl = {
head_swivel = "head.control",
bone_eye_height = -1,
head_eye_height = -0.5,
horrizonatal_head_height = 0,
horizontal_head_height = 0,
curiosity = 10,
head_yaw="z",

View File

@ -2,6 +2,18 @@
local S = minetest.get_translator("mobs_mc")
local function spawn_check(pos, environmental_light, artificial_light, sky_light)
local date = os.date("*t")
local maxlight
if (date.month == 10 and date.day >= 20) or (date.month == 11 and date.day <= 3) then
maxlight = 6
else
maxlight = 3
end
return artificial_light <= maxlight
end
mcl_mobs.register_mob("mobs_mc:bat", {
description = S("Bat"),
type = "animal",
@ -50,6 +62,7 @@ mcl_mobs.register_mob("mobs_mc:bat", {
jump = false,
fly = true,
makes_footstep_sound = false,
spawn_check = spawn_check,
})

View File

@ -11,6 +11,9 @@ local mod_target = minetest.get_modpath("mcl_target")
--################### BLAZE
--###################
local function spawn_check(pos, environmental_light, artificial_light, sky_light)
return artificial_light <= 11
end
mcl_mobs.register_mob("mobs_mc:blaze", {
description = S("Blaze"),
@ -137,6 +140,7 @@ mcl_mobs.register_mob("mobs_mc:blaze", {
},
})
end,
spawn_check = spawn_check,
})
mcl_mobs:spawn_specific(

View File

@ -23,7 +23,7 @@ mcl_mobs.register_mob("mobs_mc:chicken", {
head_swivel = "head.control",
bone_eye_height = 4,
head_eye_height = 1.5,
horrizonatal_head_height = -.3,
horizontal_head_height = -.3,
curiosity = 10,
head_yaw="z",
visual_size = {x=1,y=1},

View File

@ -24,7 +24,7 @@ local cow_def = {
head_swivel = "head.control",
bone_eye_height = 10,
head_eye_height = 1.1,
horrizonatal_head_height=-1.8,
horizontal_head_height=-1.8,
curiosity = 2,
head_yaw="z",
makes_footstep_sound = true,

View File

@ -4,12 +4,14 @@
--License for code WTFPL and otherwise stated in readmes
local S = minetest.get_translator("mobs_mc")
local allow_nav_hacks = minetest.settings:get_bool("mcl_mob_allow_nav_hacks ",false)
--###################
--################### IRON GOLEM
--###################
local etime = 0
local walk_dist = 40
local tele_dist = 80
mcl_mobs.register_mob("mobs_mc:iron_golem", {
description = S("Iron Golem"),
@ -85,11 +87,23 @@ mcl_mobs.register_mob("mobs_mc:iron_golem", {
punch_start = 40, punch_end = 50,
},
jump = true,
on_step = function(self,dtime)
etime = etime + dtime
if etime > 10 then
if self._home and vector.distance(self._home,self.object:get_pos()) > 50 then
self:gopath(self._home)
do_custom = function(self, dtime)
self.home_timer = (self.home_timer or 0) + dtime
if self.home_timer > 10 then
self.home_timer = 0
if self._home and self.state ~= "attack" then
local dist = vector.distance(self._home,self.object:get_pos())
if allow_nav_hacks and dist >= tele_dist then
self.object:set_pos(self._home)
self.state = "stand"
self.order = "follow"
elseif dist >= walk_dist then
self:gopath(self._home, function(self)
self.state = "stand"
self.order = "follow"
end)
end
end
end
end,

View File

@ -62,7 +62,7 @@ mcl_mobs.register_mob("mobs_mc:llama", {
head_swivel = "head.control",
bone_eye_height = 11,
head_eye_height = 3,
horrizonatal_head_height=0,
horizontal_head_height=0,
curiosity = 60,
head_yaw = "z",

View File

@ -39,7 +39,7 @@ local ocelot = {
head_swivel = "head.control",
bone_eye_height = 6.2,
head_eye_height = 0.4,
horrizonatal_head_height=-0,
horizontal_head_height=-0,
head_yaw="z",
curiosity = 4,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.69, 0.3},

View File

@ -137,7 +137,7 @@ mcl_mobs.register_mob("mobs_mc:parrot", {
xp_max = 3,
head_swivel = "head.control",
bone_eye_height = 1.1,
horrizonatal_head_height=0,
horizontal_head_height=0,
curiosity = 10,
collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.89, 0.25},
visual = "mesh",

View File

@ -22,7 +22,7 @@ mcl_mobs.register_mob("mobs_mc:pig", {
head_swivel = "head.control",
bone_eye_height = 7.5,
head_eye_height = 0.8,
horrizonatal_head_height=-1,
horizontal_head_height=-1,
curiosity = 3,
head_yaw="z",
makes_footstep_sound = true,

View File

@ -219,6 +219,10 @@ mcl_mobs.register_mob("mobs_mc:sword_piglin", sword_piglin)
-- Zombified Piglin --
local function spawn_check(pos, environmental_light, artificial_light, sky_light)
return artificial_light <= 11
end
local zombified_piglin = {
description = S("Zombie Piglin"),
-- type="animal", passive=false: This combination is needed for a neutral mob which becomes hostile, if attacked
@ -256,6 +260,7 @@ local zombified_piglin = {
},
jump = true,
makes_footstep_sound = true,
spawn_check = spawn_check,
walk_velocity = .8,
run_velocity = 2.6,
pathfinding = 1,

View File

@ -27,7 +27,7 @@ mcl_mobs.register_mob("mobs_mc:polar_bear", {
head_swivel = "head.control",
bone_eye_height = 2.6,
head_eye_height = 1,
horrizonatal_head_height = 0,
horizontal_head_height = 0,
curiosity = 20,
head_yaw="z",
visual_size = {x=3.0, y=3.0},

View File

@ -18,7 +18,7 @@ local rabbit = {
head_swivel = "head.control",
bone_eye_height = 2,
head_eye_height = 0.5,
horrizonatal_head_height = -.3,
horizontal_head_height = -.3,
curiosity = 20,
head_yaw="z",
visual = "mesh",

View File

@ -67,7 +67,7 @@ mcl_mobs.register_mob("mobs_mc:sheep", {
head_swivel = "head.control",
bone_eye_height = 3.3,
head_eye_height = 1.1,
horrizonatal_head_height=-.7,
horizontal_head_height=-.7,
curiosity = 6,
head_yaw="z",
visual = "mesh",

View File

@ -4,6 +4,10 @@
local S = minetest.get_translator("mobs_mc")
local function spawn_check(pos, environmental_light, artificial_light, sky_light)
return artificial_light <= 11
end
mcl_mobs.register_mob("mobs_mc:silverfish", {
description = S("Silverfish"),
type = "monster",
@ -53,6 +57,7 @@ mcl_mobs.register_mob("mobs_mc:silverfish", {
view_range = 16,
attack_type = "dogfight",
damage = 1,
spawn_check = spawn_check,
})
mcl_mobs.register_egg("mobs_mc:silverfish", S("Silverfish"), "#6d6d6d", "#313131", 0)

View File

@ -161,6 +161,18 @@ local spawn_children_on_die = function(child_mob, spawn_distance, eject_speed)
end
end
local swamp_light_max = 7
local function slime_spawn_check(pos, environmental_light, artificial_light, sky_light)
local maxlight = swamp_light_max
if is_slime_chunk(pos) then
maxlight = minetest.LIGHT_MAX + 1
end
return artificial_light <= maxlight
end
-- Slime
local slime_big = {
description = S("Slime"),
@ -213,6 +225,7 @@ local slime_big = {
spawn_small_alternative = "mobs_mc:slime_small",
on_die = spawn_children_on_die("mobs_mc:slime_small", 1.0, 1.5),
use_texture_alpha = true,
spawn_check = slime_spawn_check,
}
mcl_mobs.register_mob("mobs_mc:slime_big", slime_big)
@ -297,7 +310,6 @@ local cave_min = mcl_vars.mg_overworld_min
local cave_max = water_level - 23
local swampy_biomes = {"Swampland", "MangroveSwamp"}
local swamp_light_max = 7
local swamp_min = water_level
local swamp_max = water_level + 27

View File

@ -29,7 +29,7 @@ local wolf = {
head_swivel = "head.control",
bone_eye_height = 3.5,
head_eye_height = 1.1,
horrizonatal_head_height=0,
horizontal_head_height=0,
curiosity = 3,
head_yaw="z",
sounds = {

View File

@ -774,7 +774,7 @@ local function search(data)
for i = 1, #data.items_raw do
local item = data.items_raw[i]
local def = reg_items[item]
local desc = lower(def.description)
local desc = string.lower(M.get_translated_string(data.lang_code, def.description))
local search_in = item .. desc
local to_add
@ -838,6 +838,7 @@ local function init_data(name)
iX = sfinv_only and 8 or DEFAULT_SIZE,
items = init_items,
items_raw = init_items,
lang_code = M.get_player_information(name).lang_code or 'en',
}
end

21
mods/HUD/mcl_achievements/init.lua Normal file → Executable file
View File

@ -431,6 +431,27 @@ awards.register_achievement("mcl:wax_off", {
group = "Husbandry",
})
-- Triggered in mcl_smithing_table
awards.register_achievement("mcl:trim", {
title = S("Crafting a New Look"),
description = S("Craft a trimmed armor at a Smithing Table"),
icon = "dune_armor_trim_smithing_template.png",
type = "Advancement",
group = "Adventure",
})
awards.register_achievement("mcl:lots_of_trimming", {
title = S("Smithing with Style"),
description = S("Apply these smithing templates at least once: Spire, Snout, Rib, Ward, Silence, Vex, Tide, Wayfinder"),
icon = "silence_armor_trim_smithing_template.png",
type = "Advancement",
group = "Adventure",
on_unlock = function(name, awdef)
-- delete json that is no longer needed
minetest.get_player_by_name(name):get_meta():set_string("mcl_smithing_table:achievement_trims", "")
end,
})
-- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.)
if non_pc_achievements then

View File

@ -51,3 +51,7 @@ Bring Home the Beacon=Den Nachbarn heimleuchten
Use a beacon.=Benutzen Sie ein Leuchtfeuer.
Beaconator=Leuchtturmwärter
Use a fully powered beacon.=Benutzen Sie ein vollständiges Leuchtfeuer.
Crafting a New Look=Ein neues Aussehen
Craft a trimmed armor at a Smithing Table=Versieh ein Rüstungsteil an einem Schmiedetisch mit einem Rüstungsbesatz
Smithing with Style=Schmieden mit Stil
Apply these smithing templates at least once: Spire, Snout, Rib, Ward, Silence, Vex, Tide, Wayfinder=Wende jede dieser Schmiedevorlagen mindestens einmal an: Turmspitze, Schnauze, Rippe, Warthof, Stille, Plagegeist, Gezeiten und Wegfinder

4
mods/HUD/mcl_achievements/locale/template.txt Normal file → Executable file
View File

@ -111,3 +111,7 @@ Voluntary Exile=
Kill a raid captain. Maybe consider staying away from the local villages for the time being...=
Tactical Fishing=
Catch a fish... without a fishing rod!=
Crafting a New Look=
Craft a trimmed armor at a Smithing Table=
Smithing with Style=
Apply these smithing templates at least once: Spire, Snout, Rib, Ward, Silence, Vex, Tide, Wayfinder=

View File

@ -741,7 +741,8 @@ if minetest.is_creative_enabled("") then
for _, item in ipairs(drops) do
minetest.add_item(pos, item)
end
end
else
-- If there is a player
local inv = digger:get_inventory()
if inv then
for _, item in ipairs(drops) do
@ -751,6 +752,7 @@ if minetest.is_creative_enabled("") then
end
end
end
end
end
minetest.register_on_joinplayer(function(player)

View File

@ -246,6 +246,15 @@ function mesecon.mergetable(source, dest)
return rval
end
--
function mesecon.join_table(t1, t2)
local rval = mesecon.tablecopy(t2)
for i, v in ipairs(t1) do
table.insert(rval, mesecon.tablecopy(v))
end
return rval
end
function mesecon.register_node(name, spec_common, spec_off, spec_on)
spec_common.drop = spec_common.drop or name .. "_off"
spec_common.on_blast = spec_common.on_blast or mesecon.on_blastnode

View File

@ -211,6 +211,11 @@ function mesecon.register_button(basename, description, texture, recipeitem, sou
output = "mesecons_button:button_"..basename.."_off",
recipe = {{ recipeitem }},
})
if minetest.get_modpath("mesecons_mvps") then
mesecon.register_mvps_unsticky("mesecons_button:button_"..basename.."_off")
mesecon.register_mvps_unsticky("mesecons_button:button_"..basename.."_on")
end
end
mesecon.register_button(

View File

@ -117,7 +117,7 @@ local function is_available(pos)
return false, n
end
if minetest.registered_nodes[name] then
return minetest.registered_nodes[name].buildable_to, n or false, n
return minetest.registered_nodes[name].buildable_to or minetest.get_item_group(name, "dig_by_piston") == 1, n or false, n
end
return false, n
end
@ -126,6 +126,7 @@ end
function mesecon.mvps_get_stack(pos, dir, maximum, piston_pos)
-- determine the number of nodes to be pushed
local nodes = {}
local dig_nodes = {}
local frontiers = {pos}
while #frontiers > 0 do
@ -140,22 +141,24 @@ function mesecon.mvps_get_stack(pos, dir, maximum, piston_pos)
return
end
if minetest.get_item_group(nn.name, "dig_by_piston") == 1 then
-- if we want the node to drop, e.g. sugar cane, do not count towards push limit
table.insert(dig_nodes, {node = nn, pos = {x=np.x, y=np.y, z=np.z}})
else
if not node_replaceable(nn.name) then
if #nodes >= maximum then return nil, false end
table.insert(nodes, {node = nn, pos = {x=np.x, y=np.y, z=np.z}})
if #nodes > maximum then return nil, nil, false, true end
-- add connected nodes to frontiers, connected is a vector list
-- the vectors must be absolute positions
local connected = {}
local has_loop
if minetest.registered_nodes[nn.name]
and minetest.registered_nodes[nn.name].mvps_sticky then
if minetest.registered_nodes[nn.name] and minetest.registered_nodes[nn.name].mvps_sticky then
connected, has_loop = minetest.registered_nodes[nn.name].mvps_sticky(np, nn, piston_pos)
if has_loop then
return {}, true
return {}, {}, true, false
end
end
table.insert(connected, vector.add(np, dir))
-- Make sure there are no duplicates in frontiers / nodes before
@ -172,15 +175,16 @@ function mesecon.mvps_get_stack(pos, dir, maximum, piston_pos)
duplicate = true
end
end
if not duplicate and not mesecon.is_mvps_stopper(minetest.get_node(cp)) then
if not duplicate and not mesecon.is_mvps_stopper(minetest.get_node(cp)) and minetest.get_item_group(nn.name, "dig_by_piston") == 0 then
table.insert(frontiers, cp)
end
end
end
end
table.remove(frontiers, 1)
end
return nodes, false
return nodes, dig_nodes, false, false
end
function mesecon.mvps_set_owner(pos, placer)
@ -203,6 +207,11 @@ local function are_protected(nodes, player_name)
end
function mesecon.mvps_push(pos, dir, maximum, player_name, piston_pos)
-- check if the node in front of the piston is protected against player_name (to prevent replacing air)
if minetest.is_protected(pos, player_name) then
return false
end
return mesecon.mvps_push_or_pull(pos, dir, dir, maximum, player_name, piston_pos)
end
@ -222,9 +231,9 @@ end
-- movedir: direction of actual movement
-- maximum: maximum nodes to be pushed
function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name, piston_pos)
local nodes, has_loop = mesecon.mvps_get_stack(pos, movedir, maximum, piston_pos)
local nodes, dig_nodes, has_loop, too_many = mesecon.mvps_get_stack(pos, movedir, maximum, piston_pos)
if has_loop then
if has_loop or too_many then
return false
end
@ -237,6 +246,9 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
if (newpos[i].x == piston_pos.x) and (newpos[i].y == piston_pos.y) and (newpos[i].z == piston_pos.z) then
return
end
if minetest.is_protected(newpos[i], player_name) then
return
end
if not is_available(newpos[i]) then
local available = false
for j in ipairs(nodes) do
@ -253,18 +265,35 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
end
end
if are_protected(nodes, player_name) then
local all_nodes = nodes
if dig_nodes and #dig_nodes > 0 then all_nodes = mesecon.join_table(dig_nodes, nodes) end
if are_protected(all_nodes, player_name) then
return
end
local first_dropper = nil
-- remove all nodes
for id, n in ipairs(nodes) do
for id, n in ipairs(all_nodes) do
n.meta = minetest.get_meta(n.pos):to_table()
local is_dropper = mesecon.is_mvps_dropper(n.node, movedir, nodes, id)
local is_dropper = mesecon.is_mvps_dropper(n.node, movedir, all_nodes, id)
if is_dropper then
--local drops = minetest.get_node_drops(n.node.name, "")
minetest.dig_node(n.pos)
-- if current node has already been destroyed (e.g. chain reaction of sugar cane breaking), skip it
if minetest.get_node(n.pos).name == n.node.name then
-- simulate dig_node using handle_node_drops
local drops = minetest.get_node_drops(n.node.name, "")
local counted_drops = {}
minetest.remove_node(n.pos)
for _, callback in pairs(minetest.registered_on_dignodes) do
callback(n.pos, n)
end
for _, item in ipairs(drops) do
if type(item) ~= "string" then
item = item:get_name() .. item:get_count()
end
table.insert(counted_drops, item)
end
minetest.handle_node_drops(n.pos, counted_drops)
end
else
minetest.remove_node(n.pos)
local node_timer = minetest.get_node_timer(n.pos)
@ -273,13 +302,13 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
end
end
if is_dropper then
first_dropper = id
break
-- get id of the first dropper, but we still let everything else drop, so don't break here
if not first_dropper then first_dropper = id end
end
end
-- update mesecons for removed nodes ( has to be done after all nodes have been removed )
for id, n in ipairs(nodes) do
for id, n in ipairs(all_nodes) do
if first_dropper and id >= first_dropper then
break
end
@ -287,7 +316,7 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
end
-- add nodes
for id, n in ipairs(nodes) do
for id, n in ipairs(all_nodes) do
if first_dropper and id >= first_dropper then
break
end
@ -394,6 +423,7 @@ mesecon.register_mvps_stopper("mcl_core:realm_barrier")
mesecon.register_mvps_stopper("mcl_core:void")
mesecon.register_mvps_stopper("mcl_core:bedrock")
mesecon.register_mvps_stopper("mcl_core:obsidian")
mesecon.register_mvps_stopper("mcl_core:crying_obsidian")
mesecon.register_mvps_stopper("mcl_chests:ender_chest")
mesecon.register_mvps_stopper("mcl_chests:ender_chest_small")
mesecon.register_mvps_stopper("mcl_mobspawners:spawner")
@ -411,10 +441,9 @@ 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")
mesecon.register_mvps_stopper("mcl_beehives:bee_nest")
mesecon.register_mvps_stopper("mcl_beehives:beehive")
mesecon.register_mvps_stopper("mcl_compass:lodestone")
-- Unmovable by technical restrictions.
-- Open formspec would screw up if node is destroyed (minor problem)
@ -445,13 +474,14 @@ mesecon.register_mvps_stopper("mcl_chests:trapped_chest")
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_small")
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_left")
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_right")
mesecon.register_mvps_stopper("mcl_signs:wall_sign")
mesecon.register_mvps_stopper("mcl_signs:standing_sign")
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5")
mesecon.register_mvps_stopper("mcl_signs:standing_sign45")
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5")
mesecon.register_mvps_stopper("mcl_barrels:barrel_open")
mesecon.register_mvps_stopper("mcl_barrels:barrel_closed")
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")
mesecon.register_mvps_stopper("mcl_lectern:lectern")
mesecon.register_mvps_stopper("mcl_grindstone:grindstone")
-- Unmovable by design: objects
@ -495,8 +525,6 @@ mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_2")
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_3")
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_door")
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_trapdoor")
mesecon.register_mvps_unsticky("mcl_signs:wall_sign_bamboo")
mesecon.register_mvps_unsticky("mcl_bamboo:scaffolding")
-- Beds
@ -532,21 +560,6 @@ mesecon.register_mvps_unsticky("mcl_beds:bed_white_top")
mesecon.register_mvps_unsticky("mcl_beds:bed_white_bottom")
mesecon.register_mvps_unsticky("mcl_beds:bed_yellow_top")
mesecon.register_mvps_unsticky("mcl_beds:bed_yellow_bottom")
-- Buttons
mesecon.register_mvps_unsticky("mesecons_button:button_stone_off")
mesecon.register_mvps_unsticky("mesecons_button:button_stone_on")
mesecon.register_mvps_unsticky("mesecons_button:button_wood_off")
mesecon.register_mvps_unsticky("mesecons_button:button_wood_on")
mesecon.register_mvps_unsticky("mesecons_button:button_acaciawood_off")
mesecon.register_mvps_unsticky("mesecons_button:button_acaciawood_on")
mesecon.register_mvps_unsticky("mesecons_button:button_birchwood_off")
mesecon.register_mvps_unsticky("mesecons_button:button_birchwood_on")
mesecon.register_mvps_unsticky("mesecons_button:button_darkwood_off")
mesecon.register_mvps_unsticky("mesecons_button:button_darkwood_on")
mesecon.register_mvps_unsticky("mesecons_button:button_sprucewood_off")
mesecon.register_mvps_unsticky("mesecons_button:button_sprucewood_on")
mesecon.register_mvps_unsticky("mesecons_button:button_junglewood_off")
mesecon.register_mvps_unsticky("mesecons_button:button_junglewood_on")
-- Cactus, Sugarcane & Vines
mesecon.register_mvps_unsticky("mcl_core:cactus")
mesecon.register_mvps_unsticky("mcl_core:reeds")
@ -559,23 +572,6 @@ mesecon.register_mvps_unsticky("mcl_cake:cake_4")
mesecon.register_mvps_unsticky("mcl_cake:cake_5")
mesecon.register_mvps_unsticky("mcl_cake:cake_6")
mesecon.register_mvps_unsticky("mcl_cake:cake")
-- Carpet
mesecon.register_mvps_unsticky("mcl_wool:black_carpet")
mesecon.register_mvps_unsticky("mcl_wool:blue_carpet")
mesecon.register_mvps_unsticky("mcl_wool:brown_carpet")
mesecon.register_mvps_unsticky("mcl_wool:cyan_carpet")
mesecon.register_mvps_unsticky("mcl_wool:green_carpet")
mesecon.register_mvps_unsticky("mcl_wool:grey_carpet")
mesecon.register_mvps_unsticky("mcl_wool:light_blue_carpet")
mesecon.register_mvps_unsticky("mcl_wool:lime_carpet")
mesecon.register_mvps_unsticky("mcl_wool:orange_carpet")
mesecon.register_mvps_unsticky("mcl_wool:magenta_carpet")
mesecon.register_mvps_unsticky("mcl_wool:pink_carpet")
mesecon.register_mvps_unsticky("mcl_wool:purple_carpet")
mesecon.register_mvps_unsticky("mcl_wool:red_carpet")
mesecon.register_mvps_unsticky("mcl_wool:silver_carpet")
mesecon.register_mvps_unsticky("mcl_wool:white_carpet")
mesecon.register_mvps_unsticky("mcl_wool:yellow_carpet")
-- Carved & Jack O'Lantern Pumpkins, Pumpkin & Melon
mesecon.register_mvps_unsticky("mcl_farming:pumpkin_face")
mesecon.register_mvps_unsticky("mcl_farming:pumpkin_face_light")
@ -907,16 +903,16 @@ mesecon.register_mvps_unsticky("mcl_chests:black_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:blue_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:brown_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:cyan_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:dark_green_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:dark_grey_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:lightblue_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:green_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:grey_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:light_blue_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:lime_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:orange_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:magenta_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:pink_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:purple_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:violet_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:red_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:silver_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:grey_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:white_shulker_box_small")
mesecon.register_mvps_unsticky("mcl_chests:yellow_shulker_box_small")
-- Snow

View File

@ -152,8 +152,6 @@ function mesecon.noteblock_play(pos, param2)
soundname="mesecons_noteblock_xylophone_metal"
elseif block_below_name == "mcl_nether:soul_sand" then
soundname="mesecons_noteblock_cowbell"
elseif block_below_name == "mcl_farming:pumpkin" or block_below_name == "mcl_farming:pumpkin_face" or block_below_name == "mcl_farming:pumpkin_face_light" then
soundname="mesecons_noteblock_didgeridoo"
elseif block_below_name == "mcl_core:emeraldblock" then
soundname="mesecons_noteblock_squarewave"
elseif block_below_name == "mcl_farming:hay_block" then
@ -162,6 +160,8 @@ function mesecon.noteblock_play(pos, param2)
soundname="mesecons_noteblock_piano_digital"
elseif minetest.get_item_group(block_below_name, "wool") ~= 0 then
soundname="mesecons_noteblock_guitar"
elseif minetest.get_item_group(block_below_name, "pumpkin") ~= 0 then
soundname="mesecons_noteblock_didgeridoo"
elseif minetest.get_item_group(block_below_name, "material_glass") ~= 0 then
soundname="mesecons_noteblock_hit"
elseif minetest.get_item_group(block_below_name, "material_wood") ~= 0 then

View File

@ -138,8 +138,6 @@ local function piston_off(pos, node)
end
local function piston_orientate(pos, placer)
mesecon.mvps_set_owner(pos, placer)
-- not placed by player
if not placer then return end
@ -153,6 +151,9 @@ local function piston_orientate(pos, placer)
elseif pitch < -55 then
minetest.add_node(pos, {name=pistonspec.piston_down})
end
-- set owner meta after setting node, or it will not keep
mesecon.mvps_set_owner(pos, placer)
end

8
mods/ITEMS/mcl_armor/api.lua Normal file → Executable file
View File

@ -326,7 +326,7 @@ end
tt.register_snippet(function(itemstring, toolcaps, stack)
if not stack then return nil end
local meta = stack:get_meta()
if meta:get_string("mcl_armor:trim_overlay") == "" then return nil end -- remember, get_string returns "" if the key doesn't exist
if not mcl_armor.is_trimmed(stack) then return nil end
-- we need to get the part of the overlay image between the overlay begin ( and the trim name end _
-- we COULD easily store this info in meta, but that would bloat the meta storage, as the same few values would be stored over and over again on every trimmed item
-- this is fine here as this code gets only executed when you put armor and a trim in a smithing table
@ -334,3 +334,9 @@ tt.register_snippet(function(itemstring, toolcaps, stack)
local trim_name = full_overlay:match("%((.-)%_")
return "Upgrade:\n " .. trim_name:gsub("^%l", string.upper) .. " Armor Trim"
end)
function mcl_armor.is_trimmed(itemstack)
-- this meta value will be there for every trimmed armor piece
-- remember, get_string returns "" if the key doesn't exist
return itemstack:get_meta():get_string("mcl_armor:trim_overlay") ~= ""
end

View File

@ -60,7 +60,7 @@ mcl_armor = {
trims = {
core_textures = {},
blacklisted = {["mcl_armor:elytra"]=true, ["mcl_armor:elytra_enchanted"]=true},
overlays = {"sentry","dune","coast","wild","tide","ward","vex","rib","snout","eye","spire"},
overlays = {"sentry","dune","coast","wild","tide","ward","vex","rib","snout","eye","spire","silence","wayfinder"},
colors = {["amethyst"]="#8246a5",["gold"]="#ce9627",["emerald"]="#1b9958",["copper"]="#c36447",["diamond"]="#5faed8",["iron"]="#938e88",["lapis"]="#1c306b",["netherite"]="#302a26",["quartz"]="#c9bcb9",["redstone"]="#af2c23"},
},
}

View File

@ -44,3 +44,21 @@ minetest.register_craft({
{"mcl_core:diamond","mcl_core:diamond","mcl_core:diamond"},
}
})
minetest.register_craft({
output = mod_registername .. "silence",
recipe = {
{"mcl_core:diamond","mcl_core:diamond","mcl_core:diamond"},
{"mcl_core:diamond", mod_registername.."ward","mcl_core:diamond"},
{"mcl_core:diamond","mcl_core:diamond","mcl_core:diamond"},
}
})
minetest.register_craft({
output = mod_registername .. "wayfinder",
recipe = {
{"mcl_core:diamond","mcl_core:diamond","mcl_core:diamond"},
{"mcl_core:diamond", "mcl_maps:empty_map","mcl_core:diamond"},
{"mcl_core:diamond","mcl_core:diamond","mcl_core:diamond"},
}
})

View File

@ -251,7 +251,7 @@ local bamboo_def = {
minetest.register_node(BAMBOO, bamboo_def)
local bamboo_top = table.copy(bamboo_def)
bamboo_top.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
bamboo_top.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
bamboo_top.tiles = {"mcl_bamboo_endcap.png"}
bamboo_top.drawtype = "plantlike_rooted" --"plantlike"
--bamboo_top.paramtype2 = "meshoptions"
@ -361,7 +361,7 @@ bamboo_one_def.selection_box = {
{-0.05, -0.5, 0.285, -0.275, 0.5, 0.06},
}
}
bamboo_one_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
bamboo_one_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
mcl_bamboo.mcl_log(dump(mcl_bamboo.bamboo_index))
minetest.register_node(mcl_bamboo.bamboo_index[2], bamboo_one_def)
local bamboo_two_def = table.copy(bamboo_def)
@ -385,7 +385,7 @@ bamboo_two_def.selection_box = {
{0.25, -0.5, 0.325, 0.025, 0.5, 0.100},
}
}
bamboo_two_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
bamboo_two_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
minetest.register_node(mcl_bamboo.bamboo_index[3], bamboo_two_def)
local bamboo_three_def = table.copy(bamboo_def)
@ -408,5 +408,5 @@ bamboo_three_def.selection_box = {
{-0.125, -0.5, 0.125, -0.3125, 0.5, 0.3125},
}
}
bamboo_three_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
bamboo_three_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
minetest.register_node(mcl_bamboo.bamboo_index[4], bamboo_three_def)

View File

@ -192,10 +192,23 @@ if minetest.get_modpath("mcl_fences") then
local wood_groups = { handy = 1, axey = 1, flammable = 2, fence_wood = 1, fire_encouragement = 5, fire_flammability = 20 }
local wood_connect = { "group:fence_wood" }
local fence_id = mcl_fences.register_fence(id, S("Bamboo Fence"), "mcl_bamboo_fence_bamboo.png", wood_groups,
2, 15, wood_connect, node_sound)
local gate_id = mcl_fences.register_fence_gate(id, S("Bamboo Fence Gate"), "mcl_bamboo_fence_gate_bamboo.png",
wood_groups, 2, 15, node_sound) -- note: about missing params.. will use defaults.
local fence_id = mcl_fences.register_fence(
id,
S("Bamboo Fence"),
"mcl_bamboo_fence_bamboo.png",
wood_groups,
minetest.registered_nodes["mcl_core:wood"]._mcl_hardness,
minetest.registered_nodes["mcl_core:wood"]._mcl_blast_resistance,
wood_connect, node_sound)
local gate_id = mcl_fences.register_fence_gate(
id,
S("Bamboo Fence Gate"),
"mcl_bamboo_fence_gate_bamboo.png",
wood_groups,
minetest.registered_nodes["mcl_core:wood"]._mcl_hardness,
minetest.registered_nodes["mcl_core:wood"]._mcl_blast_resistance,
node_sound) -- note: about missing params.. will use defaults.
mcl_bamboo.mcl_log(dump(fence_id))
mcl_bamboo.mcl_log(dump(gate_id))

View File

@ -67,7 +67,7 @@ end
local BAMBOO_ENDCAP_NAME = "mcl_bamboo:bamboo_endcap"
-- For when I learn more about the pistons...
-- check if supporting block is broken. pistons now break the bamboo plant.
function mcl_bamboo.break_orphaned(pos)
mcl_bamboo.mcl_log("Break_Orphaned called.")
local node_below = minetest.get_node(vector.offset(pos, 0, -1, 0))

View File

@ -33,7 +33,7 @@ minetest.register_node("mcl_bells:bell", {
"mcl_bells_bell_side.png",
},
is_ground_content = false,
groups = {pickaxey=2, deco_block=1 },
groups = {pickaxey=2, deco_block=1, dig_by_piston=1 },
sounds = mcl_sounds.node_sound_metal_defaults(),
_mcl_blast_resistance = 5,
_mcl_hardness = 5,

View File

@ -199,7 +199,11 @@ mcl_stairs.register_stair_and_slab_simple("blackstone_chiseled_polished", "mcl_b
mcl_stairs.register_stair_and_slab_simple("blackstone_brick_polished", "mcl_blackstone:blackstone_brick_polished", S("Polished Blackstone Brick Stair"), S("Polished Blackstone Brick Slab"), S("Double Polished Blackstone Brick Slab"))
--Wall
mcl_walls.register_wall("mcl_blackstone:wall", S("Blackstone Wall"), "mcl_blackstone:blackstone")
mcl_walls.register_wall(
"mcl_blackstone:wall",
S("Blackstone Wall"),
"mcl_blackstone:blackstone"
)
--lavacooling

View File

@ -67,12 +67,12 @@ local function register_filled_cauldron(water_level, description, liquid)
local water_tex
if liquid == "river_water" then
id = id .. "r"
water_tex = "default_water_source_animated.png^[verticalframe:16:0^[multiply:#0084FF"
water_tex = "mcl_core_water_source_animation.png^[verticalframe:16:0^[multiply:#0084FF"
elseif liquid == "lava" then
id = id .. "_lava"
water_tex = "default_lava_source_animated.png^[verticalframe:16:0"
water_tex = "mcl_core_lava_source_animation.png^[verticalframe:16:0"
else
water_tex = "default_water_source_animated.png^[verticalframe:16:0^[multiply:#3F76E4"
water_tex = "mcl_core_water_source_animation.png^[verticalframe:16:0^[multiply:#3F76E4"
end
minetest.register_node(id, {
description = description,

View File

@ -66,9 +66,16 @@ mcl_signs.register_sign_custom("mcl_cherry_blossom", "_cherrywood",
"mcl_cherry_blossom_sign_inv.png", "mcl_cherry_blossom_sign_inv.png", S("Cherry Sign"))
-- Fences & Gates
mcl_fences.register_fence_and_fence_gate("cherry_fence", S("Cherry Fence"), S("Cherry Gate"),
"mcl_cherry_blossom_planks.png", {handy=1, axey=1, flammable=2, fence_wood=1, fire_encouragement=5, fire_flammability=20}, 2, 15,
{"group:fence_wood"}, mcl_sounds.node_sound_wood_defaults())
mcl_fences.register_fence_and_fence_gate(
"cherry_fence",
S("Cherry Fence"),
S("Cherry Gate"),
"mcl_cherry_blossom_planks.png",
{handy=1, axey=1, flammable=2, fence_wood=1, fire_encouragement=5, fire_flammability=20},
minetest.registered_nodes["mcl_core:wood"]._mcl_hardness,
minetest.registered_nodes["mcl_core:wood"]._mcl_blast_resistance,
{"group:fence_wood"},
mcl_sounds.node_sound_wood_defaults())
-- Redstone
mesecon.register_pressure_plate(

View File

@ -406,7 +406,7 @@ mcl_core.register_snowed_node("mcl_core:dirt_with_grass_snow", "mcl_core:dirt_wi
minetest.register_node("mcl_core:grass_path", {
tiles = {"mcl_core_grass_path_top.png", "default_dirt.png", "mcl_core_grass_path_side.png"},
description = S("Grass Path"),
_doc_items_longdesc = S("Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block."),
_doc_items_longdesc = S("Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created by right clicking with a shovel. A grass path turns into dirt when it is below a solid block or when shift+right clicked with a shovel."),
drop = "mcl_core:dirt",
is_ground_content = true,
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
@ -419,7 +419,7 @@ minetest.register_node("mcl_core:grass_path", {
{-0.5, -0.5, -0.5, 0.5, 0.4375, 0.5},
}
},
groups = {handy=1,shovely=1, cultivatable=2, dirtifies_below_solid=1, dirtifier=1, deco_block=1 },
groups = {handy=1,shovely=1, cultivatable=2, dirtifies_below_solid=1, dirtifier=1, deco_block=1, path_remove_possible=1 },
sounds = mcl_sounds.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.1},
}),

View File

@ -11,12 +11,39 @@ local function rotate_climbable(pos, node, user, mode)
return false
end
---Updates the trapdoor above (if any).
---
---@param pos mt.Vector The position of the ladder.
---@param event "place" | "destruct" The place or destruct event.
function mcl_core.update_trapdoor(pos, event)
local top_pos = vector.offset(pos, 0, 1, 0)
local top_node = minetest.get_node_or_nil(top_pos)
if top_node and minetest.get_item_group(top_node.name, "trapdoor") == 2 then
local new_name = top_node.name
if event == "place" then
new_name = string.gsub(new_name, "open$", "ladder")
elseif event == "destruct" then
new_name = string.gsub(new_name, "ladder$", "open")
end
-- If node above is an opened trapdoor
minetest.swap_node(top_pos, {
name = new_name,
param1 = top_node.param1,
param2 = top_node.param2,
})
end
end
-- TODO: Move ladders into their own API.
minetest.register_node("mcl_core:ladder", {
description = S("Ladder"),
_doc_items_longdesc = S("A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns."),
_doc_items_longdesc = S(
"A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns."),
drawtype = "signlike",
is_ground_content = false,
tiles = {"default_ladder.png"},
tiles = { "default_ladder.png" },
inventory_image = "default_ladder.png",
wield_image = "default_ladder.png",
paramtype = "light",
@ -26,14 +53,21 @@ minetest.register_node("mcl_core:ladder", {
climbable = true,
node_box = {
type = "wallmounted",
wall_side = { -0.5, -0.5, -0.5, -7/16, 0.5, 0.5 },
wall_side = { -0.5, -0.5, -0.5, -7 / 16, 0.5, 0.5 },
},
selection_box = {
type = "wallmounted",
wall_side = { -0.5, -0.5, -0.5, -7/16, 0.5, 0.5 },
wall_side = { -0.5, -0.5, -0.5, -7 / 16, 0.5, 0.5 },
},
stack_max = 64,
groups = {handy=1,axey=1, attached_node=1, deco_block=1, dig_by_piston=1},
groups = {
handy = 1,
axey = 1,
attached_node = 1,
deco_block = 1,
dig_by_piston = 1,
ladder = 1
},
sounds = mcl_sounds.node_sound_wood_defaults(),
node_placement_prediction = "",
-- Restrict placement of ladders
@ -75,12 +109,17 @@ minetest.register_node("mcl_core:ladder", {
if success then
if idef.sounds and idef.sounds.place then
minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true)
minetest.sound_play(idef.sounds.place, { pos = above, gain = 1 }, true)
end
end
return itemstack
end,
after_destruct = function(pos, old)
mcl_core.update_trapdoor(pos, "destruct")
end,
after_place_node = function(pos)
mcl_core.update_trapdoor(pos, "place")
end,
_mcl_blast_resistance = 0.4,
_mcl_hardness = 0.4,
on_rotate = rotate_climbable,
@ -89,9 +128,10 @@ minetest.register_node("mcl_core:ladder", {
minetest.register_node("mcl_core:vine", {
description = S("Vines"),
_doc_items_longdesc = S("Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread."),
_doc_items_longdesc = S(
"Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread."),
drawtype = "signlike",
tiles = {"mcl_core_vine.png"},
tiles = { "mcl_core_vine.png" },
color = "#48B518",
inventory_image = "mcl_core_vine.png",
wield_image = "mcl_core_vine.png",
@ -107,9 +147,19 @@ minetest.register_node("mcl_core:vine", {
},
stack_max = 64,
groups = {
handy = 1, axey = 1, shearsy = 1, swordy = 1, deco_block = 1,
dig_by_piston = 1, destroy_by_lava_flow = 1, compostability = 50,
flammable = 2, fire_encouragement = 15, fire_flammability = 100, foliage_palette_wallmounted = 1
handy = 1,
axey = 1,
shearsy = 1,
swordy = 1,
deco_block = 1,
dig_by_piston = 1,
destroy_by_lava_flow = 1,
compostability = 50,
flammable = 2,
fire_encouragement = 15,
fire_flammability = 100,
foliage_palette_wallmounted = 1,
ladder = 1
},
sounds = mcl_sounds.node_sound_leaves_defaults(),
drop = "",
@ -151,7 +201,7 @@ minetest.register_node("mcl_core:vine", {
if success then
if idef.sounds and idef.sounds.place then
minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true)
minetest.sound_play(idef.sounds.place, { pos = above, gain = 1 }, true)
end
end
return itemstack
@ -174,13 +224,19 @@ minetest.register_node("mcl_core:vine", {
-- If dug, also dig a “dependant” vine below it.
-- A vine is dependant if it hangs from this node and has no supporting block.
on_dig = function(pos, node, digger)
local below = vector.offset(pos,0,-1,0)
local below = vector.offset(pos, 0, -1, 0)
local belownode = minetest.get_node(below)
minetest.node_dig(pos, node, digger)
if belownode.name == node.name and (not mcl_core.check_vines_supported(below, belownode)) then
minetest.registered_nodes[node.name].on_dig(below, node, digger)
end
end,
after_destruct = function(pos, old)
mcl_core.update_trapdoor(pos, "destruct")
end,
after_place_node = function(pos)
mcl_core.update_trapdoor(pos, "place")
end,
_mcl_blast_resistance = 0.2,

View File

@ -18,17 +18,17 @@ end
minetest.register_node("mcl_core:water_flowing", {
description = S("Flowing Water"),
_doc_items_create_entry = false,
wield_image = "default_water_flowing_animated.png^[verticalframe:64:0",
wield_image = "mcl_core_water_flow_animation.png^[verticalframe:64:0",
drawtype = "flowingliquid",
tiles = {"default_water_flowing_animated.png^[verticalframe:64:0"},
tiles = {"mcl_core_water_flow_animation.png^[verticalframe:64:0"},
special_tiles = {
{
image="default_water_flowing_animated.png",
image="mcl_core_water_flow_animation.png",
backface_culling=false,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1.5}
},
{
image="default_water_flowing_animated.png",
image="mcl_core_water_flow_animation.png",
backface_culling=false,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1.5}
},
@ -71,12 +71,12 @@ S("• When water is directly below lava, the water turns into stone."),
drawtype = "liquid",
waving = 3,
tiles = {
{name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
{name="mcl_core_water_source_animation.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
},
special_tiles = {
-- New-style water source material (mostly unused)
{
name="default_water_source_animated.png",
name="mcl_core_water_source_animation.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0},
backface_culling = false,
}
@ -119,17 +119,17 @@ S("• When water is directly below lava, the water turns into stone."),
minetest.register_node("mcl_core:lava_flowing", {
description = S("Flowing Lava"),
_doc_items_create_entry = false,
wield_image = "default_lava_flowing_animated.png^[verticalframe:64:0",
wield_image = "mcl_core_lava_flow_animation.png^[verticalframe:64:0",
drawtype = "flowingliquid",
tiles = {"default_lava_flowing_animated.png^[verticalframe:64:0"},
tiles = {"mcl_core_lava_flow_animation.png^[verticalframe:64:0"},
special_tiles = {
{
image="default_lava_flowing_animated.png",
image="mcl_core_lava_flow_animation.png",
backface_culling=false,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=6.6}
},
{
image="default_lava_flowing_animated.png",
image="mcl_core_lava_flow_animation.png",
backface_culling=false,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=6.6}
},
@ -182,12 +182,12 @@ S("• When flowing water touches flowing lava either from above or horizontally
S("• When lava is directly above water, the water turns into stone."),
drawtype = "liquid",
tiles = {
{name="default_lava_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
{name="mcl_core_lava_source_animation.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
},
special_tiles = {
-- New-style lava source material (mostly unused)
{
name="default_lava_source_animated.png",
name="mcl_core_lava_source_animation.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0},
backface_culling = false,
}

View File

@ -139,8 +139,8 @@ minetest.register_node("mcl_core:deadbush", {
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {handy = 1, shearsy = 1, flammable = 3, attached_node = 1, plant = 1, non_mycelium_plant = 1, dig_by_water = 1,
destroy_by_lava_flow = 1, deco_block = 1, fire_encouragement = 60, fire_flammability = 100},
groups = {handy = 1, shearsy = 1, flammable = 3, attached_node = 1, plant = 1, non_mycelium_plant = 1, dig_by_piston = 1,
dig_by_water = 1, destroy_by_lava_flow = 1, deco_block = 1, fire_encouragement = 60, fire_flammability = 100},
drop = {
max_items = 1,
items = {

View File

@ -218,7 +218,10 @@ local function register_deepslate_variant(item, desc, longdesc)
end
if item ~= "chiseled" then
mcl_stairs.register_stair_and_slab_simple("deepslate_"..item, "mcl_deepslate:deepslate_"..item, S(desc.." Stairs"), S(desc.." Slab"), S("Double "..desc.." Slab"))
mcl_walls.register_wall("mcl_deepslate:deepslate"..item.."wall", S(desc.." Wall"), "mcl_deepslate:deepslate_"..item)
mcl_walls.register_wall(
"mcl_deepslate:deepslate"..item.."wall",
S(desc.." Wall"),
"mcl_deepslate:deepslate_"..item)
end
end

View File

@ -67,12 +67,23 @@ function mcl_doors:register_trapdoor(name, def)
local tmp_node
-- Close
if minetest.get_item_group(me.name, "trapdoor") == 2 then
minetest.sound_play(def.sound_close, {pos = pos, gain = 0.3, max_hear_distance = 16}, true)
tmp_node = {name=name, param1=me.param1, param2=me.param2}
minetest.sound_play(def.sound_close, { pos = pos, gain = 0.3, max_hear_distance = 16 }, true)
tmp_node = { name = name, param1 = me.param1, param2 = me.param2 }
-- Open
else
minetest.sound_play(def.sound_open, {pos = pos, gain = 0.3, max_hear_distance = 16}, true)
tmp_node = {name=name.."_open", param1=me.param1, param2=me.param2}
minetest.sound_play(def.sound_open, { pos = pos, gain = 0.3, max_hear_distance = 16 }, true)
local bottom_node = minetest.get_node_or_nil(vector.offset(pos, 0, -1, 0))
local name_end = "_open"
-- Checking if there is something underneath the trapdoor
if bottom_node then
local is_ladder = minetest.get_item_group(bottom_node.name, "ladder")
if is_ladder > 0 then
name_end = "_ladder"
end
end
tmp_node = { name = name .. name_end, param1 = me.param1, param2 = me.param2 }
end
minetest.set_node(pos, tmp_node)
end
@ -89,9 +100,11 @@ function mcl_doors:register_trapdoor(name, def)
longdesc = def._doc_items_longdesc
if not longdesc then
if def.only_redstone_can_open then
longdesc = S("Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can only be opened or closed by redstone power.")
longdesc = S(
"Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can only be opened or closed by redstone power.")
else
longdesc = S("Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can be opened or closed by hand or redstone power.")
longdesc = S(
"Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can be opened or closed by hand or redstone power.")
end
end
usagehelp = def._doc_items_usagehelp
@ -128,7 +141,7 @@ function mcl_doors:register_trapdoor(name, def)
_doc_items_usagehelp = usagehelp,
drawtype = "nodebox",
tiles = tiles_closed,
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true,
use_texture_alpha = "clip",
inventory_image = def.inventory_image,
wield_image = def.wield_image,
is_ground_content = false,
@ -143,13 +156,15 @@ function mcl_doors:register_trapdoor(name, def)
node_box = {
type = "fixed",
fixed = {
{-8/16, -8/16, -8/16, 8/16, -5/16, 8/16},},
{ -8 / 16, -8 / 16, -8 / 16, 8 / 16, -5 / 16, 8 / 16 }, },
},
mesecons = {effector = {
mesecons = {
effector = {
action_on = (function(pos, node)
punch(pos)
end),
}},
}
},
on_place = function(itemstack, placer, pointed_thing)
local p0 = pointed_thing.under
local p1 = pointed_thing.above
@ -193,16 +208,44 @@ function mcl_doors:register_trapdoor(name, def)
groups_open.trapdoor = 2
groups_open.not_in_creative_inventory = 1
minetest.register_node(name.."_open", {
-- Non-climbable opened
minetest.register_node(name .. "_open", {
drawtype = "nodebox",
tiles = tiles_open,
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true,
use_texture_alpha = "clip",
is_ground_content = false,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
pointable = true,
groups = groups_open,
_mcl_hardness = def._mcl_hardness,
_mcl_blast_resistance = def._mcl_blast_resistance,
sounds = def.sounds,
drop = name,
node_box = {
type = "fixed",
fixed = { -0.5, -0.5, 5 / 16, 0.5, 0.5, 0.5 }
},
on_rightclick = on_rightclick,
mesecons = {
effector = {
action_off = (function(pos, node)
punch(pos)
end),
}
},
on_rotate = on_rotate,
})
-- Climbable opened
minetest.register_node(name .. "_ladder", {
drawtype = "nodebox",
tiles = tiles_open,
use_texture_alpha = "clip",
is_ground_content = false,
paramtype = "light",
paramtype2 = "facedir",
-- TODO: Implement Minecraft behaviour: Climbable if directly above
-- ladder w/ matching orientation.
-- Current behavour: Always climbable
climbable = true,
sunlight_propagates = true,
pointable = true,
@ -213,19 +256,20 @@ function mcl_doors:register_trapdoor(name, def)
drop = name,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, 5/16, 0.5, 0.5, 0.5}
fixed = { -0.5, -0.5, 5 / 16, 0.5, 0.5, 0.5 }
},
on_rightclick = on_rightclick,
mesecons = {effector = {
mesecons = {
effector = {
action_off = (function(pos, node)
punch(pos)
end),
}},
}
},
on_rotate = on_rotate,
})
if minetest.get_modpath("doc") then
doc.add_entry_alias("nodes", name, "nodes", name.."_open")
doc.add_entry_alias("nodes", name, "nodes", name .. "_open")
end
end

View File

@ -180,16 +180,18 @@ function mcl_enchanting.combine(itemstack, combine_with)
return false
end
local enchantments = mcl_enchanting.get_enchantments(itemstack)
local any_new_enchantment = false
for enchantment, combine_level in pairs(mcl_enchanting.get_enchantments(combine_with)) do
local enchantment_def = mcl_enchanting.enchantments[enchantment]
local enchantment_level = enchantments[enchantment]
if enchantment_level then
if enchantment_level then -- The enchantment already exist in the provided item
if enchantment_level == combine_level then
enchantment_level = math.min(enchantment_level + 1, enchantment_def.max_level)
else
enchantment_level = math.max(enchantment_level, combine_level)
end
elseif mcl_enchanting.item_supports_enchantment(itemname, enchantment) then
any_new_enchantment = any_new_enchantment or ( enchantment_level ~= enchantments[enchantment] )
elseif mcl_enchanting.item_supports_enchantment(itemname, enchantment) then -- this is a new enchantement to try to add
local supported = true
for incompatible in pairs(enchantment_def.incompatible) do
if enchantments[incompatible] then
@ -199,24 +201,18 @@ function mcl_enchanting.combine(itemstack, combine_with)
end
if supported then
enchantment_level = combine_level
any_new_enchantment = true
end
end
if enchantment_level and enchantment_level > 0 then
enchantments[enchantment] = enchantment_level
end
end
local any_enchantment = false
for enchantment, enchantment_level in pairs(enchantments) do
if enchantment_level > 0 then
any_enchantment = true
break
end
end
if any_enchantment then
if any_new_enchantment then
itemstack:set_name(enchanted_itemname)
end
mcl_enchanting.set_enchantments(itemstack, enchantments)
return true
end
return any_new_enchantment
end
function mcl_enchanting.enchantments_snippet(_, _, itemstack)

View File

@ -101,7 +101,7 @@ local pumpkin_base_def = {
tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png"},
groups = {
handy = 1, axey = 1, plant = 1, building_block = 1, dig_by_piston = 1, dig_immediate_piston = 1,
enderman_takable = 1, compostability = 65
pumpkin = 1, enderman_takable = 1, compostability = 65
},
sounds = mcl_sounds.node_sound_wood_defaults(),
on_rotate = on_rotate,
@ -199,7 +199,7 @@ minetest.register_node("mcl_farming:pumpkin_face_light", {
paramtype2 = "facedir",
light_source = minetest.LIGHT_MAX,
tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face_light.png"},
groups = {handy=1,axey=1, building_block=1, dig_by_piston=1 },
groups = {handy=1, axey=1, pumpkin=1, building_block=1, dig_by_piston=1 },
sounds = mcl_sounds.node_sound_wood_defaults(),
on_construct = function(pos)
-- Attempt to spawn iron golem or snow golem

View File

@ -269,7 +269,16 @@ for w=1, #woods do
id = wood[1].."_fence"
id_gate = wood[1].."_fence_gate"
end
mcl_fences.register_fence_and_fence_gate(id, wood[2], wood[3], wood[4], wood_groups, 2, 15, wood_connect, wood_sounds)
mcl_fences.register_fence_and_fence_gate(
id,
wood[2],
wood[3],
wood[4],
wood_groups,
minetest.registered_nodes["mcl_core:wood"]._mcl_hardness,
minetest.registered_nodes["mcl_core:wood"]._mcl_blast_resistance,
wood_connect,
wood_sounds)
minetest.register_craft({
output = "mcl_fences:"..id.." 3",
@ -289,7 +298,15 @@ end
-- Nether Brick Fence (without fence gate!)
mcl_fences.register_fence("nether_brick_fence", S("Nether Brick Fence"), "mcl_fences_fence_nether_brick.png", {pickaxey=1, deco_block=1, fence_nether_brick=1}, 2, 30, {"group:fence_nether_brick"}, mcl_sounds.node_sound_stone_defaults())
mcl_fences.register_fence(
"nether_brick_fence",
S("Nether Brick Fence"),
"mcl_fences_fence_nether_brick.png",
{pickaxey=1, deco_block=1, fence_nether_brick=1},
minetest.registered_nodes["mcl_nether:nether_brick"]._mcl_hardness,
minetest.registered_nodes["mcl_nether:nether_brick"]._mcl_blast_resistance,
{"group:fence_nether_brick"},
mcl_sounds.node_sound_stone_defaults())
minetest.register_craft({
output = "mcl_fences:nether_brick_fence 6",

View File

@ -128,8 +128,6 @@ local fortune_wheat_seed_drop = {
overwrite = true,
}
-- CHECKME: How does tall grass behave when pushed by a piston?
--- Tall Grass ---
local def_tallgrass = {
description = S("Tall Grass"),
@ -155,7 +153,7 @@ local def_tallgrass = {
groups = {
handy = 1, shearsy = 1, attached_node = 1, deco_block = 1,
plant = 1, place_flowerlike = 2, non_mycelium_plant = 1,
flammable = 3, fire_encouragement = 60, fire_flammability = 100,
flammable = 3, fire_encouragement = 60, fire_flammability = 10, dig_by_piston = 1,
dig_by_water = 1, destroy_by_lava_flow = 1, compostability = 30, grass_palette = 1
},
sounds = mcl_sounds.node_sound_leaves_defaults(),
@ -252,7 +250,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
paramtype2 = paramtype2,
palette = palette,
walkable = false,
buildable_to = true,
buildable_to = false,
drop = drop_bottom,
_mcl_shears_drop = shears_drop,
_mcl_fortune_drop = fortune_drop,
@ -354,7 +352,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
paramtype2 = paramtype2,
palette = palette,
walkable = false,
buildable_to = true,
buildable_to = false,
selection_box = {
type = "fixed",
fixed = { -selbox_radius, -0.5, -selbox_radius, selbox_radius, selbox_top_height, selbox_radius },

View File

@ -118,7 +118,7 @@ function mcl_lanterns.register_lantern(name, def)
node_placement_prediction = "",
sunlight_propagates = true,
light_source = def.light_level,
groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1},
groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1, dig_by_piston=1},
selection_box = {
type = "fixed",
fixed = {

View File

@ -183,7 +183,7 @@ mcl_flowerpots.register_potted_flower("mcl_mangrove:propagule", {
image = "mcl_mangrove_propagule.png",
})
local water_tex = "default_water_source_animated.png^[verticalframe:16:0^[multiply:#3F76E4"
local water_tex = "mcl_core_water_source_animation.png^[verticalframe:16:0^[multiply:#3F76E4"
local wlroots = {
description = S("water logged mangrove roots"),
@ -194,12 +194,12 @@ local wlroots = {
S("These cannot be crafted yet only occure when get in contact of water."),
_doc_items_hidden = false,
tiles = {
{name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}}
{name="mcl_core_water_source_animation.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}}
},
special_tiles = {
-- New-style water source material (mostly unused)
{
name="default_water_source_animated.png",
name="mcl_core_water_source_animation.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0},
backface_culling = false,
}
@ -221,7 +221,7 @@ local wlroots = {
liquids_pointable = true,
drop = "mcl_mangrove:mangrove_roots",
groups = {
handy = 1, hoey = 1, water=3, liquid=3, puts_out_fire=1, dig_by_piston = 1, deco_block = 1, not_in_creative_inventory=1 },
handy = 1, hoey = 1, water=3, liquid=3, puts_out_fire=1, dig_by_piston = 1, deco_block = 1, waterlogged = 1, not_in_creative_inventory=1 },
_mcl_blast_resistance = 100,
_mcl_hardness = -1, -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode
on_construct = function(pos)
@ -245,7 +245,7 @@ local rwlroots = table.copy(wlroots)
-- FIXME luacheck complains that this is a repeated definition of water_tex.
-- Maybe the tiles definition below should be replaced with the animated tile
-- definition as per above?
water_tex = "default_water_source_animated.png^[verticalframe:16:0^[multiply:#0084FF"
water_tex = "mcl_core_water_source_animation.png^[verticalframe:16:0^[multiply:#0084FF"
rwlroots.tiles = {
"("..water_tex..")^mcl_mangrove_roots_top.png",
"("..water_tex..")^mcl_mangrove_roots_side.png",

View File

@ -4664,7 +4664,7 @@
126,
164
],
"default_water_source_animated.png": [
"mcl_core_water_source_animation.png": [
37,
98,
129
@ -4984,7 +4984,7 @@
79,
64
],
"default_water_flowing_animated.png": [
"mcl_core_water_flow_animation.png": [
38,
101,
129
@ -5009,7 +5009,7 @@
89,
86
],
"default_lava_flowing_animated.png": [
"mcl_core_lava_flow_animation.png": [
177,
42,
16
@ -5059,7 +5059,7 @@
142,
123
],
"default_lava_source_animated.png": [
"mcl_core_lava_source_animation.png": [
180,
45,
17
@ -6604,16 +6604,6 @@
56,
64
],
"default_river_water_flowing_animated.png": [
38,
123,
130
],
"default_river_water_source_animated.png": [
37,
120,
130
],
"mcl_armor_stand_item.png": [
134,
114,
@ -9009,17 +8999,17 @@
127,
113
],
"bucket_river_water.png": [
"mcl_buckets_river_water_bucket.png": [
139,
152,
155
],
"bucket_water.png": [
"mcl_buckets_water_bucket.png": [
139,
147,
155
],
"bucket.png": [
"mcl_buckets_bucket.png": [
147,
143,
139

View File

@ -267,7 +267,8 @@ function kelp.next_height(pos, node, pos_tip, node_tip, submerged, downward_flow
-- Flowing liquid: Grow 1 step, but also turn the tip node into a liquid source.
if downward_flowing then
local alt_liq = mt_registered_nodes[node_tip.name].liquid_alternative_source
if alt_liq then
local alt_liq_accessible = mt_get_item_group(node_tip.name,"waterlogged") -- returns 0 if it isn't waterlogged.
if alt_liq and not alt_liq_accessible then
mt_set_node(pos_tip, {name=alt_liq})
end
end

View File

@ -52,7 +52,7 @@ minetest.register_node("mcl_ocean:prismarine_brick", {
tiles = {"mcl_ocean_prismarine_bricks.png"},
groups = {pickaxey=1, building_block=1, material_stone=1},
sounds = mcl_sounds.node_sound_stone_defaults(),
_mcl_blast_resistance = 1.5,
_mcl_blast_resistance = 6,
_mcl_hardness = 1.5,
})
@ -64,7 +64,7 @@ minetest.register_node("mcl_ocean:prismarine_dark", {
tiles = {"mcl_ocean_prismarine_dark.png"},
groups = {pickaxey=1, building_block=1, material_stone=1},
sounds = mcl_sounds.node_sound_stone_defaults(),
_mcl_blast_resistance = 1.5,
_mcl_blast_resistance = 6,
_mcl_hardness = 1.5,
})

View File

@ -215,9 +215,23 @@ minetest.register_node("mcl_sculk:vein", {
type = "wallmounted",
},
groups = {
handy = 1, axey = 1, shearsy = 1, swordy = 1, deco_block = 1,
dig_by_piston = 1, destroy_by_lava_flow = 1, sculk = 1, dig_by_water = 1,
handy = 1,
axey = 1,
shearsy = 1,
swordy = 1,
deco_block = 1,
dig_by_piston = 1,
destroy_by_lava_flow = 1,
sculk = 1,
dig_by_water = 1,
ladder = 1
},
after_destruct = function(pos, old)
mcl_core.update_trapdoor(pos, "destruct")
end,
after_place_node = function(pos)
mcl_core.update_trapdoor(pos, "place")
end,
sounds = sounds,
drop = "",
_mcl_shears_drop = true,

View File

@ -85,7 +85,7 @@ end
mcl_signs = {}
-- GLOBALS
mcl_signs.sign_groups = { handy = 1, axey = 1, deco_block = 1, material_wood = 1, attached_node = 1, dig_by_piston = 1, flammable = -1 }
mcl_signs.sign_groups = { handy = 1, axey = 1, deco_block = 1, material_wood = 1, attached_node = 1, flammable = -1 }
--- colors used for wools.
mcl_signs.mcl_wool_colors = {
unicolor_white = "#FFFFFF",
@ -764,6 +764,15 @@ function mcl_signs.register_sign (modname, color, _name, ttsign)
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign22_5" .. _name, 1 })
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
-- register as unpushable
if minetest.get_modpath("mesecons_mvps") then
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
end
end
--- The same as register_sign, except caller defines the textures. Note, there is a greyscale version of the sign,
@ -1002,6 +1011,14 @@ function mcl_signs.register_sign_custom (modname, _name, tiles, color, inventory
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
-- register as unpushable
if minetest.get_modpath("mesecons_mvps") then
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
end
end
--- Override an existing sign, tint the textures, and gives it an unique node name. Creates both wall and standing signs.
@ -1234,6 +1251,15 @@ function mcl_signs.reregister_sign (modname, color, _name, ttsign)
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign22_5" .. _name, 1 })
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
-- register as unpushable
if minetest.get_modpath("mesecons_mvps") then
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
end
end
--- The same as reregister_sign, except caller defines the textures. Note, there is a greyscale version of the sign,
@ -1469,6 +1495,14 @@ function mcl_signs.reregister_sign_custom (modname, _name, tiles, color, invento
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
-- register as unpushable
if minetest.get_modpath("mesecons_mvps") then
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
end
end
--- Usage: Call this with the mod's name, the wood's item string (for the planks), and with the sign's suffix.

64
mods/ITEMS/mcl_smithing_table/init.lua Normal file → Executable file
View File

@ -90,6 +90,17 @@ local smithing_materials = {
["mcl_nether:quartz"] = "quartz"
}
local achievement_trims = {
["mcl_armor:spire"] = true,
["mcl_armor:snout"] = true,
["mcl_armor:rib"] = true,
["mcl_armor:ward"] = true,
["mcl_armor:silence"] = true,
["mcl_armor:vex"] = true,
["mcl_armor:tide"] = true,
["mcl_armor:wayfinder"] = true
}
function mcl_smithing_table.upgrade_trimmed(itemstack, color_mineral, template)
--get information required
local material_name = color_mineral:get_name()
@ -156,16 +167,19 @@ minetest.register_node("mcl_smithing_table:table", {
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
local stackname = stack:get_name()
local def = stack:get_definition()
if
listname == "upgrade_item"
and string.find(stack:get_name(),"mcl_armor:") -- allow any armor piece to go in (in case the player wants to trim them)
and not mcl_armor.trims.blacklisted[stack:get_name()]
and def._mcl_armor_element -- allow any armor piece to go in (in case the player wants to trim them)
and not mcl_armor.trims.blacklisted[stackname]
or def._mcl_upgradable -- for diamond tools
or listname == "mineral"
and mcl_smithing_table.is_smithing_mineral(stack:get_name())
and mcl_smithing_table.is_smithing_mineral(stackname)
or listname == "template"
and string.find(stack:get_name(),"mcl_armor")
and string.find(stackname, "mcl_armor")
then
return stack:get_count()
end
@ -189,19 +203,43 @@ minetest.register_node("mcl_smithing_table:table", {
end
if listname == "upgraded_item" then
-- ToDo: make epic sound
minetest.sound_play("mcl_smithing_table_upgrade", { pos = pos, max_hear_distance = 16 })
if stack:get_name() == "mcl_farming:hoe_netherite" then
awards.unlock(player:get_player_name(), "mcl:seriousDedication")
elseif mcl_armor.is_trimmed(stack) then
local template_name = inv:get_stack("template", 1):get_name()
local playername = player:get_player_name()
awards.unlock(playername, "mcl:trim")
if not awards.players[playername].unlocked["mcl:lots_of_trimming"] and achievement_trims[template_name] then
local meta = player:get_meta()
local used_achievement_trims = minetest.deserialize(meta:get_string("mcl_smithing_table:achievement_trims")) or {}
if not used_achievement_trims[template_name] then
used_achievement_trims[template_name] = true
end
local used_all = true
for name, _ in pairs(achievement_trims) do
if not used_achievement_trims[name] then
used_all = false
break
end
end
if used_all then
awards.unlock(playername, "mcl:lots_of_trimming")
else
meta:set_string("mcl_smithing_table:achievement_trims", minetest.serialize(used_achievement_trims))
end
end
end
take_item("upgrade_item")
take_item("mineral")
take_item("template")
-- ToDo: make epic sound
minetest.sound_play("mcl_smithing_table_upgrade", { pos = pos, max_hear_distance = 16 })
end
if listname == "upgraded_item" then
if stack:get_name() == "mcl_farming:hoe_netherite" then
awards.unlock(player:get_player_name(), "mcl:seriousDedication")
end
end
reset_upgraded_item(pos)
end,

View File

@ -155,7 +155,7 @@ minetest.register_node("mcl_sponges:sponge_wet", {
buildable_to = false,
stack_max = 64,
sounds = mcl_sounds.node_sound_dirt_defaults(),
groups = {handy=1, hoey=1, building_block=1},
groups = {handy=1, hoey=1, waterlogged = 1, building_block=1},
on_place = place_wet_sponge,
_mcl_blast_resistance = 0.6,
_mcl_hardness = 0.6,
@ -175,7 +175,7 @@ if minetest.get_modpath("mclx_core") then
buildable_to = false,
stack_max = 64,
sounds = mcl_sounds.node_sound_dirt_defaults(),
groups = {handy=1, building_block=1},
groups = {handy=1, waterlogged = 1, building_block=1},
on_place = place_wet_sponge,
_mcl_blast_resistance = 0.6,
_mcl_hardness = 0.6,

View File

@ -53,13 +53,27 @@ local function get_random_effect()
return effects[keys[math.random(#keys)]]
end
local function eat_stew(itemstack, placer, pointed_thing)
local function eat_stew(itemstack, user, pointed_thing)
if pointed_thing.type == "node" then
if user and not user:get_player_control().sneak then
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if user and not user:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack
end
end
end
elseif pointed_thing.type == "object" then
return itemstack
end
local e = itemstack:get_meta():get_string("effect")
local f = effects[e]
if not f then
f = get_random_effect()
end
if f(itemstack,placer,pointed_thing) then
if f(itemstack, user, pointed_thing) then
return "mcl_core:bowl"
end
end

View File

@ -165,12 +165,36 @@ local make_grass_path = function(itemstack, placer, pointed_thing)
end
end
-- Only make grass path if tool used on side or top of target node
-- Only make or remove grass path if tool used on side or top of target node
if pointed_thing.above.y < pointed_thing.under.y then
return itemstack
end
if (minetest.get_item_group(node.name, "path_creation_possible") == 1) then
-- Remove grass paths
if (minetest.get_item_group(node.name, "path_remove_possible") == 1) and placer:get_player_control().sneak then
local above = table.copy(pointed_thing.under)
above.y = above.y + 1
if minetest.get_node(above).name == "air" then
if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then
minetest.record_protection_violation(pointed_thing.under, placer:get_player_name())
return itemstack
end
if not minetest.is_creative_enabled(placer: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
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:dirt"})
end
end
-- Make grass paths
if (minetest.get_item_group(node.name, "path_creation_possible") == 1) and not placer:get_player_control().sneak then
local above = table.copy(pointed_thing.under)
above.y = above.y + 1
if minetest.get_node(above).name == "air" then

View File

@ -2,7 +2,7 @@
This API allows you to add more walls (like the cobblestone wall) to MineClone 2.
## `mcl_walls.register_wall(nodename, description, craft_material, tiles, invtex, groups, sounds)`
## `mcl_walls.register_wall(nodename, description, craft_material, tiles, invtex, groups, sounds, hardness, blast_resistance)`
Adds a new wall type. This is optimized for stone-based walls, but other materials are theoretically possible, too.
@ -25,6 +25,8 @@ If `craft_material` is not `nil` it also adds a crafting recipe of the following
* `inventory_image`: Inventory image (optional if `source` is set)
* `groups`: Base group memberships (optional, default is `{pickaxey=1}`)
* `sounds`: Sound table (optional, by default default uses stone sounds)
* `hardness`: Hardness of node (optional, default matches `source` node or fallback value 2)
* `blast_resistance`: Blast resistance of node (optional, default matches `source` node or fallback value 6)
The following groups will automatically be added to the nodes (where applicable), you do not need to add them
to the `groups` table:

View File

@ -97,8 +97,10 @@ local full_blocks = {
* inventory_image: Inventory image (optional)
* groups: Base group memberships (optional, default is {pickaxey=1})
* sounds: Sound table (optional, default is stone)
* hardness: Hardness of node (optional, default matches `source` node or fallback value 2)
* blast_resistance: Blast resistance of node (optional, default matches `source` node or fallback value 6)
]]
function mcl_walls.register_wall(nodename, description, source, tiles, inventory_image, groups, sounds)
function mcl_walls.register_wall(nodename, description, source, tiles, inventory_image, groups, sounds, hardness, blast_resistance)
local base_groups = groups
if not base_groups then
@ -112,17 +114,31 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory
local main_node_groups = table.copy(base_groups)
main_node_groups.deco_block = 1
-- TODO: Stop hardcoding blast resistance
if not sounds then
sounds = mcl_sounds.node_sound_stone_defaults()
if source then
-- Default values from `source` node
if not hardness then
hardness = minetest.registered_nodes[source]._mcl_hardness
end
if (not tiles) and source then
if not blast_resistance then
blast_resistance = minetest.registered_nodes[source]._mcl_blast_resistance
end
if not sounds then
sounds = minetest.registered_nodes[source].sounds
end
if not tiles then
if minetest.registered_nodes[source] then
tiles = minetest.registered_nodes[source].tiles
end
end
else
-- Fallback in case no `source` given
if not hardness then
hardness = 2
end
if not blast_resistance then
blast_resistance = 6
end
end
for i = 0, 15 do
local need = {}
@ -169,8 +185,8 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory
fixed = take
},
sounds = sounds,
_mcl_blast_resistance = 6,
_mcl_hardness = 2,
_mcl_blast_resistance = blast_resistance,
_mcl_hardness = hardness,
})
-- Add entry alias for the Help
@ -197,8 +213,8 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory
fixed = {pillar, full_blocks[1]}
},
sounds = sounds,
_mcl_blast_resistance = 6,
_mcl_hardness = 2,
_mcl_blast_resistance = blast_resistance,
_mcl_hardness = hardness,
})
-- Add entry alias for the Help
if minetest.get_modpath("doc") then
@ -223,8 +239,8 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory
fixed = {pillar, full_blocks[2]}
},
sounds = sounds,
_mcl_blast_resistance = 6,
_mcl_hardness = 2,
_mcl_blast_resistance = blast_resistance,
_mcl_hardness = hardness,
})
-- Add entry alias for the Help
if minetest.get_modpath("doc") then
@ -255,8 +271,8 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory
collisionbox = {-0.2, 0, -0.2, 0.2, 1.4, 0.2},
on_construct = update_wall,
sounds = sounds,
_mcl_blast_resistance = 6,
_mcl_hardness = 2,
_mcl_blast_resistance = blast_resistance,
_mcl_hardness = hardness,
})
if source then
minetest.register_craft({

View File

@ -194,6 +194,19 @@ mcl_mob_active_range (Active mob range) int 48 0 256
# Zombie siege raid (default:false)
mcl_raids_zombie_siege (Zombie siege raid) bool false
# Use MC 1.18+ light levels to control monster spawning.
# Disable to use older mob specific light levels.
mcl_mobs_modern_lighting (Use MC 1.18+ light rules for spawning) bool true
# These only take effect if mcl_mobs_modern_lighting is enabled
# Light levels greater than these block mobs spawning
# See https://minecraft.fandom.com/wiki/Light#Internal_light_level
mcl_mobs_nether_threshold (Artificial light threshold to stop spawns in the Nether) int 11 0 14
mcl_mobs_end_threshold (Artificial light threshold to stop spawns in the End) int 0 0 14
mcl_mobs_overworld_threshold (Artificial light threshold to stop monster spawns in the Overworld) int 0 0 14
mcl_mobs_overworld_sky_threshold (Skylight threshold to stop monster spawns in the Overworld) int 7 0 14
mcl_mobs_overworld_passive_threshold (Combined light threshold to stop animal and npc spawns in the Overworld) int 7 0 14
[Audio]
# Enable flame sound.
flame_sound (Flame sound) bool true
@ -277,6 +290,10 @@ fix_doubleplants (Mcimport double plant fixes) bool true
# Allow players to create Minecraft-like maps.
enable_real_maps (Enable Real Maps) bool true
# Enable workarounds for faulty mob navigation.
# Hack 1: teleport golems home if they are very far from home
mcl_mob_allow_nav_hacks (Mob navigation hacks) bool false
[Additional Features]
# Enable Bookshelf inventories
mcl_bookshelf_inventories (Enable bookshelf inventories) bool true

View File

Before

Width:  |  Height:  |  Size: 248 B

After

Width:  |  Height:  |  Size: 248 B

View File

Before

Width:  |  Height:  |  Size: 990 B

After

Width:  |  Height:  |  Size: 990 B

View File

Before

Width:  |  Height:  |  Size: 854 B

After

Width:  |  Height:  |  Size: 854 B

View File

Before

Width:  |  Height:  |  Size: 551 B

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 B

BIN
textures/silence_boots.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 617 B

BIN
textures/silence_helmet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -7,9 +7,9 @@ Source path,Source file,Target path,Target file,xs,ys,xl,yl,xt,yt,Blacklisted?
/assets/minecraft/textures/gui,icons.png,/mods/HUD/hudbars/textures,hudbars_icon_breath.png,16,18,9,9,0,0,y
/assets/minecraft/textures/gui,icons.png,/mods/HUD/mcl_base_textures/textures,heart.png,52,0,9,9,0,0,y
/assets/minecraft/textures/gui,icons.png,/mods/HUD/mcl_base_textures/textures,bubble.png,16,18,9,9,0,0,y
/assets/minecraft/textures/items,bucket_empty.png,/mods/ITEMS/mcl_buckets/textures,bucket.png,,,,,,,
/assets/minecraft/textures/items,bucket_water.png,/mods/ITEMS/mcl_buckets/textures,bucket_water.png,,,,,,,
/assets/minecraft/textures/items,bucket_water.png,/mods/ITEMS/mcl_buckets/textures,bucket_river_water.png,,,,,,,
/assets/minecraft/textures/items,bucket_empty.png,/mods/ITEMS/mcl_buckets/textures,mcl_buckets_bucket.png,,,,,,,
/assets/minecraft/textures/items,bucket_water.png,/mods/ITEMS/mcl_buckets/textures,mcl_buckets_water_bucket.png,,,,,,,
/assets/minecraft/textures/items,bucket_water.png,/mods/ITEMS/mcl_buckets/textures,mcl_buckets_river_water_bucket.png,,,,,,,
/assets/minecraft/textures/items,bucket_lava.png,/mods/ITEMS/mcl_buckets/textures,mcl_buckets_lava_bucket.png,,,,,,,
/assets/minecraft/textures/items,item_frame.png,/mods/ITEMS/mcl_itemframes/textures,mcl_itemframes_item_frame.png,,,,,,,
/assets/minecraft/textures/blocks,anvil_base.png,/mods/ITEMS/mcl_anvils/textures,mcl_anvils_anvil_base.png,,,,,,,
@ -171,8 +171,8 @@ Source path,Source file,Target path,Target file,xs,ys,xl,yl,xt,yt,Blacklisted?
/assets/minecraft/textures/blocks,log_jungle_top.png,/mods/ITEMS/mcl_core/textures,default_jungletree_top.png,,,,,,,
/assets/minecraft/textures/blocks,planks_jungle.png,/mods/ITEMS/mcl_core/textures,default_junglewood.png,,,,,,,
/assets/minecraft/textures/blocks,ladder.png,/mods/ITEMS/mcl_core/textures,default_ladder.png,,,,,,,
/assets/minecraft/textures/blocks,lava_still.png,/mods/ITEMS/mcl_core/textures,default_lava_source_animated.png,,,,,,,
/assets/minecraft/textures/blocks,lava_flow.png,/mods/ITEMS/mcl_core/textures,default_lava_flowing_animated.png,,,,,,,
/assets/minecraft/textures/blocks,lava_still.png,/mods/ITEMS/mcl_core/textures,mcl_core_lava_source_animation.png,,,,,,,
/assets/minecraft/textures/blocks,lava_flow.png,/mods/ITEMS/mcl_core/textures,mcl_core_lava_flow_animation.png,,,,,,,
/assets/minecraft/textures/blocks,cobblestone_mossy.png,/mods/ITEMS/mcl_core/textures,default_mossycobble.png,,,,,,,
/assets/minecraft/textures/blocks,obsidian.png,/mods/ITEMS/mcl_core/textures,default_obsidian.png,,,,,,,
/assets/minecraft/textures/items,paper.png,/mods/ITEMS/mcl_core/textures,default_paper.png,,,,,,,
@ -187,10 +187,8 @@ Source path,Source file,Target path,Target file,xs,ys,xl,yl,xt,yt,Blacklisted?
/assets/minecraft/textures/blocks,stone.png,/mods/ITEMS/mcl_core/textures,default_stone.png,,,,,,,
/assets/minecraft/textures/blocks,log_oak.png,/mods/ITEMS/mcl_core/textures,default_tree.png,,,,,,,
/assets/minecraft/textures/blocks,log_oak_top.png,/mods/ITEMS/mcl_core/textures,default_tree_top.png,,,,,,,
/assets/minecraft/textures/blocks,water_still.png,/mods/ITEMS/mcl_core/textures,default_water_source_animated.png,,,,,,,
/assets/minecraft/textures/blocks,water_flow.png,/mods/ITEMS/mcl_core/textures,default_water_flowing_animated.png,,,,,,,
/assets/minecraft/textures/blocks,water_still.png,/mods/ITEMS/mcl_core/textures,default_river_water_source_animated.png,,,,,,,
/assets/minecraft/textures/blocks,water_flow.png,/mods/ITEMS/mcl_core/textures,default_river_water_flowing_animated.png,,,,,,,
/assets/minecraft/textures/blocks,water_still.png,/mods/ITEMS/mcl_core/textures,mcl_core_water_source_animation.png,,,,,,,
/assets/minecraft/textures/blocks,water_flow.png,/mods/ITEMS/mcl_core/textures,mcl_core_water_flow_animation.png,,,,,,,
/assets/minecraft/textures/blocks,planks_oak.png,/mods/ITEMS/mcl_core/textures,default_wood.png,,,,,,,
/assets/minecraft/textures/blocks,stone_andesite.png,/mods/ITEMS/mcl_core/textures,mcl_core_andesite.png,,,,,,,
/assets/minecraft/textures/blocks,stone_andesite_smooth.png,/mods/ITEMS/mcl_core/textures,mcl_core_andesite_smooth.png,,,,,,,

1 Source path Source file Target path Target file xs ys xl yl xt yt Blacklisted?
7 /assets/minecraft/textures/gui icons.png /mods/HUD/hudbars/textures hudbars_icon_breath.png 16 18 9 9 0 0 y
8 /assets/minecraft/textures/gui icons.png /mods/HUD/mcl_base_textures/textures heart.png 52 0 9 9 0 0 y
9 /assets/minecraft/textures/gui icons.png /mods/HUD/mcl_base_textures/textures bubble.png 16 18 9 9 0 0 y
10 /assets/minecraft/textures/items bucket_empty.png /mods/ITEMS/mcl_buckets/textures bucket.png mcl_buckets_bucket.png
11 /assets/minecraft/textures/items bucket_water.png /mods/ITEMS/mcl_buckets/textures bucket_water.png mcl_buckets_water_bucket.png
12 /assets/minecraft/textures/items bucket_water.png /mods/ITEMS/mcl_buckets/textures bucket_river_water.png mcl_buckets_river_water_bucket.png
13 /assets/minecraft/textures/items bucket_lava.png /mods/ITEMS/mcl_buckets/textures mcl_buckets_lava_bucket.png
14 /assets/minecraft/textures/items item_frame.png /mods/ITEMS/mcl_itemframes/textures mcl_itemframes_item_frame.png
15 /assets/minecraft/textures/blocks anvil_base.png /mods/ITEMS/mcl_anvils/textures mcl_anvils_anvil_base.png
171 /assets/minecraft/textures/blocks log_jungle_top.png /mods/ITEMS/mcl_core/textures default_jungletree_top.png
172 /assets/minecraft/textures/blocks planks_jungle.png /mods/ITEMS/mcl_core/textures default_junglewood.png
173 /assets/minecraft/textures/blocks ladder.png /mods/ITEMS/mcl_core/textures default_ladder.png
174 /assets/minecraft/textures/blocks lava_still.png /mods/ITEMS/mcl_core/textures default_lava_source_animated.png mcl_core_lava_source_animation.png
175 /assets/minecraft/textures/blocks lava_flow.png /mods/ITEMS/mcl_core/textures default_lava_flowing_animated.png mcl_core_lava_flow_animation.png
176 /assets/minecraft/textures/blocks cobblestone_mossy.png /mods/ITEMS/mcl_core/textures default_mossycobble.png
177 /assets/minecraft/textures/blocks obsidian.png /mods/ITEMS/mcl_core/textures default_obsidian.png
178 /assets/minecraft/textures/items paper.png /mods/ITEMS/mcl_core/textures default_paper.png
187 /assets/minecraft/textures/blocks stone.png /mods/ITEMS/mcl_core/textures default_stone.png
188 /assets/minecraft/textures/blocks log_oak.png /mods/ITEMS/mcl_core/textures default_tree.png
189 /assets/minecraft/textures/blocks log_oak_top.png /mods/ITEMS/mcl_core/textures default_tree_top.png
190 /assets/minecraft/textures/blocks water_still.png /mods/ITEMS/mcl_core/textures default_water_source_animated.png mcl_core_water_source_animation.png
191 /assets/minecraft/textures/blocks water_flow.png /mods/ITEMS/mcl_core/textures default_water_flowing_animated.png mcl_core_water_flow_animation.png
/assets/minecraft/textures/blocks water_still.png /mods/ITEMS/mcl_core/textures default_river_water_source_animated.png
/assets/minecraft/textures/blocks water_flow.png /mods/ITEMS/mcl_core/textures default_river_water_flowing_animated.png
192 /assets/minecraft/textures/blocks planks_oak.png /mods/ITEMS/mcl_core/textures default_wood.png
193 /assets/minecraft/textures/blocks stone_andesite.png /mods/ITEMS/mcl_core/textures mcl_core_andesite.png
194 /assets/minecraft/textures/blocks stone_andesite_smooth.png /mods/ITEMS/mcl_core/textures mcl_core_andesite_smooth.png