forked from MineClone5/MineClone5
Merge testing into compatibility
This commit is contained in:
commit
d2ef621604
|
@ -71,6 +71,7 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
|
|||
* `coral_block=X`: Coral block (1 = alive, 2 = dead)
|
||||
* `coral_species=X`: Specifies the species of a coral; equal X means equal species
|
||||
* `set_on_fire=X`: Sets any (not fire-resistant) mob or player on fire for X seconds when touching
|
||||
* `compostability`: Amount from 1 to 100 that defines the percentage of likelyhood that the composter will advance a level.
|
||||
|
||||
#### Footnotes
|
||||
|
||||
|
|
|
@ -325,7 +325,7 @@ minetest.register_on_generated(function(minp, maxp, chunkseed)
|
|||
-- mcl_mapgen.register_mapgen_lvm(function(vm_context), order_number) --
|
||||
-- --
|
||||
for _, v in pairs(queue_chunks_lvm) do
|
||||
vm_context = v.f(vm_context)
|
||||
v.f(vm_context)
|
||||
end
|
||||
-- --
|
||||
-- mcl_mapgen.register_mapgen(function(minp, maxp, chunkseed, vm_context), order_number) --
|
||||
|
|
|
@ -152,3 +152,23 @@ minetest.register_globalstep(function(dtime)
|
|||
dimtimer = 0
|
||||
end
|
||||
end)
|
||||
|
||||
function mcl_worlds.get_cloud_parameters()
|
||||
if mcl_mapgen.name == "valleys" then
|
||||
return {
|
||||
height = 384,
|
||||
speed = {x=-2, z=0},
|
||||
thickness=5,
|
||||
color="#FFF0FEF",
|
||||
ambient = "#201060",
|
||||
}
|
||||
else
|
||||
-- MC-style clouds: Layer 127, thickness 4, fly to the “West”
|
||||
return {
|
||||
height = mcl_worlds.layer_to_y(127),
|
||||
speed = {x=-2, z=0},
|
||||
thickness = 4,
|
||||
color = "#FFF0FEF",
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -401,6 +401,7 @@ function mobs:register_mob(name, def)
|
|||
ignited_by_sunlight = def.ignited_by_sunlight or false,
|
||||
eye_height = def.eye_height or 1.5,
|
||||
defuse_reach = def.defuse_reach or 4,
|
||||
spawn = def.spawn,
|
||||
-- End of MCL2 extensions
|
||||
|
||||
on_spawn = def.on_spawn,
|
||||
|
|
|
@ -267,6 +267,8 @@ function mobs:spawn_setup(def)
|
|||
local day_toggle = def.day_toggle
|
||||
local on_spawn = def.on_spawn
|
||||
local check_position = def.check_position
|
||||
local group_size_min = def.group_size_min or 1
|
||||
local group_size_max = def.group_size_max or 1
|
||||
|
||||
-- chance/spawn number override in minetest.conf for registered mob
|
||||
local numbers = minetest.settings:get(name)
|
||||
|
@ -300,10 +302,23 @@ function mobs:spawn_setup(def)
|
|||
day_toggle = day_toggle,
|
||||
check_position = check_position,
|
||||
on_spawn = on_spawn,
|
||||
group_size_min = group_size_min,
|
||||
group_size_max = group_size_max,
|
||||
}
|
||||
summary_chance = summary_chance + chance
|
||||
end
|
||||
|
||||
function mobs.spawn_mob(name, pos)
|
||||
local def = minetest.registered_entities[name]
|
||||
if not def then return end
|
||||
if def.spawn then
|
||||
return def.spawn(pos)
|
||||
end
|
||||
return minetest.add_entity(pos, name)
|
||||
end
|
||||
|
||||
local spawn_mob = mobs.spawn_mob
|
||||
|
||||
function mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_light, max_light, interval, chance, aoc, min_height, max_height, day_toggle, on_spawn)
|
||||
|
||||
-- Do mobs spawn at all?
|
||||
|
@ -341,6 +356,8 @@ function mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_ligh
|
|||
spawn_dictionary[key]["min_height"] = min_height
|
||||
spawn_dictionary[key]["max_height"] = max_height
|
||||
spawn_dictionary[key]["day_toggle"] = day_toggle
|
||||
spawn_dictionary[key]["group_size_min"] = 1
|
||||
spawn_dictionary[key]["group_size_max"] = 3
|
||||
|
||||
summary_chance = summary_chance + chance
|
||||
end
|
||||
|
@ -442,9 +459,9 @@ if mobs_spawn then
|
|||
and (mob_def.check_position and mob_def.check_position(spawning_position) or true)
|
||||
then
|
||||
--everything is correct, spawn mob
|
||||
local object = minetest.add_entity(spawning_position, mob_def.name)
|
||||
local object = spawn_mob(mob_def.name, spawning_position)
|
||||
if object then
|
||||
return mob_def.on_spawn and mob_def.on_spawn(object, pos)
|
||||
return mob_def.on_spawn and mob_def.on_spawn(object, spawning_position)
|
||||
end
|
||||
end
|
||||
current_summary_chance = current_summary_chance - mob_chance
|
||||
|
|
|
@ -2,118 +2,27 @@
|
|||
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local rabbit = {
|
||||
description = S("Rabbit"),
|
||||
type = "animal",
|
||||
spawn_class = "passive",
|
||||
passive = true,
|
||||
reach = 1,
|
||||
rotate = 270,
|
||||
hp_min = 3,
|
||||
hp_max = 3,
|
||||
xp_min = 1,
|
||||
xp_max = 3,
|
||||
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.49, 0.2},
|
||||
local mob_name = "mobs_mc:rabbit"
|
||||
|
||||
visual = "mesh",
|
||||
mesh = "mobs_mc_rabbit.b3d",
|
||||
textures = {
|
||||
local textures = {
|
||||
{"mobs_mc_rabbit_brown.png"},
|
||||
{"mobs_mc_rabbit_gold.png"},
|
||||
{"mobs_mc_rabbit_white.png"},
|
||||
{"mobs_mc_rabbit_white_splotched.png"},
|
||||
{"mobs_mc_rabbit_salt.png"},
|
||||
{"mobs_mc_rabbit_black.png"},
|
||||
},
|
||||
visual_size = {x=1.5, y=1.5},
|
||||
sounds = {
|
||||
random = "mobs_mc_rabbit_random",
|
||||
damage = "mobs_mc_rabbit_hurt",
|
||||
death = "mobs_mc_rabbit_death",
|
||||
attack = "mobs_mc_rabbit_attack",
|
||||
eat = "mobs_mc_animal_eat_generic",
|
||||
distance = 16,
|
||||
},
|
||||
makes_footstep_sound = false,
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3.7,
|
||||
follow_velocity = 1.1,
|
||||
floats = 1,
|
||||
runaway = true,
|
||||
jump = true,
|
||||
drops = {
|
||||
{name = mobs_mc.items.rabbit_raw, chance = 1, min = 0, max = 1, looting = "common",},
|
||||
{name = mobs_mc.items.rabbit_hide, chance = 1, min = 0, max = 1, looting = "common",},
|
||||
{name = mobs_mc.items.rabbit_foot, chance = 10, min = 0, max = 1, looting = "rare", looting_factor = 0.03,},
|
||||
},
|
||||
fear_height = 4,
|
||||
animation = {
|
||||
speed_normal = 25, speed_run = 50,
|
||||
stand_start = 0, stand_end = 0,
|
||||
walk_start = 0, walk_end = 20,
|
||||
run_start = 0, run_end = 20,
|
||||
},
|
||||
-- Follow (yellow) dangelions, carrots and golden carrots
|
||||
follow = mobs_mc.follow.rabbit,
|
||||
view_range = 8,
|
||||
-- Eat carrots and reduce their growth stage by 1
|
||||
replace_rate = 10,
|
||||
replace_what = mobs_mc.replace.rabbit,
|
||||
on_rightclick = function(self, clicker)
|
||||
-- Feed, tame protect or capture
|
||||
if mobs:feed_tame(self, clicker, 1, true, true) then return end
|
||||
end,
|
||||
do_custom = function(self)
|
||||
-- Easter egg: Change texture if rabbit is named “Toast”
|
||||
if self.nametag == "Toast" and not self._has_toast_texture then
|
||||
self._original_rabbit_texture = self.base_texture
|
||||
self.base_texture = { "mobs_mc_rabbit_toast.png" }
|
||||
self.object:set_properties({ textures = self.base_texture })
|
||||
self._has_toast_texture = true
|
||||
elseif self.nametag ~= "Toast" and self._has_toast_texture then
|
||||
self.base_texture = self._original_rabbit_texture
|
||||
self.object:set_properties({ textures = self.base_texture })
|
||||
self._has_toast_texture = false
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
mobs:register_mob("mobs_mc:rabbit", rabbit)
|
||||
local sounds = {
|
||||
random = "mobs_mc_rabbit_random",
|
||||
damage = "mobs_mc_rabbit_hurt",
|
||||
death = "mobs_mc_rabbit_death",
|
||||
attack = "mobs_mc_rabbit_attack",
|
||||
eat = "mobs_mc_animal_eat_generic",
|
||||
distance = 16,
|
||||
}
|
||||
|
||||
-- The killer bunny (Only with spawn egg)
|
||||
local killer_bunny = table.copy(rabbit)
|
||||
killer_bunny.description = S("Killer Bunny")
|
||||
killer_bunny.type = "monster"
|
||||
killer_bunny.spawn_class = "hostile"
|
||||
killer_bunny.attack_type = "dogfight"
|
||||
killer_bunny.specific_attack = { "player", "mobs_mc:wolf", "mobs_mc:dog" }
|
||||
killer_bunny.damage = 8
|
||||
killer_bunny.passive = false
|
||||
-- 8 armor points
|
||||
killer_bunny.armor = 50
|
||||
killer_bunny.textures = { "mobs_mc_rabbit_caerbannog.png" }
|
||||
killer_bunny.view_range = 16
|
||||
killer_bunny.replace_rate = nil
|
||||
killer_bunny.replace_what = nil
|
||||
killer_bunny.on_rightclick = nil
|
||||
killer_bunny.run_velocity = 6
|
||||
killer_bunny.do_custom = function(self)
|
||||
if not self._killer_bunny_nametag_set then
|
||||
self.nametag = S("The Killer Bunny")
|
||||
self._killer_bunny_nametag_set = true
|
||||
end
|
||||
end
|
||||
|
||||
mobs:register_mob("mobs_mc:killer_bunny", killer_bunny)
|
||||
|
||||
-- Mob spawning rules.
|
||||
-- Different skins depending on spawn location <- we'll get to this when the spawning algorithm is fleshed out
|
||||
|
||||
mobs:spawn_specific(
|
||||
"mobs_mc:rabbit",
|
||||
"overworld",
|
||||
"ground",
|
||||
{
|
||||
local biome_list = {
|
||||
"FlowerForest_beach",
|
||||
"Forest_beach",
|
||||
"StoneBeach",
|
||||
|
@ -161,73 +70,148 @@ mobs:spawn_specific(
|
|||
"MesaBryce",
|
||||
"JungleEdge",
|
||||
"SavannaM",
|
||||
},
|
||||
9,
|
||||
minetest.LIGHT_MAX+1,
|
||||
30,
|
||||
15000,
|
||||
8,
|
||||
mobs_mc.spawn_height.overworld_min,
|
||||
mobs_mc.spawn_height.overworld_max)
|
||||
|
||||
--[[
|
||||
local spawn = {
|
||||
name = "mobs_mc:rabbit",
|
||||
neighbors = {"air"},
|
||||
chance = 15000,
|
||||
active_object_count = 10,
|
||||
min_light = 0,
|
||||
max_light = minetest.LIGHT_MAX+1,
|
||||
min_height = mobs_mc.spawn_height.overworld_min,
|
||||
max_height = mobs_mc.spawn_height.overworld_max,
|
||||
}
|
||||
|
||||
local spawn_desert = table.copy(spawn)
|
||||
spawn_desert.nodes = mobs_mc.spawn.desert
|
||||
spawn_desert.on_spawn = function(self, pos)
|
||||
local texture = "mobs_mc_rabbit_gold.png"
|
||||
self.base_texture = { "mobs_mc_rabbit_gold.png" }
|
||||
self.object:set_properties({textures = self.base_texture})
|
||||
end
|
||||
mobs:spawn(spawn_desert)
|
||||
|
||||
local spawn_snow = table.copy(spawn)
|
||||
spawn_snow.nodes = mobs_mc.spawn.snow
|
||||
spawn_snow.on_spawn = function(self, pos)
|
||||
local function spawn_rabbit(pos)
|
||||
local biome_data = minetest.get_biome_data(pos)
|
||||
local biome_name = biome_data and minetest.get_biome_name(biome_data.biome) or ""
|
||||
local mob = minetest.add_entity(pos, mob_name)
|
||||
local self = mob:get_luaentity()
|
||||
local texture
|
||||
local r = math.random(1, 100)
|
||||
-- 80% white fur
|
||||
if r <= 80 then
|
||||
texture = "mobs_mc_rabbit_white.png"
|
||||
-- 20% black and white fur
|
||||
if biome_name:find("Desert") then
|
||||
texture = "mobs_mc_rabbit_gold.png"
|
||||
else
|
||||
texture = "mobs_mc_rabbit_white_splotched.png"
|
||||
local r = math.random(1, 100)
|
||||
if biome_name:find("Ice") or biome_name:find("snow") or biome_name:find("Cold") then
|
||||
-- 80% white fur
|
||||
if r <= 80 then
|
||||
texture = "mobs_mc_rabbit_white.png"
|
||||
-- 20% black and white fur
|
||||
else
|
||||
texture = "mobs_mc_rabbit_white_splotched.png"
|
||||
end
|
||||
else
|
||||
-- 50% brown fur
|
||||
if r <= 50 then
|
||||
texture = "mobs_mc_rabbit_brown.png"
|
||||
-- 40% salt fur
|
||||
elseif r <= 90 then
|
||||
texture = "mobs_mc_rabbit_salt.png"
|
||||
-- 10% black fur
|
||||
else
|
||||
texture = "mobs_mc_rabbit_black.png"
|
||||
end
|
||||
end
|
||||
end
|
||||
self.base_texture = { texture }
|
||||
self.object:set_properties({textures = self.base_texture})
|
||||
self.base_texture = {texture}
|
||||
self.object:set_properties({textures = {texture}})
|
||||
end
|
||||
mobs:spawn(spawn_snow)
|
||||
|
||||
local spawn_grass = table.copy(spawn)
|
||||
spawn_grass.nodes = mobs_mc.spawn.grassland
|
||||
spawn_grass.on_spawn = function(self, pos)
|
||||
local texture
|
||||
local r = math.random(1, 100)
|
||||
-- 50% brown fur
|
||||
if r <= 50 then
|
||||
texture = "mobs_mc_rabbit_brown.png"
|
||||
-- 40% salt fur
|
||||
elseif r <= 90 then
|
||||
texture = "mobs_mc_rabbit_salt.png"
|
||||
-- 10% black fur
|
||||
else
|
||||
texture = "mobs_mc_rabbit_black.png"
|
||||
local function do_custom_rabbit(self)
|
||||
-- Easter egg: Change texture if rabbit is named “Toast”
|
||||
if self.nametag == "Toast" and not self._has_toast_texture then
|
||||
self._original_rabbit_texture = self.base_texture
|
||||
self.base_texture = { "mobs_mc_rabbit_toast.png" }
|
||||
self.object:set_properties({ textures = self.base_texture })
|
||||
self._has_toast_texture = true
|
||||
elseif self.nametag ~= "Toast" and self._has_toast_texture then
|
||||
self.base_texture = self._original_rabbit_texture
|
||||
self.object:set_properties({ textures = self.base_texture })
|
||||
self._has_toast_texture = false
|
||||
end
|
||||
self.base_texture = { texture }
|
||||
self.object:set_properties({textures = self.base_texture})
|
||||
end
|
||||
mobs:spawn(spawn_grass)
|
||||
]]--
|
||||
|
||||
local rabbit = {
|
||||
description = S("Rabbit"),
|
||||
type = "animal",
|
||||
spawn_class = "passive",
|
||||
passive = true,
|
||||
reach = 1,
|
||||
rotate = 270,
|
||||
hp_min = 3,
|
||||
hp_max = 3,
|
||||
xp_min = 1,
|
||||
xp_max = 3,
|
||||
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.49, 0.2},
|
||||
visual = "mesh",
|
||||
mesh = "mobs_mc_rabbit.b3d",
|
||||
textures = textures,
|
||||
visual_size = {x=1.5, y=1.5},
|
||||
sounds = sounds,
|
||||
makes_footstep_sound = false,
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3.7,
|
||||
follow_velocity = 1.1,
|
||||
floats = 1,
|
||||
runaway = true,
|
||||
jump = true,
|
||||
drops = {
|
||||
{name = mobs_mc.items.rabbit_raw, chance = 1, min = 0, max = 1, looting = "common",},
|
||||
{name = mobs_mc.items.rabbit_hide, chance = 1, min = 0, max = 1, looting = "common",},
|
||||
{name = mobs_mc.items.rabbit_foot, chance = 10, min = 0, max = 1, looting = "rare", looting_factor = 0.03,},
|
||||
},
|
||||
fear_height = 4,
|
||||
animation = {
|
||||
speed_normal = 25, speed_run = 50,
|
||||
stand_start = 0, stand_end = 0,
|
||||
walk_start = 0, walk_end = 20,
|
||||
run_start = 0, run_end = 20,
|
||||
},
|
||||
-- Follow (yellow) dangelions, carrots and golden carrots
|
||||
follow = mobs_mc.follow.rabbit,
|
||||
view_range = 8,
|
||||
-- Eat carrots and reduce their growth stage by 1
|
||||
replace_rate = 10,
|
||||
replace_what = mobs_mc.replace.rabbit,
|
||||
on_rightclick = function(self, clicker)
|
||||
-- Feed, tame protect or capture
|
||||
if mobs:feed_tame(self, clicker, 1, true, true) then return end
|
||||
end,
|
||||
do_custom = do_custom_rabbit,
|
||||
spawn = spawn_rabbit
|
||||
}
|
||||
|
||||
mobs:register_mob(mob_name, rabbit)
|
||||
|
||||
-- The killer bunny (Only with spawn egg)
|
||||
local killer_bunny = table.copy(rabbit)
|
||||
killer_bunny.description = S("Killer Bunny")
|
||||
killer_bunny.type = "monster"
|
||||
killer_bunny.spawn_class = "hostile"
|
||||
killer_bunny.attack_type = "dogfight"
|
||||
killer_bunny.specific_attack = { "player", "mobs_mc:wolf", "mobs_mc:dog" }
|
||||
killer_bunny.damage = 8
|
||||
killer_bunny.passive = false
|
||||
-- 8 armor points
|
||||
killer_bunny.armor = 50
|
||||
killer_bunny.textures = { "mobs_mc_rabbit_caerbannog.png" }
|
||||
killer_bunny.view_range = 16
|
||||
killer_bunny.replace_rate = nil
|
||||
killer_bunny.replace_what = nil
|
||||
killer_bunny.on_rightclick = nil
|
||||
killer_bunny.run_velocity = 6
|
||||
killer_bunny.do_custom = function(self)
|
||||
if not self._killer_bunny_nametag_set then
|
||||
self.nametag = S("The Killer Bunny")
|
||||
self._killer_bunny_nametag_set = true
|
||||
end
|
||||
end
|
||||
|
||||
mobs:register_mob("mobs_mc:killer_bunny", killer_bunny)
|
||||
|
||||
-- Mob spawning rules.
|
||||
-- Different skins depending on spawn location <- we customized spawn function
|
||||
|
||||
mobs:spawn_setup({
|
||||
name = mob_name,
|
||||
min_light = 9,
|
||||
chance = 1000,
|
||||
aoc = 8,
|
||||
biomes = biome_list,
|
||||
group_size_max = 1,
|
||||
baby_min = 1,
|
||||
baby_max = 2,
|
||||
})
|
||||
|
||||
-- Spawn egg
|
||||
mobs:register_egg("mobs_mc:rabbit", S("Rabbit"), "mobs_mc_spawn_icon_rabbit.png", 0)
|
||||
|
|
|
@ -285,7 +285,7 @@ local function initsky(player)
|
|||
end
|
||||
|
||||
-- MC-style clouds: Layer 127, thickness 4, fly to the “West”
|
||||
player:set_clouds({height=mcl_worlds.layer_to_y(127), speed={x=-2, z=0}, thickness=4, color="#FFF0FEF"})
|
||||
player:set_clouds(mcl_worlds:get_cloud_parameters() or {height=mcl_worlds.layer_to_y(127), speed={x=-2, z=0}, thickness=4, color="#FFF0FEF"})
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(initsky)
|
||||
|
|
|
@ -1,149 +1,149 @@
|
|||
--[[
|
||||
#!#!#!#Cake mod created by Jordan4ibanez#!#!#
|
||||
#!#!#!#Released under CC Attribution-ShareAlike 3.0 Unported #!#!#
|
||||
]]--
|
||||
|
||||
local CAKE_HUNGER_POINTS = 2
|
||||
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"}
|
||||
local slice_1 = { -7/16, -8/16, -7/16, -5/16, 0/16, 7/16}
|
||||
local slice_2 = { -7/16, -8/16, -7/16, -3/16, 0/16, 7/16}
|
||||
local slice_3 = { -7/16, -8/16, -7/16, -1/16, 0/16, 7/16}
|
||||
local slice_4 = { -7/16, -8/16, -7/16, 1/16, 0/16, 7/16}
|
||||
local slice_5 = { -7/16, -8/16, -7/16, 3/16, 0/16, 7/16}
|
||||
local slice_6 = { -7/16, -8/16, -7/16, 5/16, 0/16, 7/16}
|
||||
|
||||
local full_cake = { -7/16, -8/16, -7/16, 7/16, 0/16, 7/16}
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_cake:cake",
|
||||
recipe = {
|
||||
{"mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket"},
|
||||
{"mcl_core:sugar", "mcl_throwing:egg", "mcl_core:sugar"},
|
||||
{"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"},
|
||||
},
|
||||
replacements = {
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("mcl_cake:cake", {
|
||||
description = S("Cake"),
|
||||
_tt_help = S("With 7 tasty slices!").."\n"..S("Hunger points: +@1 per slice", CAKE_HUNGER_POINTS),
|
||||
_doc_items_longdesc = S("Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken."),
|
||||
_doc_items_usagehelp = S("Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full."),
|
||||
tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"},
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||
inventory_image = "cake.png",
|
||||
wield_image = "cake.png",
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
drawtype = "nodebox",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = full_cake
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = full_cake
|
||||
},
|
||||
stack_max = 1,
|
||||
groups = {handy=1, cake=7, food=2,no_eat_delay=1, attached_node=1, dig_by_piston=1, comparator_signal=14},
|
||||
drop = "",
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
-- Cake is subject to protection
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(2, ItemStack("mcl_cake:cake_6"), ItemStack("mcl_cake:cake"), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= "mcl_cake:cake" or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.add_node(pos,{type="node",name="mcl_cake:cake_6",param2=0})
|
||||
end
|
||||
end,
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
|
||||
_food_particles = false,
|
||||
_mcl_saturation = 0.4,
|
||||
_mcl_blast_resistance = 0.5,
|
||||
_mcl_hardness = 0.5,
|
||||
})
|
||||
|
||||
local register_slice = function(level, nodebox, desc)
|
||||
local this = "mcl_cake:cake_"..level
|
||||
local after_eat = "mcl_cake:cake_"..(level-1)
|
||||
local on_rightclick
|
||||
if level > 1 then
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack(after_eat), ItemStack(this), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.add_node(pos,{type="node",name=after_eat,param2=0})
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Last slice
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack("mcl:cake:cake 0"), ItemStack("mcl_cake:cake_1"), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.remove_node(pos)
|
||||
minetest.check_for_falling(pos)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node(this, {
|
||||
description = desc,
|
||||
_doc_items_create_entry = false,
|
||||
tiles = cake_texture,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
drawtype = "nodebox",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = nodebox,
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = nodebox,
|
||||
},
|
||||
groups = {handy=1, cake=level, food=2,no_eat_delay=1,attached_node=1,not_in_creative_inventory=1,dig_by_piston=1,comparator_signal=level*2},
|
||||
drop = "",
|
||||
on_rightclick = on_rightclick,
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
|
||||
_food_particles = false,
|
||||
_mcl_saturation = 0.4,
|
||||
_mcl_blast_resistance = 0.5,
|
||||
_mcl_hardness = 0.5,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doc") then
|
||||
doc.add_entry_alias("nodes", "mcl_cake:cake", "nodes", "mcl_cake:cake_"..level)
|
||||
end
|
||||
end
|
||||
|
||||
register_slice(6, slice_6, S("Cake (6 Slices Left)"))
|
||||
register_slice(5, slice_5, S("Cake (5 Slices Left)"))
|
||||
register_slice(4, slice_4, S("Cake (4 Slices Left)"))
|
||||
register_slice(3, slice_3, S("Cake (3 Slices Left)"))
|
||||
register_slice(2, slice_2, S("Cake (2 Slices Left)"))
|
||||
register_slice(1, slice_1, S("Cake (1 Slice Left)"))
|
||||
--[[
|
||||
#!#!#!#Cake mod created by Jordan4ibanez#!#!#
|
||||
#!#!#!#Released under CC Attribution-ShareAlike 3.0 Unported #!#!#
|
||||
]]--
|
||||
|
||||
local CAKE_HUNGER_POINTS = 2
|
||||
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"}
|
||||
local slice_1 = { -7/16, -8/16, -7/16, -5/16, 0/16, 7/16}
|
||||
local slice_2 = { -7/16, -8/16, -7/16, -3/16, 0/16, 7/16}
|
||||
local slice_3 = { -7/16, -8/16, -7/16, -1/16, 0/16, 7/16}
|
||||
local slice_4 = { -7/16, -8/16, -7/16, 1/16, 0/16, 7/16}
|
||||
local slice_5 = { -7/16, -8/16, -7/16, 3/16, 0/16, 7/16}
|
||||
local slice_6 = { -7/16, -8/16, -7/16, 5/16, 0/16, 7/16}
|
||||
|
||||
local full_cake = { -7/16, -8/16, -7/16, 7/16, 0/16, 7/16}
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_cake:cake",
|
||||
recipe = {
|
||||
{"mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket"},
|
||||
{"mcl_core:sugar", "mcl_throwing:egg", "mcl_core:sugar"},
|
||||
{"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"},
|
||||
},
|
||||
replacements = {
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
{"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("mcl_cake:cake", {
|
||||
description = S("Cake"),
|
||||
_tt_help = S("With 7 tasty slices!").."\n"..S("Hunger points: +@1 per slice", CAKE_HUNGER_POINTS),
|
||||
_doc_items_longdesc = S("Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken."),
|
||||
_doc_items_usagehelp = S("Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full."),
|
||||
tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"},
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||
inventory_image = "cake.png",
|
||||
wield_image = "cake.png",
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
drawtype = "nodebox",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = full_cake
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = full_cake
|
||||
},
|
||||
stack_max = 1,
|
||||
groups = {handy=1, cake=7, food=2, no_eat_delay=1, compostability=100, attached_node=1, dig_by_piston=1, comparator_signal=14},
|
||||
drop = "",
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
-- Cake is subject to protection
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(2, ItemStack("mcl_cake:cake_6"), ItemStack("mcl_cake:cake"), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= "mcl_cake:cake" or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.add_node(pos,{type="node",name="mcl_cake:cake_6",param2=0})
|
||||
end
|
||||
end,
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
|
||||
_food_particles = false,
|
||||
_mcl_saturation = 0.4,
|
||||
_mcl_blast_resistance = 0.5,
|
||||
_mcl_hardness = 0.5,
|
||||
})
|
||||
|
||||
local register_slice = function(level, nodebox, desc)
|
||||
local this = "mcl_cake:cake_"..level
|
||||
local after_eat = "mcl_cake:cake_"..(level-1)
|
||||
local on_rightclick
|
||||
if level > 1 then
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack(after_eat), ItemStack(this), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.add_node(pos,{type="node",name=after_eat,param2=0})
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Last slice
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack("mcl:cake:cake 0"), ItemStack("mcl_cake:cake_1"), clicker, {type="nothing"})
|
||||
-- Check if we were allowed to eat
|
||||
if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
minetest.remove_node(pos)
|
||||
minetest.check_for_falling(pos)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_node(this, {
|
||||
description = desc,
|
||||
_doc_items_create_entry = false,
|
||||
tiles = cake_texture,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
drawtype = "nodebox",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = nodebox,
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = nodebox,
|
||||
},
|
||||
groups = {handy=1, cake=level, food=2, no_eat_delay=1, compostability=100, attached_node=1, not_in_creative_inventory=1, dig_by_piston=1, comparator_signal=level*2},
|
||||
drop = "",
|
||||
on_rightclick = on_rightclick,
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
|
||||
_food_particles = false,
|
||||
_mcl_saturation = 0.4,
|
||||
_mcl_blast_resistance = 0.5,
|
||||
_mcl_hardness = 0.5,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doc") then
|
||||
doc.add_entry_alias("nodes", "mcl_cake:cake", "nodes", "mcl_cake:cake_"..level)
|
||||
end
|
||||
end
|
||||
|
||||
register_slice(6, slice_6, S("Cake (6 Slices Left)"))
|
||||
register_slice(5, slice_5, S("Cake (5 Slices Left)"))
|
||||
register_slice(4, slice_4, S("Cake (4 Slices Left)"))
|
||||
register_slice(3, slice_3, S("Cake (3 Slices Left)"))
|
||||
register_slice(2, slice_2, S("Cake (2 Slices Left)"))
|
||||
register_slice(1, slice_1, S("Cake (1 Slice Left)"))
|
||||
|
|
|
@ -32,108 +32,6 @@ minetest.register_craft({
|
|||
}
|
||||
})
|
||||
|
||||
local compostability = {
|
||||
["mcl_cake:cake"] = 100,
|
||||
["mcl_farming:pumpkin_pie"] = 100,
|
||||
|
||||
["mcl_farming:potato_item_baked"] = 85,
|
||||
["mcl_farming:bread"] = 85,
|
||||
["mcl_farming:cookie"] = 85,
|
||||
["mcl_farming:hay_block"] = 85,
|
||||
-- mushroom cap block have 64 variants, wtf!?
|
||||
["mcl_mushrooms:brown_mushroom_block_cap_111111"] = 85,
|
||||
["mcl_mushrooms:red_mushroom_block_cap_111111"] = 85,
|
||||
["mcl_nether:nether_wart_block"] = 85,
|
||||
["mcl_mushroom:warped_wart_block"] = 85,
|
||||
|
||||
["mcl_core:apple"] = 65,
|
||||
-- missing: azalea
|
||||
["mcl_farming:beetroot_item"] = 65,
|
||||
-- missing: big dripleaf
|
||||
["mcl_farming:carrot_item"] = 65,
|
||||
-- what's up with cocoa beans?
|
||||
["mcl_dye:brown"] = 65,
|
||||
["mcl_flowers:fern"] = 65,
|
||||
["mcl_flowers:double_fern"] = 65,
|
||||
["mcl_flowers:allium"] = 65,
|
||||
["mcl_flowers:azure_bluet"] = 65,
|
||||
["mcl_flowers:blue_orchid"] = 65,
|
||||
["mcl_flowers:dandelion"] = 65,
|
||||
["mcl_flowers:lilac"] = 65,
|
||||
["mcl_flowers:oxeye_daisy"] = 65,
|
||||
["mcl_flowers:poppy"] = 65,
|
||||
["mcl_flowers:tulip_orange"] = 65,
|
||||
["mcl_flowers:tulip_pink"] = 65,
|
||||
["mcl_flowers:tulip_red"] = 65,
|
||||
["mcl_flowers:tulip_white"] = 65,
|
||||
["mcl_flowers:peony"] = 65,
|
||||
["mcl_flowers:rose_bush"] = 65,
|
||||
["mcl_flowers:sunflower"] = 65,
|
||||
["mcl_flowers:waterlily"] = 65,
|
||||
["mcl_farming:melon"] = 65,
|
||||
["mcl_core:moss"] = 65,
|
||||
-- mushroom aliases below?
|
||||
["mcl_farming:mushroom_brown"] = 65,
|
||||
["mcl_mushrooms:mushroom_brown"] = 65,
|
||||
["mcl_farming:mushroom_red"] = 65,
|
||||
["mcl_mushrooms:mushroom_red"] = 65,
|
||||
["mcl_mushrooms:brown_mushroom_block_stem_full"] = 65,
|
||||
["mcl_mushrooms:red_mushroom_block_stem_full"] = 65,
|
||||
-- nether wart
|
||||
["mcl_farming:potato_item"] = 65,
|
||||
["mcl_farming:pumpkin"] = 65,
|
||||
["mcl_farming:pumpkin_face_light"] = 65,
|
||||
["mcl_ocean:sea_pickle_"] = 65,
|
||||
["mcl_mushroom:shroomlight"] = 65,
|
||||
-- missing: spore blossom
|
||||
["mcl_farming:wheat_item"] = 65,
|
||||
["mcl_mushroom:crimson_fungus"] = 65,
|
||||
["mcl_mushroom:warped_fungus"] = 65,
|
||||
["mcl_mushroom:crimson_roots"] = 65,
|
||||
["mcl_mushroom:warped_roots"] = 65,
|
||||
|
||||
["mcl_core:cactus"] = 50,
|
||||
["mcl_ocean:dried_kelp_block"] = 50,
|
||||
-- missing: flowering azalea leaves
|
||||
-- missing: glow lichen
|
||||
["mcl_farming:melon_item"] = 50,
|
||||
["mcl_mushroom:nether_sprouts"] = 50,
|
||||
["mcl_core:reeds"] = 50,
|
||||
["mcl_flowers:double_grass"] = 50,
|
||||
["mcl_core:vine"] = 50,
|
||||
-- missing: weeping vines
|
||||
["mcl_mushroom:twisting_vines"] = 50,
|
||||
|
||||
["mcl_flowers:tallgrass"] = 30,
|
||||
["mcl_farming:beetroot_seeds"] = 30,
|
||||
["mcl_core:dirt_with_grass"] = 30,
|
||||
["mcl_core:tallgrass"] = 30,
|
||||
["mcl_ocean:dried_kelp"] = 30,
|
||||
["mcl_ocean:kelp"] = 30,
|
||||
["mcl_core:leaves"] = 30,
|
||||
["mcl_core:acacialeaves"] = 30,
|
||||
["mcl_core:birchleaves"] = 30,
|
||||
["mcl_core:darkleaves"] = 30,
|
||||
["mcl_core:jungleleaves"] = 30,
|
||||
["mcl_core:spruceleaves"] = 30,
|
||||
--
|
||||
["mcl_farming:melon_seeds"] = 30,
|
||||
["mcl_core:moss_carpet"] = 30,
|
||||
["mcl_farming:pumpkin_seeds"] = 30,
|
||||
["mcl_core:sapling"] = 30,
|
||||
["mcl_core:acaciasapling"] = 30,
|
||||
["mcl_core:birchsapling"] = 30,
|
||||
["mcl_core:darksapling"] = 30,
|
||||
["mcl_core:junglesapling"] = 30,
|
||||
["mcl_core:sprucesapling"] = 30,
|
||||
["mcl_ocean:seagrass"] = 30,
|
||||
-- missing: small dripleaf
|
||||
["mcl_sweet_berry:sweet_berry"] = 30,
|
||||
["mcl_farming:sweet_berry"] = 30,
|
||||
["mcl_farming:wheat_seeds"] = 30,
|
||||
|
||||
}
|
||||
|
||||
local function composter_add_item(pos, node, player, itemstack, pointed_thing)
|
||||
--
|
||||
-- handler for filling the composter when rightclicked
|
||||
|
@ -147,8 +45,9 @@ local function composter_add_item(pos, node, player, itemstack, pointed_thing)
|
|||
return itemstack
|
||||
end
|
||||
local itemname = itemstack:get_name()
|
||||
local chance = compostability[itemname]
|
||||
if chance then
|
||||
local chance = minetest.get_item_group(itemname, "compostability")
|
||||
|
||||
if chance > 0 then
|
||||
if not minetest.is_creative_enabled(player:get_player_name()) then
|
||||
itemstack:take_item()
|
||||
end
|
||||
|
|
|
@ -139,7 +139,7 @@ minetest.register_craftitem("mcl_core:apple", {
|
|||
stack_max = 64,
|
||||
on_place = minetest.item_eat(4),
|
||||
on_secondary_use = minetest.item_eat(4),
|
||||
groups = { food = 2, eatable = 4 },
|
||||
groups = { food = 2, eatable = 4, compostability=65 },
|
||||
_mcl_saturation = 2.4,
|
||||
})
|
||||
|
||||
|
|
|
@ -369,7 +369,7 @@ minetest.register_node("mcl_core:dirt_with_grass", {
|
|||
color = "#8EB971",
|
||||
is_ground_content = true,
|
||||
stack_max = 64,
|
||||
groups = {handy=1,shovely=1,dirt=2,grass_block=1, grass_block_no_snow=1, soil=1, soil_sapling=2, soil_sugarcane=1, cultivatable=2, spreading_dirt_type=1, enderman_takable=1, building_block=1},
|
||||
groups = {handy=1,shovely=1,dirt=2,grass_block=1, grass_block_no_snow=1, soil=1, soil_sapling=2, soil_sugarcane=1, cultivatable=2, spreading_dirt_type=1, enderman_takable=1, building_block=1, compostability=30},
|
||||
drop = "mcl_core:dirt",
|
||||
sounds = mcl_sounds.node_sound_dirt_defaults({
|
||||
footstep = {name="default_grass_footstep", gain=0.1},
|
||||
|
@ -473,7 +473,7 @@ minetest.register_node("mcl_core:moss", {
|
|||
tiles = {"mcl_core_moss_block.png"},
|
||||
is_ground_content = true,
|
||||
stack_max = 64,
|
||||
groups = {handy=1, hoey=1},
|
||||
groups = {handy=1, hoey=1, compostability=65},
|
||||
--sounds = TODO: add sound
|
||||
_mcl_blast_resistance = 0.1,
|
||||
_mcl_hardness = 0.1,
|
||||
|
@ -1096,7 +1096,7 @@ minetest.register_node("mcl_core:moss", {
|
|||
tiles = {"mcl_core_moss_block.png"},
|
||||
is_ground_content = true,
|
||||
stack_max = 64,
|
||||
groups = {handy=1, hoey=1},
|
||||
groups = {handy=1, hoey=1, compostability=65},
|
||||
--sounds = TODO: add sound
|
||||
_mcl_blast_resistance = 0.1,
|
||||
_mcl_hardness = 0.1,
|
||||
|
@ -1153,7 +1153,7 @@ minetest.register_node("mcl_core:moss_carpet", {
|
|||
{-8/16, -8/16, -8/16, 8/16, -7/16, 8/16},
|
||||
},
|
||||
},
|
||||
groups = {handy=1, hoey=1},
|
||||
groups = {handy=1, hoey=1, compostability=30},
|
||||
--sounds = TODO: add sound
|
||||
_mcl_blast_resistance = 0.1,
|
||||
_mcl_hardness = 0.1,
|
||||
|
|
|
@ -12,7 +12,7 @@ minetest.register_node("mcl_core:cactus", {
|
|||
tiles = {"mcl_core_cactus_top.png", "mcl_core_cactus_bottom.png", "mcl_core_cactus_side.png"},
|
||||
is_ground_content = true,
|
||||
stack_max = 64,
|
||||
groups = {handy=1, attached_node=1, plant=1, deco_block=1, dig_by_piston=1, enderman_takable=1},
|
||||
groups = {handy=1, attached_node=1, plant=1, deco_block=1, dig_by_piston=1, enderman_takable=1, compostability=50},
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
|
@ -79,7 +79,7 @@ minetest.register_node("mcl_core:reeds", {
|
|||
},
|
||||
},
|
||||
stack_max = 64,
|
||||
groups = {dig_immediate=3, craftitem=1, deco_block=1, plant=1, non_mycelium_plant=1, dig_by_piston=1},
|
||||
groups = {dig_immediate=3, craftitem=1, deco_block=1, plant=1, non_mycelium_plant=1, dig_by_piston=1, compostability=50},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
node_placement_prediction = "",
|
||||
drop = "mcl_core:reeds", -- to prevent color inheritation
|
||||
|
|
|
@ -104,7 +104,7 @@ minetest.register_node("mcl_core:vine", {
|
|||
type = "wallmounted",
|
||||
},
|
||||
stack_max = 64,
|
||||
groups = {handy=1,axey=1,shearsy=1,swordy=1, flammable=2,deco_block=1,destroy_by_lava_flow=1,dig_by_piston=1, fire_encouragement=15, fire_flammability=100},
|
||||
groups = {handy=1,axey=1,shearsy=1,swordy=1, flammable=2,deco_block=1,destroy_by_lava_flow=1,dig_by_piston=1, fire_encouragement=15, fire_flammability=100, compostability=50},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
drop = "",
|
||||
_mcl_shears_drop = true,
|
||||
|
|
|
@ -162,7 +162,8 @@ local function register_leaves(subname, description, longdesc, tiles, sapling, d
|
|||
deco_block=1,
|
||||
dig_by_piston=1,
|
||||
fire_encouragement=30,
|
||||
fire_flammability=60
|
||||
fire_flammability=60,
|
||||
compostability=30
|
||||
},
|
||||
drop = get_drops(0),
|
||||
_mcl_shears_drop = true,
|
||||
|
@ -194,7 +195,7 @@ local function register_sapling(subname, description, longdesc, tt_help, texture
|
|||
fixed = selbox
|
||||
},
|
||||
stack_max = 64,
|
||||
groups = {dig_immediate=3, plant=1,sapling=1,non_mycelium_plant=1,attached_node=1,dig_by_water=1,dig_by_piston=1,destroy_by_lava_flow=1,deco_block=1},
|
||||
groups = {dig_immediate=3, plant=1,sapling=1,non_mycelium_plant=1,attached_node=1,dig_by_water=1,dig_by_piston=1,destroy_by_lava_flow=1,deco_block=1, compostability=30},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
@ -275,4 +276,4 @@ register_leaves("birchleaves", S("Birch Leaves"), S("Birch leaves are grown from
|
|||
-- Node aliases
|
||||
|
||||
minetest.register_alias("default:acacia_tree", "mcl_core:acaciatree")
|
||||
minetest.register_alias("default:acacia_leaves", "mcl_core:acacialeaves")
|
||||
minetest.register_alias("default:acacia_leaves", "mcl_core:acacialeaves")
|
||||
|
|
|
@ -78,7 +78,7 @@ dyelocal.dyes = {
|
|||
{"dark_green", "dye_dark_green", S("Cactus Green"),{dye=1, craftitem=1, basecolor_green=1, excolor_green=1, unicolor_dark_green=1}},
|
||||
{"green", "mcl_dye_lime", S("Lime Dye"), {dye=1, craftitem=1, basecolor_green=1, excolor_green=1, unicolor_green=1}},
|
||||
{"yellow", "dye_yellow", S("Dandelion Yellow"), {dye=1, craftitem=1, basecolor_yellow=1, excolor_yellow=1, unicolor_yellow=1}},
|
||||
{"brown", "mcl_dye_brown", S("Cocoa Beans"), {dye=1, craftitem=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1}},
|
||||
{"brown", "mcl_dye_brown", S("Cocoa Beans"), {dye=1, craftitem=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1, compostability=65}},
|
||||
{"orange", "dye_orange", S("Orange Dye"), {dye=1, craftitem=1, basecolor_orange=1, excolor_orange=1, unicolor_orange=1}},
|
||||
{"red", "dye_red", S("Rose Red"), {dye=1, craftitem=1, basecolor_red=1, excolor_red=1, unicolor_red=1}},
|
||||
{"magenta", "dye_magenta", S("Magenta Dye"), {dye=1, craftitem=1, basecolor_magenta=1, excolor_red_violet=1,unicolor_red_violet=1}},
|
||||
|
|
|
@ -5,7 +5,7 @@ minetest.register_craftitem("mcl_farming:beetroot_seeds", {
|
|||
_tt_help = S("Grows on farmland"),
|
||||
_doc_items_longdesc = S("Grows into a beetroot plant. Chickens like beetroot seeds."),
|
||||
_doc_items_usagehelp = S("Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds."),
|
||||
groups = { craftitem=1 },
|
||||
groups = { craftitem=1, compostability=30 },
|
||||
inventory_image = "mcl_farming_beetroot_seeds.png",
|
||||
wield_image = "mcl_farming_beetroot_seeds.png",
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
|
@ -133,7 +133,7 @@ minetest.register_craftitem("mcl_farming:beetroot_item", {
|
|||
wield_image = "mcl_farming_beetroot.png",
|
||||
on_place = minetest.item_eat(1),
|
||||
on_secondary_use = minetest.item_eat(1),
|
||||
groups = { food = 2, eatable = 1 },
|
||||
groups = { food = 2, eatable = 1, compostability=65 },
|
||||
_mcl_saturation = 1.2,
|
||||
})
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ minetest.register_craftitem("mcl_farming:carrot_item", {
|
|||
_doc_items_longdesc = S("Carrots can be eaten and planted. Pigs and rabbits like carrots."),
|
||||
_doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."),
|
||||
inventory_image = "farming_carrot.png",
|
||||
groups = { food = 2, eatable = 3 },
|
||||
groups = { food = 2, eatable = 3, compostability=65 },
|
||||
_mcl_saturation = 3.6,
|
||||
on_secondary_use = minetest.item_eat(3),
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
|
|
|
@ -7,7 +7,7 @@ minetest.register_craftitem("mcl_farming:melon_seeds", {
|
|||
_doc_items_longdesc = S("Grows into a melon stem which in turn grows melons. Chickens like melon seeds."),
|
||||
_doc_items_usagehelp = S("Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds."),
|
||||
stack_max = 64,
|
||||
groups = { craftitem=1 },
|
||||
groups = { craftitem=1, compostability=30 },
|
||||
inventory_image = "mcl_farming_melon_seeds.png",
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
return mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:melontige_1")
|
||||
|
@ -21,7 +21,7 @@ local melon_base_def = {
|
|||
_doc_items_longdesc = S("A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices."),
|
||||
stack_max = 64,
|
||||
tiles = {"farming_melon_top.png", "farming_melon_top.png", "farming_melon_side.png", "farming_melon_side.png", "farming_melon_side.png", "farming_melon_side.png"},
|
||||
groups = {handy=1,axey=1, plant=1,building_block=1,enderman_takable=1,dig_by_piston=1},
|
||||
groups = {handy=1,axey=1, plant=1,building_block=1,enderman_takable=1,dig_by_piston=1, compostability=65},
|
||||
drop = {
|
||||
max_items = 1,
|
||||
items = {
|
||||
|
@ -134,7 +134,7 @@ minetest.register_craftitem("mcl_farming:melon_item", {
|
|||
inventory_image = "farming_melon.png",
|
||||
on_place = minetest.item_eat(2),
|
||||
on_secondary_use = minetest.item_eat(2),
|
||||
groups = { food = 2, eatable = 2 },
|
||||
groups = { food = 2, eatable = 2, compostability=50 },
|
||||
_mcl_saturation = 1.2,
|
||||
})
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ minetest.register_craftitem("mcl_farming:potato_item", {
|
|||
_doc_items_longdesc = S("Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes."),
|
||||
_doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."),
|
||||
inventory_image = "farming_potato.png",
|
||||
groups = { food = 2, eatable = 1 },
|
||||
groups = { food = 2, eatable = 1, compostability=65 },
|
||||
_mcl_saturation = 0.6,
|
||||
stack_max = 64,
|
||||
on_secondary_use = minetest.item_eat(1),
|
||||
|
@ -112,7 +112,7 @@ minetest.register_craftitem("mcl_farming:potato_item_baked", {
|
|||
inventory_image = "farming_potato_baked.png",
|
||||
on_place = minetest.item_eat(5),
|
||||
on_secondary_use = minetest.item_eat(5),
|
||||
groups = { food = 2, eatable = 5 },
|
||||
groups = { food = 2, eatable = 5, compostability = 85 },
|
||||
_mcl_saturation = 6.0,
|
||||
})
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ minetest.register_craftitem("mcl_farming:pumpkin_seeds", {
|
|||
_doc_items_usagehelp = S("Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds."),
|
||||
stack_max = 64,
|
||||
inventory_image = "mcl_farming_pumpkin_seeds.png",
|
||||
groups = { craftitem=1 },
|
||||
groups = { craftitem=1, compostability=30 },
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
return mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:pumpkin_1")
|
||||
end
|
||||
|
@ -99,7 +99,7 @@ local pumpkin_base_def = {
|
|||
stack_max = 64,
|
||||
paramtype2 = "facedir",
|
||||
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, enderman_takable=1},
|
||||
groups = {handy=1,axey=1, plant=1,building_block=1, dig_by_piston=1, enderman_takable=1, compostability=65},
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
on_rotate = on_rotate,
|
||||
_mcl_blast_resistance = 1,
|
||||
|
@ -192,7 +192,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, building_block=1, dig_by_piston=1, compostability=65 },
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
on_construct = function(pos)
|
||||
-- Attempt to spawn iron golem or snow golem
|
||||
|
@ -230,7 +230,7 @@ minetest.register_craftitem("mcl_farming:pumpkin_pie", {
|
|||
wield_image = "mcl_farming_pumpkin_pie.png",
|
||||
on_place = minetest.item_eat(8),
|
||||
on_secondary_use = minetest.item_eat(8),
|
||||
groups = { food = 2, eatable = 8 },
|
||||
groups = { food = 2, eatable = 8, compostability=100 },
|
||||
_mcl_saturation = 4.8,
|
||||
})
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ minetest.register_craftitem("mcl_farming:sweet_berry", {
|
|||
inventory_image = "mcl_farming_sweet_berry.png",
|
||||
_mcl_saturation = 0.2,
|
||||
stack_max = 64,
|
||||
groups = { food = 2, eatable = 1 },
|
||||
groups = { food = 2, eatable = 1, compostability=30 },
|
||||
on_secondary_use = minetest.item_eat(1),
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local new = mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_sweet_berry:sweet_berry_bush_0")
|
||||
|
|
|
@ -9,7 +9,7 @@ minetest.register_craftitem("mcl_farming:wheat_seeds", {
|
|||
Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant.
|
||||
They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds.
|
||||
]]),
|
||||
groups = { craftitem=1 },
|
||||
groups = { craftitem=1, compostability=30 },
|
||||
inventory_image = "mcl_farming_wheat_seeds.png",
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
return mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:wheat_1")
|
||||
|
@ -104,7 +104,7 @@ minetest.register_craftitem("mcl_farming:wheat_item", {
|
|||
_doc_items_longdesc = S("Wheat is used in crafting. Some animals like wheat."),
|
||||
_doc_items_usagehelp = S("Use the “Place” key on an animal to try to feed it wheat."),
|
||||
inventory_image = "farming_wheat_harvested.png",
|
||||
groups = { craftitem = 1 },
|
||||
groups = { craftitem = 1, compostability=65 },
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -125,7 +125,7 @@ minetest.register_craftitem("mcl_farming:cookie", {
|
|||
description = S("Cookie"),
|
||||
_doc_items_longdesc = S("This is a food item which can be eaten."),
|
||||
inventory_image = "farming_cookie.png",
|
||||
groups = {food=2, eatable=2},
|
||||
groups = {food=2, eatable=2, compostability=85},
|
||||
_mcl_saturation = 0.4,
|
||||
on_place = minetest.item_eat(2),
|
||||
on_secondary_use = minetest.item_eat(2),
|
||||
|
@ -136,7 +136,7 @@ minetest.register_craftitem("mcl_farming:bread", {
|
|||
description = S("Bread"),
|
||||
_doc_items_longdesc = S("This is a food item which can be eaten."),
|
||||
inventory_image = "farming_bread.png",
|
||||
groups = {food=2, eatable=5},
|
||||
groups = {food=2, eatable=5, compostability=85},
|
||||
_mcl_saturation = 6.0,
|
||||
on_place = minetest.item_eat(5),
|
||||
on_secondary_use = minetest.item_eat(5),
|
||||
|
@ -156,8 +156,7 @@ minetest.register_node("mcl_farming:hay_block", {
|
|||
stack_max = 64,
|
||||
paramtype2 = "facedir",
|
||||
on_place = mcl_util.rotate_axis,
|
||||
groups = {handy=1, hoey=1, flammable=2, fire_encouragement=60,
|
||||
fire_flammability=20, building_block=1, fall_damage_add_percent=-80},
|
||||
groups = {handy=1, hoey=1, compostability=85, flammable=2, fire_encouragement=60, fire_flammability=20, building_block=1, fall_damage_add_percent=-80},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
on_rotate = on_rotate,
|
||||
_mcl_blast_resistance = 0.5,
|
||||
|
|
|
@ -80,7 +80,7 @@ function mcl_flowers.register_simple_flower(name, def)
|
|||
walkable = false,
|
||||
stack_max = 64,
|
||||
drop = def.drop,
|
||||
groups = {dig_immediate=3,flammable=2,fire_encouragement=60,fire_flammability=100,plant=1,flower=1,place_flowerlike=1,non_mycelium_plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1},
|
||||
groups = {dig_immediate=3,flammable=2,fire_encouragement=60,fire_flammability=100,plant=1,flower=1,place_flowerlike=1,non_mycelium_plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1, compostability=65},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
node_placement_prediction = "",
|
||||
on_place = on_place_flower,
|
||||
|
@ -143,7 +143,7 @@ local def_tallgrass = {
|
|||
walkable = false,
|
||||
buildable_to = true,
|
||||
is_ground_content = true,
|
||||
groups = {handy=1,shearsy=1, flammable=3,fire_encouragement=60,fire_flammability=100,attached_node=1,plant=1,place_flowerlike=2,non_mycelium_plant=1,dig_by_water=1,destroy_by_lava_flow=1,deco_block=1},
|
||||
groups = {handy=1,shearsy=1, flammable=3,fire_encouragement=60,fire_flammability=100,attached_node=1,plant=1,place_flowerlike=2,non_mycelium_plant=1,dig_by_water=1,destroy_by_lava_flow=1,deco_block=1, compostability=30},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
drop = wheat_seed_drop,
|
||||
_mcl_shears_drop = true,
|
||||
|
@ -163,6 +163,7 @@ def_fern._doc_items_longdesc = S("Ferns are small plants which occur naturally i
|
|||
def_fern.tiles = { "mcl_flowers_fern.png" }
|
||||
def_fern.inventory_image = "mcl_flowers_fern_inv.png"
|
||||
def_fern.wield_image = "mcl_flowers_fern_inv.png"
|
||||
def_fern.groups.compostability=65
|
||||
def_fern.selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -6/16, -0.5, -6/16, 6/16, 5/16, 6/16 },
|
||||
|
@ -205,6 +206,13 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
|||
bottom_groups.not_in_creative_inventory = 1
|
||||
create_entry = false
|
||||
end
|
||||
-- some special cases for the composter group
|
||||
if name == "double_fern" or "peony" or "rose_bush" or "lilac" or "sunflower" then
|
||||
bottom_groups.compostability = 65
|
||||
end
|
||||
if name == "double_grass" then
|
||||
bottom_groups.compostability = 50
|
||||
end
|
||||
-- Drop itself by default
|
||||
local drop_bottom, drop_top
|
||||
if not drop then
|
||||
|
@ -410,7 +418,7 @@ minetest.register_node("mcl_flowers:waterlily", {
|
|||
liquids_pointable = true,
|
||||
walkable = true,
|
||||
sunlight_propagates = true,
|
||||
groups = {dig_immediate = 3, plant=1, dig_by_water = 1,destroy_by_lava_flow=1, dig_by_piston = 1, deco_block=1, dig_by_boat=1},
|
||||
groups = {dig_immediate = 3, plant=1, dig_by_water = 1,destroy_by_lava_flow=1, dig_by_piston = 1, deco_block=1, dig_by_boat=1, compostability=65},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
node_placement_prediction = "",
|
||||
node_box = {
|
||||
|
|
|
@ -32,7 +32,7 @@ minetest.register_node("mcl_mushroom:warped_fungus", {
|
|||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1},
|
||||
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, compostability=65},
|
||||
|
||||
light_source = 1,
|
||||
selection_box = {
|
||||
|
@ -67,7 +67,7 @@ minetest.register_node("mcl_mushroom:twisting_vines", {
|
|||
walkable = false,
|
||||
climbable = true,
|
||||
buildable_to = true,
|
||||
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1},
|
||||
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1, compostability=50},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -3/16, -0.5, -3/16, 3/16, 0.5, 3/16 },
|
||||
|
@ -108,7 +108,7 @@ minetest.register_node("mcl_mushroom:nether_sprouts", {
|
|||
paramtype = "light",
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1},
|
||||
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1, compostability=50},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -4/16, -0.5, -4/16, 4/16, 0, 4/16 },
|
||||
|
@ -130,7 +130,7 @@ minetest.register_node("mcl_mushroom:warped_roots", {
|
|||
paramtype = "light",
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1},
|
||||
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1, compostability=65},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -6/16, -0.5, -6/16, 6/16, -4/16, 6/16 },
|
||||
|
@ -144,7 +144,7 @@ minetest.register_node("mcl_mushroom:warped_roots", {
|
|||
minetest.register_node("mcl_mushroom:warped_wart_block", {
|
||||
description = S("Warped Wart Block"),
|
||||
tiles = {"warped_wart_block.png"},
|
||||
groups = {handy=1,hoe=7,swordy=1, deco_block=1, },
|
||||
groups = {handy=1,hoe=7,swordy=1, compostability=85, deco_block=1, },
|
||||
stack_max = 64,
|
||||
_mcl_hardness = 2,
|
||||
})
|
||||
|
@ -152,7 +152,7 @@ minetest.register_node("mcl_mushroom:warped_wart_block", {
|
|||
minetest.register_node("mcl_mushroom:shroomlight", {
|
||||
description = S("Shroomlight"),
|
||||
tiles = {"shroomlight.png"},
|
||||
groups = {handy=1,hoe=7,swordy=1, leaves=1, deco_block=1, },
|
||||
groups = {handy=1,hoe=7,swordy=1, leaves=1, deco_block=1, compostability=65, },
|
||||
stack_max = 64,
|
||||
_mcl_hardness = 2,
|
||||
-- this is 15 in Minecraft
|
||||
|
@ -305,7 +305,7 @@ minetest.register_node("mcl_mushroom:crimson_fungus", {
|
|||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1},
|
||||
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1, compostability=65},
|
||||
|
||||
light_source = 1,
|
||||
selection_box = {
|
||||
|
@ -339,7 +339,7 @@ minetest.register_node("mcl_mushroom:crimson_roots", {
|
|||
paramtype = "light",
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1},
|
||||
groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1, compostability=65},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -6/16, -0.5, -6/16, 6/16, -4/16, 6/16 },
|
||||
|
|
|
@ -3,7 +3,7 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
|||
local vector = vector
|
||||
|
||||
local template = {
|
||||
groups = {handy=1,axey=1, building_block = 1, material_wood = 1, flammable = -1 },
|
||||
groups = {handy=1,axey=1, building_block = 1, material_wood = 1, flammable = -1, compostability=85 },
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
is_ground_content = true,
|
||||
_mcl_blast_resistance = 0.2,
|
||||
|
@ -51,6 +51,7 @@ local function register_mushroom(color, species_id, template, d_cap, d_stem, d_s
|
|||
stem_full.tiles = { "mcl_mushrooms_mushroom_block_skin_stem.png" }
|
||||
stem_full.groups.huge_mushroom = species_id
|
||||
stem_full.groups.huge_mushroom_stem = 2
|
||||
stem_full.groups.compostability=65
|
||||
minetest.register_node("mcl_mushrooms:"..color.."_mushroom_block_stem_full", stem_full)
|
||||
|
||||
-- Stem
|
||||
|
@ -60,6 +61,7 @@ local function register_mushroom(color, species_id, template, d_cap, d_stem, d_s
|
|||
stem.tiles = { "mcl_mushrooms_mushroom_block_inside.png", "mcl_mushrooms_mushroom_block_inside.png", "mcl_mushrooms_mushroom_block_skin_stem.png" }
|
||||
stem.groups.huge_mushroom = species_id
|
||||
stem.groups.huge_mushroom_stem = 1
|
||||
stem.groups.compostability=65
|
||||
minetest.register_node("mcl_mushrooms:"..color.."_mushroom_block_stem", stem)
|
||||
|
||||
-- Mushroom block (cap)
|
||||
|
|
|
@ -38,7 +38,7 @@ minetest.register_node("mcl_mushrooms:mushroom_brown", {
|
|||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1},
|
||||
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1, compostability=65},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
light_source = 1,
|
||||
selection_box = {
|
||||
|
@ -62,7 +62,7 @@ minetest.register_node("mcl_mushrooms:mushroom_red", {
|
|||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1},
|
||||
groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1, compostability=65},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
|
|
|
@ -202,7 +202,7 @@ minetest.register_node("mcl_nether:nether_wart_block", {
|
|||
stack_max = 64,
|
||||
tiles = {"mcl_nether_nether_wart_block.png"},
|
||||
is_ground_content = false,
|
||||
groups = {handy=1, hoey=1, building_block=1},
|
||||
groups = {handy=1, hoey=1, building_block=1, compostability=85},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(
|
||||
{
|
||||
footstep={name="default_dirt_footstep", gain=0.7},
|
||||
|
|
|
@ -150,7 +150,7 @@ minetest.register_craftitem("mcl_nether:nether_wart_item", {
|
|||
end
|
||||
end
|
||||
end,
|
||||
groups = { craftitem = 1, brewitem=1 },
|
||||
groups = { craftitem = 1, brewitem=1, compostability=30 },
|
||||
})
|
||||
|
||||
local names = {"mcl_nether:nether_wart_0", "mcl_nether:nether_wart_1", "mcl_nether:nether_wart_2"}
|
||||
|
|
|
@ -741,7 +741,7 @@ minetest.register_craftitem("mcl_ocean:kelp", {
|
|||
inventory_image = "mcl_ocean_kelp_item.png",
|
||||
wield_image = "mcl_ocean_kelp_item.png",
|
||||
on_place = kelp.kelp_on_place,
|
||||
groups = { deco_block = 1 },
|
||||
groups = { deco_block = 1, compostability=30 },
|
||||
})
|
||||
|
||||
if mod_doc then
|
||||
|
@ -756,7 +756,7 @@ minetest.register_craftitem("mcl_ocean:dried_kelp", {
|
|||
_doc_items_longdesc = S("Dried kelp is a food item."),
|
||||
inventory_image = "mcl_ocean_dried_kelp.png",
|
||||
wield_image = "mcl_ocean_dried_kelp.png",
|
||||
groups = { food = 2, eatable = 1 },
|
||||
groups = { food = 2, eatable = 1, compostability=30 },
|
||||
on_place = minetest.item_eat(1),
|
||||
on_secondary_use = minetest.item_eat(1),
|
||||
_mcl_saturation = 0.6,
|
||||
|
@ -773,7 +773,7 @@ minetest.register_node("mcl_ocean:dried_kelp_block", {
|
|||
description = S("Dried Kelp Block"),
|
||||
_doc_items_longdesc = S("A decorative block that serves as a great furnace fuel."),
|
||||
tiles = { "mcl_ocean_dried_kelp_top.png", "mcl_ocean_dried_kelp_bottom.png", "mcl_ocean_dried_kelp_side.png" },
|
||||
groups = { handy = 1, hoey = 1, building_block = 1, flammable = 2, fire_encouragement = 30, fire_flammability = 60 },
|
||||
groups = { handy = 1, hoey = 1, building_block = 1, flammable = 2, fire_encouragement = 30, fire_flammability = 60, compostability=50 },
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
paramtype2 = "facedir",
|
||||
on_place = mcl_util.rotate_axis,
|
||||
|
|
|
@ -106,7 +106,7 @@ for s=1,4 do
|
|||
},
|
||||
inventory_image = img,
|
||||
wield_image = img,
|
||||
groups = { dig_immediate = 3, deco_block = 1, sea_pickle=1, not_in_creative_inventory=nici },
|
||||
groups = { dig_immediate = 3, deco_block = 1, sea_pickle=1, not_in_creative_inventory=nici, compostability=65 },
|
||||
-- Light level: 6 at size 1, +3 for each additional stage
|
||||
light_source = math.min(6 + (s-1)*3, minetest.LIGHT_MAX),
|
||||
selection_box = {
|
||||
|
|
|
@ -85,7 +85,7 @@ minetest.register_craftitem("mcl_ocean:seagrass", {
|
|||
inventory_image = "mcl_ocean_seagrass.png^[verticalframe:12:0",
|
||||
wield_image = "mcl_ocean_seagrass.png^[verticalframe:12:0",
|
||||
on_place = seagrass_on_place,
|
||||
groups = { deco_block = 1 },
|
||||
groups = { deco_block = 1, compostability=30 },
|
||||
})
|
||||
|
||||
-- Seagrass nodes: seagrass on a surface node
|
||||
|
|
|
@ -22,6 +22,10 @@ local OCEAN_MIN = -15
|
|||
local DEEP_OCEAN_MAX = OCEAN_MIN - 1
|
||||
local DEEP_OCEAN_MIN = -31
|
||||
|
||||
local minetest_get_perlin = minetest.get_perlin
|
||||
local math_floor = math.floor
|
||||
local math_abs = math.abs
|
||||
|
||||
--[[ Special biome field: _mcl_biome_type:
|
||||
Rough categorization of biomes: One of "snowy", "cold", "medium" and "hot"
|
||||
Based off <https://minecraft.gamepedia.com/Biomes> ]]
|
||||
|
@ -3922,6 +3926,16 @@ local function register_decorations()
|
|||
end
|
||||
|
||||
-- Decorations in non-Overworld dimensions
|
||||
|
||||
local chorus_noise_params = {
|
||||
offset = -0.012,
|
||||
scale = 0.024,
|
||||
spread = {x = 100, y = 100, z = 100},
|
||||
seed = 257,
|
||||
octaves = 3,
|
||||
persistence = 0.6,
|
||||
}
|
||||
|
||||
local function register_dimension_decorations()
|
||||
--[[ NETHER ]]
|
||||
-- TODO: Nether
|
||||
|
@ -3935,14 +3949,7 @@ local function register_dimension_decorations()
|
|||
place_on = {"mcl_end:end_stone", "air"},
|
||||
flags = "all_floors",
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = -0.012,
|
||||
scale = 0.024,
|
||||
spread = {x = 100, y = 100, z = 100},
|
||||
seed = 257,
|
||||
octaves = 3,
|
||||
persist = 0.6
|
||||
},
|
||||
noise_params = chorus_noise_params,
|
||||
y_min = mcl_mapgen.end_.min,
|
||||
y_max = mcl_mapgen.end_.max,
|
||||
decoration = "mcl_end:chorus_flower",
|
||||
|
@ -3962,6 +3969,8 @@ end
|
|||
-- Detect mapgen to select functions
|
||||
--
|
||||
|
||||
local chorus_perlin_noise
|
||||
|
||||
if not mcl_mapgen.singlenode then
|
||||
if not superflat then
|
||||
if not mcl_mapgen.v6 then
|
||||
|
@ -3994,8 +4003,10 @@ if not mcl_mapgen.singlenode then
|
|||
vm_context.gennotify = vm_context.gennotify or minetest.get_mapgen_object("gennotify")
|
||||
local gennotify = vm_context.gennotify
|
||||
for _, pos in pairs(gennotify["decoration#"..deco_id_chorus_plant] or {}) do
|
||||
chorus_perlin_noise = chorus_perlin_noise or minetest_get_perlin(chorus_noise_params)
|
||||
local realpos = { x = pos.x, y = pos.y + 1, z = pos.z }
|
||||
local pr = PseudoRandom(vm_context.blockseed)
|
||||
local noise = chorus_perlin_noise:get_3d(realpos)
|
||||
local pr = PseudoRandom(math_floor(math_abs(noise * 32767)) % 32768)
|
||||
minetest.after(1, mcl_end.grow_chorus_plant, realpos, false, pr)
|
||||
end
|
||||
return vm_context
|
||||
|
@ -4003,4 +4014,3 @@ if not mcl_mapgen.singlenode then
|
|||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -3,13 +3,41 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
|||
local orig_func = minetest.registered_chatcommands["spawnentity"].func
|
||||
local cmd = table.copy(minetest.registered_chatcommands["spawnentity"])
|
||||
cmd.func = function(name, param)
|
||||
local ent = minetest.registered_entities[param]
|
||||
if minetest.settings:get_bool("only_peaceful_mobs", false) and ent and ent._cmi_is_mob and ent.type == "monster" then
|
||||
return false, S("Only peaceful mobs allowed!")
|
||||
else
|
||||
local bool, msg = orig_func(name, param)
|
||||
return bool, msg
|
||||
local params = param:split(" ")
|
||||
if not params[1] or params[3] then
|
||||
return false, S("Usage: /spawnentity <EntityName> [<X>,<Y>,<Z>]")
|
||||
end
|
||||
local entity_name = params[1]
|
||||
local pos = params[2]
|
||||
local entity_def = minetest.registered_entities[entity_name]
|
||||
if not entity_def then
|
||||
entity_name = "mobs_mc:" .. entity_name
|
||||
entity_def = minetest.registered_entities[entity_name]
|
||||
if not entity_def then
|
||||
return false, S("Error: Unknown entity name")
|
||||
end
|
||||
end
|
||||
if entity_def._cmi_is_mob then
|
||||
if minetest.settings:get_bool("only_peaceful_mobs", false) and entity_def.type == "monster" then
|
||||
return false, S("Only peaceful mobs allowed!")
|
||||
end
|
||||
mobs.spawn_mob(
|
||||
entity_name,
|
||||
pos
|
||||
and minetest.string_to_pos(pos)
|
||||
or vector.add(
|
||||
minetest.get_player_by_name(name):get_pos(),
|
||||
{
|
||||
x = math.random()-0.5,
|
||||
y = math.random(),
|
||||
z = math.random()-0.5
|
||||
}
|
||||
)
|
||||
)
|
||||
return true, S("Mob @1 spawned", entity_name)
|
||||
end
|
||||
local bool, msg = orig_func(name, param)
|
||||
return bool, msg
|
||||
end
|
||||
minetest.unregister_chatcommand("spawnentity")
|
||||
minetest.register_chatcommand("summon", cmd)
|
|
@ -0,0 +1,112 @@
|
|||
local ban_spammers = true
|
||||
local kick_spammers = true
|
||||
local revoke_shout_for_spammers = true
|
||||
local limit_messages = 10
|
||||
local limit_message_length = 200
|
||||
local block_special_chars = true
|
||||
local enable_antispam = ban_spammers or kick_spammers or revoke_shout_for_spammers
|
||||
|
||||
local function update_settings()
|
||||
ban_spammers = minetest.settings:get_bool("ban_spammers", true)
|
||||
kick_spammers = minetest.settings:get_bool("kick_spammers", true)
|
||||
revoke_shout_for_spammers = minetest.settings:get_bool("revoke_shout_for_spammers", true)
|
||||
limit_messages = tonumber(minetest.settings:get("limit_messages") or 10)
|
||||
limit_message_length = tonumber(minetest.settings:get("limit_message_length") or 200)
|
||||
block_special_chars = minetest.settings:get_bool("block_special_chars", true)
|
||||
enable_antispam = ban_spammers or kick_spammers or revoke_shout_for_spammers
|
||||
minetest.after(7, update_settings)
|
||||
end
|
||||
update_settings()
|
||||
|
||||
local last_messages = {}
|
||||
local exceeders = {}
|
||||
local special_users = {}
|
||||
|
||||
local function ban(name)
|
||||
if revoke_shout_for_spammers then
|
||||
local privs = minetest.get_player_privs(name)
|
||||
if privs then
|
||||
privs.shout = nil
|
||||
minetest.set_player_privs(name, privs)
|
||||
end
|
||||
end
|
||||
if ban_spammers then
|
||||
minetest.ban_player(name)
|
||||
elseif kick_spammers then
|
||||
minetest.kick_player(name)
|
||||
end
|
||||
end
|
||||
|
||||
local last_char = string.char(127)
|
||||
|
||||
local function on_chat_message(name, message)
|
||||
if not enable_antispam then return end
|
||||
local length = message:len()
|
||||
if last_messages.job then
|
||||
last_messages.job:cancel()
|
||||
last_messages.job = nil
|
||||
end
|
||||
if last_messages.name and last_messages.name == name then
|
||||
last_messages.count = last_messages.count + 1
|
||||
last_messages.summary_length = last_messages.summary_length + length
|
||||
if last_messages.count >= limit_messages then
|
||||
ban(name)
|
||||
end
|
||||
else
|
||||
last_messages.name = name
|
||||
last_messages.count = 1
|
||||
last_messages.summary_length = length
|
||||
end
|
||||
last_messages.job = minetest.after(300, function()
|
||||
last_messages.name = nil
|
||||
last_messages.job = nil
|
||||
end)
|
||||
if limit_message_length > 0 and message:len() > limit_message_length then
|
||||
if exceeders[name] then
|
||||
exceeders[name] = exceeders[name] + 1
|
||||
if exceeders[name] > limit_messages then
|
||||
ban(name)
|
||||
end
|
||||
else
|
||||
exceeders[name] = 1
|
||||
end
|
||||
message = message:sub(1, limit_message_length) .. ">8 >8 >8"
|
||||
minetest.chat_send_all("<" .. name .. "> " .. message)
|
||||
return true
|
||||
else
|
||||
if exceeders[name] then
|
||||
exceeders[name] = nil
|
||||
end
|
||||
end
|
||||
if block_special_chars then
|
||||
local sc = false
|
||||
local msg = ""
|
||||
for i = 1, #message do
|
||||
local c = message:sub(i,i)
|
||||
if c >= " " and c <= last_char then
|
||||
msg = msg .. c
|
||||
else
|
||||
sc = true
|
||||
end
|
||||
end
|
||||
if sc then
|
||||
if special_users[name] then
|
||||
special_users[name] = special_users[name] + 1
|
||||
if special_users[name] > limit_messages then
|
||||
ban(name)
|
||||
end
|
||||
else
|
||||
special_users[name] = 1
|
||||
end
|
||||
message = msg
|
||||
minetest.chat_send_all("<" .. name .. "> " .. message)
|
||||
return true
|
||||
else
|
||||
if special_users[name] then
|
||||
special_users[name] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_chat_message(on_chat_message)
|
|
@ -0,0 +1,2 @@
|
|||
name = mcl_antispam
|
||||
author = kay27
|
|
@ -165,6 +165,20 @@ kick_cheaters (Kick Cheaters) bool false
|
|||
# Cheat kicking threshold
|
||||
kick_threshold (Cheat Kicking Threshold) int 10
|
||||
|
||||
[Antispam]
|
||||
# Maximum player messages in a sequence
|
||||
limit_messages (Maximum player messages in a sequence) int 10
|
||||
# Maximum message length
|
||||
limit_message_length (Maximum message length) int 200
|
||||
# Block special characters
|
||||
block_special_chars (Block special characters) bool true
|
||||
# Ban spammers
|
||||
ban_spammers (Ban spammers) bool true
|
||||
# Kick spammers
|
||||
kick_spammers (Kick spammers) bool true
|
||||
# Revoke shout priv for spammers
|
||||
revoke_shout_for_spammers (Revoke shout priv for spammers) bool true
|
||||
|
||||
[Debugging]
|
||||
# If enabled, this will show the itemstring of an item in the description.
|
||||
mcl_item_id_debug (Item ID Debug) bool false
|
||||
|
|
Loading…
Reference in New Issue