forked from VoxeLibre/VoxeLibre
Compare commits
21 Commits
master
...
api-cauldr
Author | SHA1 | Date |
---|---|---|
AFCMS | c35c8a1713 | |
AFCMS | 64b49ba719 | |
AFCMS | d00490c86f | |
AFCMS | 8c91d23eb8 | |
AFCMS | 294cb3eb7d | |
AFCMS | cf4d57e584 | |
AFCMS | 890b95bb49 | |
AFCMS | 8611d27f1d | |
AFCMS | 59892abf6d | |
AFCMS | e69365f44d | |
AFCMS | aa0c7bd2cf | |
AFCMS | 2b73c16c69 | |
AFCMS | 36f479b2ec | |
AFCMS | 717a18ef16 | |
AFCMS | 9b0c87dabc | |
AFCMS | 3c83898095 | |
AFCMS | 6ebae965f6 | |
AFCMS | 5e5b3ebf75 | |
AFCMS | e68736a040 | |
AFCMS | 72149a2c56 | |
AFCMS | 182e825303 |
|
@ -6,7 +6,7 @@ block has a hardness and the actual Minecraft digging time is determined by
|
|||
this:
|
||||
|
||||
1) The block's hardness
|
||||
2) The tool being used (the tool speed and its efficiency level)
|
||||
2) The tool being used (the tool_multiplier and its efficiency level)
|
||||
3) Whether the tool is considered as "eligible" for the block
|
||||
(e.g. only diamond pick eligible for obsidian)
|
||||
|
||||
|
@ -43,13 +43,13 @@ this field is a table which defines which groups the tool can dig and how
|
|||
efficiently.
|
||||
|
||||
_mcl_diggroups = {
|
||||
handy = { speed = 1, level = 1, uses = 0 },
|
||||
pickaxey = { speed = 1, level = 0, uses = 0 },
|
||||
handy = { tool_multiplier = 1, level = 1, uses = 0 },
|
||||
pickaxey = { tool_multiplier = 1, level = 0, uses = 0 },
|
||||
}
|
||||
|
||||
The "uses" field indicate how many uses (0 for infinite) a tool has when used on
|
||||
the specified digging group. The "speed" field is a multiplier to the dig speed
|
||||
on that digging group.
|
||||
the specified digging group. The "tool_multiplier" field is a multiplier to the
|
||||
dig speed on that digging group.
|
||||
|
||||
The "level" field indicates which levels of the group the tool can harvest. A
|
||||
level of 0 means that the tool cannot harvest blocks of that node. A level of 1
|
||||
|
@ -69,8 +69,6 @@ This also means that it is very important that no mod adds _mcl_autogroup as a
|
|||
dependency.
|
||||
--]]
|
||||
|
||||
assert(minetest.get_modpath("mcl_autogroup"), "This mod requires the mod mcl_autogroup to function")
|
||||
|
||||
-- Returns a table containing the unique "_mcl_hardness" for nodes belonging to
|
||||
-- each diggroup.
|
||||
local function get_hardness_values_for_groups()
|
||||
|
@ -137,18 +135,19 @@ end
|
|||
-- Parameters:
|
||||
-- group - the group which it is digging
|
||||
-- can_harvest - if the tool can harvest the block
|
||||
-- speed - dig speed multiplier for tool (default 1)
|
||||
-- tool_multiplier - dig speed multiplier for tool (default 1)
|
||||
-- efficiency - efficiency level for the tool if applicable
|
||||
local function get_digtimes(group, can_harvest, speed, efficiency)
|
||||
local speed = speed or 1
|
||||
local function get_digtimes(group, can_harvest, tool_multiplier, efficiency)
|
||||
tool_multiplier = tool_multiplier or 1
|
||||
local speed_multiplier = tool_multiplier
|
||||
if efficiency then
|
||||
speed = speed + efficiency * efficiency + 1
|
||||
speed_multiplier = speed_multiplier + efficiency * efficiency + 1
|
||||
end
|
||||
|
||||
local digtimes = {}
|
||||
|
||||
for index, hardness in pairs(hardness_values[group]) do
|
||||
local digtime = (hardness or 0) / speed
|
||||
local digtime = (hardness or 0) / speed_multiplier
|
||||
if can_harvest then
|
||||
digtime = digtime * 1.5
|
||||
else
|
||||
|
@ -179,7 +178,7 @@ end
|
|||
-- tool.
|
||||
local function add_groupcaps(toolname, groupcaps, groupcaps_def, efficiency)
|
||||
for g, capsdef in pairs(groupcaps_def) do
|
||||
local mult = capsdef.speed or 1
|
||||
local mult = capsdef.tool_multiplier or 1
|
||||
local uses = capsdef.uses
|
||||
local def = mcl_autogroup.registered_diggroups[g]
|
||||
local max_level = def.levels and #def.levels or 1
|
||||
|
@ -210,7 +209,7 @@ function mcl_autogroup.can_harvest(nodename, toolname)
|
|||
|
||||
-- Check if it can be dug by tool
|
||||
local tdef = minetest.registered_tools[toolname]
|
||||
if tdef and tdef._mcl_diggroups then
|
||||
if tdef then
|
||||
for g, gdef in pairs(tdef._mcl_diggroups) do
|
||||
if ndef.groups[g] then
|
||||
if ndef.groups[g] <= gdef.level then
|
||||
|
|
|
@ -12,8 +12,6 @@ as possible. Minetest loads mods in reverse alphabetical order.
|
|||
mcl_autogroup = {}
|
||||
mcl_autogroup.registered_diggroups = {}
|
||||
|
||||
assert(minetest.get_modpath("_mcl_autogroup"), "This mod requires the mod _mcl_autogroup to function")
|
||||
|
||||
-- Register a group as a digging group.
|
||||
--
|
||||
-- Parameters:
|
||||
|
|
|
@ -33,26 +33,25 @@ mcl_vars.MAP_BLOCKSIZE = math.max(1, core.MAP_BLOCKSIZE or 16)
|
|||
mcl_vars.mapgen_limit = math.max(1, tonumber(minetest.get_mapgen_setting("mapgen_limit")) or 31000)
|
||||
mcl_vars.MAX_MAP_GENERATION_LIMIT = math.max(1, core.MAX_MAP_GENERATION_LIMIT or 31000)
|
||||
local central_chunk_offset = -math.floor(mcl_vars.chunksize / 2)
|
||||
mcl_vars.central_chunk_offset_in_nodes = central_chunk_offset * mcl_vars.MAP_BLOCKSIZE
|
||||
mcl_vars.chunk_size_in_nodes = mcl_vars.chunksize * mcl_vars.MAP_BLOCKSIZE
|
||||
local chunk_size_in_nodes = mcl_vars.chunksize * mcl_vars.MAP_BLOCKSIZE
|
||||
local central_chunk_min_pos = central_chunk_offset * mcl_vars.MAP_BLOCKSIZE
|
||||
local central_chunk_max_pos = central_chunk_min_pos + mcl_vars.chunk_size_in_nodes - 1
|
||||
local central_chunk_max_pos = central_chunk_min_pos + chunk_size_in_nodes - 1
|
||||
local ccfmin = central_chunk_min_pos - mcl_vars.MAP_BLOCKSIZE -- Fullminp/fullmaxp of central chunk, in nodes
|
||||
local ccfmax = central_chunk_max_pos + mcl_vars.MAP_BLOCKSIZE
|
||||
local mapgen_limit_b = math.floor(math.min(mcl_vars.mapgen_limit, mcl_vars.MAX_MAP_GENERATION_LIMIT) / mcl_vars.MAP_BLOCKSIZE)
|
||||
local mapgen_limit_min = -mapgen_limit_b * mcl_vars.MAP_BLOCKSIZE
|
||||
local mapgen_limit_max = (mapgen_limit_b + 1) * mcl_vars.MAP_BLOCKSIZE - 1
|
||||
local numcmin = math.max(math.floor((ccfmin - mapgen_limit_min) / mcl_vars.chunk_size_in_nodes), 0) -- Number of complete chunks from central chunk
|
||||
local numcmax = math.max(math.floor((mapgen_limit_max - ccfmax) / mcl_vars.chunk_size_in_nodes), 0) -- fullminp/fullmaxp to effective mapgen limits.
|
||||
mcl_vars.mapgen_edge_min = central_chunk_min_pos - numcmin * mcl_vars.chunk_size_in_nodes
|
||||
mcl_vars.mapgen_edge_max = central_chunk_max_pos + numcmax * mcl_vars.chunk_size_in_nodes
|
||||
local numcmin = math.max(math.floor((ccfmin - mapgen_limit_min) / chunk_size_in_nodes), 0) -- Number of complete chunks from central chunk
|
||||
local numcmax = math.max(math.floor((mapgen_limit_max - ccfmax) / chunk_size_in_nodes), 0) -- fullminp/fullmaxp to effective mapgen limits.
|
||||
mcl_vars.mapgen_edge_min = central_chunk_min_pos - numcmin * chunk_size_in_nodes
|
||||
mcl_vars.mapgen_edge_max = central_chunk_max_pos + numcmax * chunk_size_in_nodes
|
||||
|
||||
local function coordinate_to_block(x)
|
||||
return math.floor(x / mcl_vars.MAP_BLOCKSIZE)
|
||||
end
|
||||
|
||||
local function coordinate_to_chunk(x)
|
||||
return math.floor((coordinate_to_block(x) - central_chunk_offset) / mcl_vars.chunksize)
|
||||
return math.floor((coordinate_to_block(x) + central_chunk_offset) / mcl_vars.chunksize)
|
||||
end
|
||||
|
||||
function mcl_vars.pos_to_block(pos)
|
||||
|
@ -71,7 +70,7 @@ function mcl_vars.pos_to_chunk(pos)
|
|||
}
|
||||
end
|
||||
|
||||
local k_positive = math.ceil(mcl_vars.MAX_MAP_GENERATION_LIMIT / mcl_vars.chunk_size_in_nodes)
|
||||
local k_positive = math.ceil(mcl_vars.MAX_MAP_GENERATION_LIMIT / chunk_size_in_nodes)
|
||||
local k_positive_z = k_positive * 2
|
||||
local k_positive_y = k_positive_z * k_positive_z
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ mcl_worlds = {}
|
|||
function mcl_worlds.is_in_void(pos)
|
||||
local void =
|
||||
not ((pos.y < mcl_vars.mg_overworld_max and pos.y > mcl_vars.mg_overworld_min) or
|
||||
(pos.y < mcl_vars.mg_nether_max+128 and pos.y > mcl_vars.mg_nether_min) or
|
||||
(pos.y < mcl_vars.mg_nether_max and pos.y > mcl_vars.mg_nether_min) or
|
||||
(pos.y < mcl_vars.mg_end_max and pos.y > mcl_vars.mg_end_min))
|
||||
|
||||
local void_deadly = false
|
||||
|
@ -15,11 +15,11 @@ function mcl_worlds.is_in_void(pos)
|
|||
-- Overworld → Void → End → Void → Nether → Void
|
||||
if pos.y < mcl_vars.mg_overworld_min and pos.y > mcl_vars.mg_end_max then
|
||||
void_deadly = pos.y < mcl_vars.mg_overworld_min - deadly_tolerance
|
||||
elseif pos.y < mcl_vars.mg_end_min and pos.y > mcl_vars.mg_nether_max+128 then
|
||||
elseif pos.y < mcl_vars.mg_end_min and pos.y > mcl_vars.mg_nether_max then
|
||||
-- The void between End and Nether. Like usual, but here, the void
|
||||
-- *above* the Nether also has a small tolerance area, so player
|
||||
-- can fly above the Nether without getting hurt instantly.
|
||||
void_deadly = (pos.y < mcl_vars.mg_end_min - deadly_tolerance) and (pos.y > mcl_vars.mg_nether_max+128 + deadly_tolerance)
|
||||
void_deadly = (pos.y < mcl_vars.mg_end_min - deadly_tolerance) and (pos.y > mcl_vars.mg_nether_max + deadly_tolerance)
|
||||
elseif pos.y < mcl_vars.mg_nether_min then
|
||||
void_deadly = pos.y < mcl_vars.mg_nether_min - deadly_tolerance
|
||||
end
|
||||
|
@ -35,7 +35,7 @@ end
|
|||
function mcl_worlds.y_to_layer(y)
|
||||
if y >= mcl_vars.mg_overworld_min then
|
||||
return y - mcl_vars.mg_overworld_min, "overworld"
|
||||
elseif y >= mcl_vars.mg_nether_min and y <= mcl_vars.mg_nether_max+128 then
|
||||
elseif y >= mcl_vars.mg_nether_min and y <= mcl_vars.mg_nether_max then
|
||||
return y - mcl_vars.mg_nether_min, "nether"
|
||||
elseif y >= mcl_vars.mg_end_min and y <= mcl_vars.mg_end_max then
|
||||
return y - mcl_vars.mg_end_min, "end"
|
||||
|
@ -73,7 +73,7 @@ end
|
|||
-- Takes a position and returns true if this position can have Nether dust
|
||||
function mcl_worlds.has_dust(pos)
|
||||
-- Weather in the Overworld and the high part of the void below
|
||||
return pos.y <= mcl_vars.mg_nether_max + 138 and pos.y >= mcl_vars.mg_nether_min - 10
|
||||
return pos.y <= mcl_vars.mg_nether_max + 64 and pos.y >= mcl_vars.mg_nether_min - 64
|
||||
end
|
||||
|
||||
-- Takes a position (pos) and returns true if compasses are working here
|
||||
|
|
|
@ -165,6 +165,10 @@ minetest.register_globalstep(function(dtime)
|
|||
end
|
||||
end)
|
||||
|
||||
local minigroups = { "shearsy", "swordy", "shearsy_wool", "swordy_cobweb" }
|
||||
local basegroups = { "pickaxey", "axey", "shovely" }
|
||||
local materials = { "wood", "gold", "stone", "iron", "diamond" }
|
||||
|
||||
-- Stupid workaround to get drops from a drop table:
|
||||
-- Create a temporary table in minetest.registered_nodes that contains the proper drops,
|
||||
-- because unfortunately minetest.get_node_drops needs the drop table to be inside a registered node definition
|
||||
|
|
|
@ -2826,7 +2826,7 @@ local falling = function(self, pos)
|
|||
end
|
||||
|
||||
if mcl_portals ~= nil then
|
||||
if mcl_portals.nether_portal_cooloff(self.object) then
|
||||
if mcl_portals.nether_portal_cooloff[self.object] then
|
||||
return false -- mob has teleported through Nether portal - it's 99% not falling
|
||||
end
|
||||
end
|
||||
|
@ -2856,18 +2856,6 @@ local falling = function(self, pos)
|
|||
self.object:set_acceleration({x = 0, y = 0, z = 0})
|
||||
end
|
||||
|
||||
if minetest.registered_nodes[node_ok(pos).name].groups.lava then
|
||||
|
||||
if self.floats_on_lava == 1 then
|
||||
|
||||
self.object:set_acceleration({
|
||||
x = 0,
|
||||
y = -self.fall_speed / (max(1, v.y) ^ 2),
|
||||
z = 0
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-- in water then float up
|
||||
if minetest.registered_nodes[node_ok(pos).name].groups.water then
|
||||
|
||||
|
@ -3785,7 +3773,6 @@ minetest.register_entity(name, {
|
|||
knock_back = def.knock_back ~= false,
|
||||
shoot_offset = def.shoot_offset or 0,
|
||||
floats = def.floats or 1, -- floats in water by default
|
||||
floats_on_lava = def.floats_on_lava or 0,
|
||||
replace_rate = def.replace_rate,
|
||||
replace_what = def.replace_what,
|
||||
replace_with = def.replace_with,
|
||||
|
|
|
@ -38,7 +38,6 @@ mcl_weather.reg_weathers["none"] = {
|
|||
local storage = minetest.get_mod_storage()
|
||||
-- Save weather into mod storage, so it can be loaded after restarting the server
|
||||
local save_weather = function()
|
||||
if not mcl_weather.end_time then return end
|
||||
storage:set_string("mcl_weather_state", mcl_weather.state)
|
||||
storage:set_int("mcl_weather_end_time", mcl_weather.end_time)
|
||||
minetest.log("verbose", "[mcl_weather] Weather data saved: state="..mcl_weather.state.." end_time="..mcl_weather.end_time)
|
||||
|
|
|
@ -16,17 +16,23 @@ local dir_to_pitch = function(dir)
|
|||
end
|
||||
|
||||
local random_arrow_positions = function(positions, placement)
|
||||
local min = 0
|
||||
local max = 0
|
||||
if positions == 'x' then
|
||||
return math.random(-4, 4)
|
||||
min = -4
|
||||
max = 4
|
||||
elseif positions == 'y' then
|
||||
return math.random(0, 10)
|
||||
min = 0
|
||||
max = 10
|
||||
end
|
||||
if placement == 'front' and positions == 'z' then
|
||||
return 3
|
||||
min = 3
|
||||
max = 3
|
||||
elseif placement == 'back' and positions == 'z' then
|
||||
return -3
|
||||
min = -3
|
||||
max = -3
|
||||
end
|
||||
return 0
|
||||
return math.random(max, min)
|
||||
end
|
||||
|
||||
local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements")
|
||||
|
@ -298,8 +304,8 @@ ARROW_ENTITY.on_step = function(self, dtime)
|
|||
else
|
||||
self._attach_parent = 'Body'
|
||||
end
|
||||
self._z_rotation = math.random(-30, 30)
|
||||
self._y_rotation = math.random( -30, 30)
|
||||
self._z_rotation = math.random(30, -30)
|
||||
self._y_rotation = math.random(30, -30)
|
||||
self.object:set_attach(obj, self._attach_parent, {x=self._x_position,y=self._y_position,z=random_arrow_positions('z', placement)}, {x=0,y=self._rotation_station + self._y_rotation,z=self._z_rotation})
|
||||
minetest.after(150, function()
|
||||
self.object:remove()
|
||||
|
|
|
@ -209,47 +209,22 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", {
|
|||
new_bucket = ItemStack({name = liquiddef.itemname})
|
||||
end
|
||||
|
||||
minetest.add_node(pointed_thing.under, {name="air"})
|
||||
minetest.set_node(pointed_thing.under, {name="air"})
|
||||
sound_take(nn, pointed_thing.under)
|
||||
|
||||
if mod_doc and doc.entry_exists("nodes", nn) then
|
||||
doc.mark_entry_as_revealed(user:get_player_name(), "nodes", nn)
|
||||
end
|
||||
|
||||
elseif nn == "mcl_cauldrons:cauldron_3" then
|
||||
-- Take water out of full cauldron
|
||||
minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"})
|
||||
if not minetest.is_creative_enabled(user:get_player_name()) then
|
||||
new_bucket = ItemStack("mcl_buckets:bucket_water")
|
||||
end
|
||||
sound_take("mcl_core:water_source", pointed_thing.under)
|
||||
elseif nn == "mcl_cauldrons:cauldron_3r" then
|
||||
-- Take river water out of full cauldron
|
||||
minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"})
|
||||
if not minetest.is_creative_enabled(user:get_player_name()) then
|
||||
new_bucket = ItemStack("mcl_buckets:bucket_river_water")
|
||||
end
|
||||
sound_take("mclx_core:river_water_source", pointed_thing.under)
|
||||
elseif minetest.get_item_group(nn, "cauldron") then
|
||||
new_bucket = mcl_cauldrons.take_cauldron(pointed_thing.under, new_bucket, user)
|
||||
end
|
||||
|
||||
-- Add liquid bucket and put it into inventory, if possible.
|
||||
-- Drop new bucket otherwise.
|
||||
if new_bucket then
|
||||
if itemstack:get_count() == 1 then
|
||||
return new_bucket
|
||||
else
|
||||
local inv = user:get_inventory()
|
||||
if inv:room_for_item("main", new_bucket) then
|
||||
inv:add_item("main", new_bucket)
|
||||
else
|
||||
minetest.add_item(user:get_pos(), new_bucket)
|
||||
end
|
||||
if not minetest.is_creative_enabled(user:get_player_name()) then
|
||||
if minetest.is_creative_enabled(user:get_player_name()) then --TODO
|
||||
itemstack:take_item()
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
end,
|
||||
_on_dispense = function(stack, pos, droppos, dropnode, dropdir)
|
||||
-- Fill empty bucket with liquid or drop bucket if no liquid
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
name = mcl_buckets
|
||||
author = Kahrl
|
||||
description =
|
||||
depends = mcl_worlds
|
||||
depends = mcl_worlds, mcl_cauldrons
|
||||
optional_depends = mcl_core, mclx_core, doc
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ if mod_mcl_core then
|
|||
if minetest.get_item_group(nn, "cauldron") ~= 0 then
|
||||
-- Put water into cauldron
|
||||
if nn ~= "mcl_cauldrons:cauldron_3" then
|
||||
minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3"})
|
||||
mcl_cauldrons.set_cauldron_level(pos, "water", 3)
|
||||
end
|
||||
sound_place("mcl_core:water_source", pos)
|
||||
return false
|
||||
|
@ -104,7 +104,7 @@ if mod_mclx_core then
|
|||
if minetest.get_item_group(nn, "cauldron") ~= 0 then
|
||||
-- Put water into cauldron
|
||||
if nn ~= "mcl_cauldrons:cauldron_3r" then
|
||||
minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3r"})
|
||||
mcl_cauldrons.set_cauldron(pos, "river_water", 3)
|
||||
end
|
||||
sound_place("mcl_core:water_source", pos)
|
||||
return false
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
# mcl_cauldrons
|
||||
|
||||
This mod add an API to add cauldrons to mcl.
|
||||
|
||||
## mcl_cauldrons.is_cauldron(name)
|
||||
return true if name is cauldron, false overwise.
|
||||
|
||||
## mcl_cauldrons.take_cauldron(pos, itemstack, user, sounds)
|
||||
empty cauldron at `pos`
|
||||
return `bucket` field of the cauldron def if user is player, itemstack overwise.
|
||||
* pos: position of the cauldron
|
||||
* itemstack: will be return if `bucket` field isn't defined in cauldron def or user is nil or not player.
|
||||
* user: player who takes cauldron
|
||||
* sounds: sounds table. If not nil, dug sound will be played.
|
||||
|
||||
## mcl_cauldrons.register_cauldron_type(def)
|
||||
def can have these fields:
|
||||
* name: name of the liquid e.g: "water"
|
||||
* bucket: string of the bucket item. can be nil. e.g: "mcl_buckets:bucket_water"
|
||||
* desc: description of the item. %s will be replaced by the level. e.g: "Water Cauldron %s/3 full"
|
||||
* texture: texture of the flowing liquid e.g: "mcl_core_water_flowing.png"
|
||||
|
||||
## mcl_cauldrons.registered_cauldrons
|
||||
Table containing chauldrons def indexed by name.
|
|
@ -1,8 +1,31 @@
|
|||
local S = minetest.get_translator("mcl_cauldron")
|
||||
|
||||
mcl_cauldrons = {}
|
||||
-- Cauldron mod, adds cauldrons.
|
||||
|
||||
-- TODO: Extinguish fire of burning entities
|
||||
local function give_item(user, itemstack)
|
||||
local inv = user:get_inventory()
|
||||
if inv then
|
||||
--[[if false then --minetest.is_creative_enabled(user:get_player_name()) then
|
||||
if inv:contains_item("main", itemstack) then
|
||||
return false
|
||||
else
|
||||
if inv:room_for_item("main", itemstack) then
|
||||
inv:add_item("main", itemstack)
|
||||
else
|
||||
minetest.add_item(user:get_pos(), itemstack)
|
||||
end
|
||||
end
|
||||
else]]
|
||||
if inv:room_for_item("main", itemstack) then
|
||||
inv:add_item("main", itemstack)
|
||||
else
|
||||
minetest.add_item(user:get_pos(), itemstack)
|
||||
end
|
||||
--end
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
-- Convenience function because the cauldron nodeboxes are very similar
|
||||
local create_cauldron_nodebox = function(water_level)
|
||||
|
@ -41,7 +64,8 @@ for w=0,3 do
|
|||
cauldron_nodeboxes[w] = create_cauldron_nodebox(w)
|
||||
end
|
||||
|
||||
|
||||
mcl_cauldrons.registered_cauldrons = {}
|
||||
--local cauldrons_list = {}
|
||||
-- Empty cauldron
|
||||
minetest.register_node("mcl_cauldrons:cauldron", {
|
||||
description = S("Cauldron"),
|
||||
|
@ -67,18 +91,105 @@ minetest.register_node("mcl_cauldrons:cauldron", {
|
|||
_mcl_blast_resistance = 2,
|
||||
})
|
||||
|
||||
-- Template function for cauldrons with water
|
||||
local register_filled_cauldron = function(water_level, description, river_water)
|
||||
local id = "mcl_cauldrons:cauldron_"..water_level
|
||||
local water_tex
|
||||
if river_water then
|
||||
id = id .. "r"
|
||||
water_tex = "default_river_water_source_animated.png^[verticalframe:16:0"
|
||||
else
|
||||
water_tex = "default_water_source_animated.png^[verticalframe:16:0"
|
||||
function mcl_cauldrons.set_cauldron_level(pos, type, level)
|
||||
return minetest.set_node(pos, {name = mcl_cauldrons.get_cauldron_string(type, level)})
|
||||
end
|
||||
|
||||
function mcl_cauldrons.get_cauldron_level(pos)
|
||||
local nn = minetest.get_node(pos)
|
||||
return minetest.get_item_group(nn.name, "cauldron")
|
||||
end
|
||||
|
||||
function mcl_cauldrons.add_cauldron_level(pos, type, number)
|
||||
local number = mcl_cauldrons.get_cauldron_level(pos) + number
|
||||
if number > 4 then number = 4 end
|
||||
if number < 1 then number = 1 end
|
||||
mcl_cauldrons.set_cauldron_level(pos, type, number)
|
||||
return number
|
||||
end
|
||||
|
||||
function mcl_cauldrons.is_cauldron(name)
|
||||
return minetest.get_item_group(name, "cauldron") ~= 0
|
||||
end
|
||||
|
||||
function mcl_cauldrons.take_cauldron(pos, itemstack, user, sounds)
|
||||
local nn = minetest.get_node(pos)
|
||||
if mcl_cauldrons.registered_cauldrons[nn.name] and mcl_cauldrons.registered_cauldrons[nn.name].bucket then
|
||||
if user and not minetest.is_creative_enabled(user:get_player_name()) then
|
||||
minetest.set_node(pos, {name="mcl_cauldrons:cauldron"})
|
||||
if sounds then minetest.sound_play(sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end
|
||||
return give_item(user, ItemStack(mcl_cauldrons.registered_cauldrons[nn.name].bucket))
|
||||
else
|
||||
minetest.set_node(pos, {name="mcl_cauldrons:cauldron"})
|
||||
if sounds then minetest.sound_play(sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end
|
||||
return itemstack
|
||||
end
|
||||
else
|
||||
minetest.set_node(pos, {name="mcl_cauldrons:cauldron"})
|
||||
if sounds then minetest.sound_play(sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
|
||||
function mcl_cauldrons.take_small_cauldron(pos, itemstack, user, sounds)
|
||||
local nn = minetest.get_node(pos)
|
||||
if mcl_cauldrons.registered_cauldrons[nn.name] and mcl_cauldrons.registered_cauldrons[nn.name].bottle then
|
||||
if user and not minetest.is_creative_enabled(user:get_player_name()) then
|
||||
local number = mcl_cauldrons.add_cauldron_level(pos, mcl_cauldrons.registered_cauldrons[nn.name].name, -1)
|
||||
if number ~= 0 then
|
||||
if sounds then minetest.sound_play(sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end
|
||||
local item_name = mcl_cauldrons.registered_cauldrons[nn.name].bottle
|
||||
local inv = placer:get_inventory()
|
||||
minetest.sound_play("mcl_potions_bottle_fill", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true)
|
||||
if minetest.is_creative_enabled(placer:get_player_name()) then
|
||||
-- Don't replace empty bottle in creative for convenience reasons
|
||||
if not inv:contains_item("main", item_name) then
|
||||
inv:add_item("main", item_name)
|
||||
end
|
||||
elseif itemstack:get_count() == 1 then
|
||||
return item_name
|
||||
else
|
||||
if inv:room_for_item("main", item_name) then
|
||||
inv:add_item("main", item_name)
|
||||
else
|
||||
minetest.add_item(placer:get_pos(), item_name)
|
||||
end
|
||||
itemstack:take_item()
|
||||
end
|
||||
end
|
||||
else
|
||||
local number = mcl_cauldrons.add_cauldron_level(pos, mcl_cauldrons.registered_cauldrons[nn.name].name, -1)
|
||||
if number ~= 0 then
|
||||
if sounds then minetest.sound_play(sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
else
|
||||
local number = mcl_cauldrons.add_cauldron_level(pos, mcl_cauldrons.registered_cauldrons[nn.name].name, -1)
|
||||
if number ~= 0 then
|
||||
if sounds then minetest.sound_play(sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
|
||||
function mcl_cauldrons.get_cauldron_string(type, level)
|
||||
if mcl_cauldrons.registered_cauldrons["mcl_cauldrons:cauldron_"..type.."_"..level] then
|
||||
return "mcl_cauldrons:cauldron_"..type.."_"..level
|
||||
elseif level == 0 then
|
||||
return "mcl_cauldrons:cauldron"
|
||||
else
|
||||
minetest.log("warning", "[mcl_cauldrons] trying to get string from invalid cauldron params")
|
||||
return "air"
|
||||
end
|
||||
end
|
||||
|
||||
function mcl_cauldrons.register_cauldron_type(def)
|
||||
for water_level = 1,3 do
|
||||
local id = "mcl_cauldrons:cauldron_"..def.name.."_"..water_level
|
||||
mcl_cauldrons.registered_cauldrons[id] = def
|
||||
minetest.register_node(id, {
|
||||
description = description,
|
||||
description = string.format(def.desc, water_level),
|
||||
_doc_items_create_entry = false,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||
drawtype = "nodebox",
|
||||
|
@ -89,7 +200,7 @@ local register_filled_cauldron = function(water_level, description, river_water)
|
|||
collision_box = cauldron_nodeboxes[0],
|
||||
selection_box = { type = "regular" },
|
||||
tiles = {
|
||||
"("..water_tex..")^mcl_cauldrons_cauldron_top.png",
|
||||
"("..def.texture.."^[verticalframe:16:0"..")^mcl_cauldrons_cauldron_top.png",
|
||||
"mcl_cauldrons_cauldron_inner.png^mcl_cauldrons_cauldron_bottom.png",
|
||||
"mcl_cauldrons_cauldron_side.png"
|
||||
},
|
||||
|
@ -104,16 +215,20 @@ local register_filled_cauldron = function(water_level, description, river_water)
|
|||
doc.add_entry_alias("nodes", "mcl_cauldrons:cauldron", "nodes", id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Filled cauldrons (3 levels)
|
||||
register_filled_cauldron(1, S("Cauldron (1/3 Water)"))
|
||||
register_filled_cauldron(2, S("Cauldron (2/3 Water)"))
|
||||
register_filled_cauldron(3, S("Cauldron (3/3 Water)"))
|
||||
mcl_cauldrons.register_cauldron_type({
|
||||
name = "water",
|
||||
bucket = "mcl_buckets:bucket_water",
|
||||
bottle = "mcl_potions:water",
|
||||
desc = S("Cauldron (%s/3 Water)"),
|
||||
texture = "default_water_source_animated.png"
|
||||
})
|
||||
|
||||
if minetest.get_modpath("mclx_core") then
|
||||
register_filled_cauldron(1, S("Cauldron (1/3 River Water)"), true)
|
||||
register_filled_cauldron(2, S("Cauldron (2/3 River Water)"), true)
|
||||
register_filled_cauldron(3, S("Cauldron (3/3 River Water)"), true)
|
||||
--register_filled_cauldron(1, S("Cauldron (1/3 River Water)"), true)
|
||||
--register_filled_cauldron(2, S("Cauldron (2/3 River Water)"), true)
|
||||
--register_filled_cauldron(3, S("Cauldron (3/3 River Water)"), true)
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -141,3 +256,10 @@ minetest.register_abm({
|
|||
end
|
||||
end
|
||||
})
|
||||
|
||||
for i = 1, 3 do --Backward compatibility
|
||||
minetest.register_alias("mcl_cauldrons:cauldron_"..i, "mcl_cauldrons:cauldron_water_"..i)
|
||||
end
|
||||
for i = 1, 3 do
|
||||
minetest.register_alias("mcl_cauldrons:cauldron_"..i.."r", "mcl_cauldrons:cauldron_river_water_"..i)
|
||||
end
|
|
@ -1,3 +1,4 @@
|
|||
name = mcl_cauldrons
|
||||
description = Add cauldrons to mcl
|
||||
depends = mcl_core, mcl_sounds
|
||||
optional_depends = mclx_core, doc
|
||||
|
|
|
@ -19,7 +19,7 @@ function mcl_cocoas.place(itemstack, placer, pt, plantname)
|
|||
-- Am I right-clicking on something that has a custom on_rightclick set?
|
||||
if placer and not placer:get_player_control().sneak then
|
||||
if minetest.registered_nodes[under.name] and minetest.registered_nodes[under.name].on_rightclick then
|
||||
return minetest.registered_nodes[under.name].on_rightclick(pt.under, under, placer, itemstack) or itemstack
|
||||
return minetest.registered_nodes[under.name].on_rightclick(pointed_thing.under, under, placer, itemstack) or itemstack
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ mcl_autogroup.register_diggroup("shearsy_wool")
|
|||
mcl_autogroup.register_diggroup("shearsy_cobweb")
|
||||
mcl_autogroup.register_diggroup("swordy")
|
||||
mcl_autogroup.register_diggroup("swordy_cobweb")
|
||||
mcl_autogroup.register_diggroup("hoey")
|
||||
mcl_autogroup.register_diggroup("creative_breakable")
|
||||
|
||||
-- Load files
|
||||
local modpath = minetest.get_modpath("mcl_core")
|
||||
|
|
|
@ -108,19 +108,7 @@ local register_leaves = function(subname, description, longdesc, tiles, sapling,
|
|||
tiles = tiles,
|
||||
paramtype = "light",
|
||||
stack_max = 64,
|
||||
groups = {
|
||||
handy=1,
|
||||
hoey=1,
|
||||
shearsy=1,
|
||||
swordy=1,
|
||||
leafdecay=leafdecay_distance,
|
||||
flammable=2,
|
||||
leaves=1,
|
||||
deco_block=1,
|
||||
dig_by_piston=1,
|
||||
fire_encouragement=30,
|
||||
fire_flammability=60
|
||||
},
|
||||
groups = {handy=1,shearsy=1,swordy=1, leafdecay=leafdecay_distance, flammable=2, leaves=1, deco_block=1, dig_by_piston=1, fire_encouragement=30, fire_flammability=60},
|
||||
drop = get_drops(0),
|
||||
_mcl_shears_drop = true,
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
|
|
|
@ -45,10 +45,6 @@ end
|
|||
-- To make it more efficient it will first check a hash value to determine if
|
||||
-- the tool needs to be updated.
|
||||
function mcl_enchanting.update_groupcaps(itemstack)
|
||||
if not itemstack:get_tool_capabilities() then
|
||||
return
|
||||
end
|
||||
|
||||
local name = itemstack:get_name()
|
||||
local level = mcl_enchanting.get_enchantment(itemstack, "efficiency")
|
||||
local groupcaps = get_efficiency_groupcaps(name, level)
|
||||
|
|
|
@ -78,9 +78,6 @@ minetest.register_tool("mcl_farming:hoe_wood", {
|
|||
},
|
||||
_repair_material = "group:wood",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 2, level = 1, uses = 60 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -121,9 +118,6 @@ minetest.register_tool("mcl_farming:hoe_stone", {
|
|||
},
|
||||
_repair_material = "mcl_core:cobble",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 4, level = 3, uses = 132 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -160,9 +154,6 @@ minetest.register_tool("mcl_farming:hoe_iron", {
|
|||
},
|
||||
_repair_material = "mcl_core:iron_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 6, level = 4, uses = 251 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -205,9 +196,6 @@ minetest.register_tool("mcl_farming:hoe_gold", {
|
|||
},
|
||||
_repair_material = "mcl_core:gold_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 12, level = 2, uses = 33 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
@ -252,9 +240,6 @@ minetest.register_tool("mcl_farming:hoe_diamond", {
|
|||
},
|
||||
_repair_material = "mcl_core:diamond",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
hoey = { speed = 8, level = 5, uses = 1562 }
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 303 B After Width: | Height: | Size: 2.7 KiB |
|
@ -146,7 +146,7 @@ minetest.register_node("mcl_farming:hay_block", {
|
|||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
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, 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,
|
||||
|
|
|
@ -161,12 +161,6 @@ local function on_metadata_inventory_take(pos, listname, index, stack, player)
|
|||
end
|
||||
end
|
||||
|
||||
local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
if from_list == "dst" then
|
||||
give_xp(pos, player)
|
||||
end
|
||||
end
|
||||
|
||||
local function spawn_flames(pos, param2)
|
||||
local minrelpos, maxrelpos
|
||||
local dir = minetest.facedir_to_dir(param2)
|
||||
|
@ -483,12 +477,10 @@ minetest.register_node("mcl_furnaces:furnace", {
|
|||
give_xp(pos)
|
||||
end,
|
||||
|
||||
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
on_metadata_inventory_move = function(pos)
|
||||
-- Reset accumulated game time when player works with furnace:
|
||||
furnace_reset_delta_time(pos)
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
|
||||
on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos)
|
||||
-- Reset accumulated game time when player works with furnace:
|
||||
|
@ -502,7 +494,9 @@ minetest.register_node("mcl_furnaces:furnace", {
|
|||
-- start timer function, it will helpful if player clears dst slot
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
|
||||
on_metadata_inventory_take(pos, listname, index, stack, player)
|
||||
if listname == "dst" then
|
||||
give_xp(pos, player)
|
||||
end
|
||||
end,
|
||||
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
|
@ -558,7 +552,6 @@ minetest.register_node("mcl_furnaces:furnace_active", {
|
|||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_move = allow_metadata_inventory_move,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
on_metadata_inventory_move = on_metadata_inventory_move,
|
||||
on_metadata_inventory_take = on_metadata_inventory_take,
|
||||
on_receive_fields = receive_fields,
|
||||
_mcl_blast_resistance = 3.5,
|
||||
|
|
|
@ -176,7 +176,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, building_block=1},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(
|
||||
{
|
||||
footstep={name="default_dirt_footstep", gain=0.7},
|
||||
|
|
|
@ -275,7 +275,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, building_block = 1, flammable = 2, fire_encouragement = 30, fire_flammability = 60 },
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
paramtype2 = "facedir",
|
||||
on_place = mcl_util.rotate_axis,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
name = mcl_portals
|
||||
description = Adds buildable portals to the Nether and End dimensions.
|
||||
depends = mcl_nether, mcl_end, mcl_particles, mcl_spawn
|
||||
depends = mcl_init, mcl_worlds, mcl_core, mcl_nether, mcl_end, mcl_particles, mcl_spawn
|
||||
optional_depends = awards, doc
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -75,61 +75,13 @@ minetest.register_craftitem("mcl_potions:glass_bottle", {
|
|||
from_liquid_source = true
|
||||
river_water = node.name == "mclx_core:river_water_source"
|
||||
-- Or reduce water level of cauldron by 1
|
||||
elseif string.sub(node.name, 1, 14) == "mcl_cauldrons:" then
|
||||
elseif mcl_cauldrons.is_cauldron(node.name) then
|
||||
local pname = placer:get_player_name()
|
||||
if minetest.is_protected(pointed_thing.under, pname) then
|
||||
minetest.record_protection_violation(pointed_thing.under, pname)
|
||||
return itemstack
|
||||
end
|
||||
if node.name == "mcl_cauldrons:cauldron_3" then
|
||||
get_water = true
|
||||
minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron_2"})
|
||||
elseif node.name == "mcl_cauldrons:cauldron_2" then
|
||||
get_water = true
|
||||
minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron_1"})
|
||||
elseif node.name == "mcl_cauldrons:cauldron_1" then
|
||||
get_water = true
|
||||
minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"})
|
||||
elseif node.name == "mcl_cauldrons:cauldron_3r" then
|
||||
get_water = true
|
||||
river_water = true
|
||||
minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron_2r"})
|
||||
elseif node.name == "mcl_cauldrons:cauldron_2r" then
|
||||
get_water = true
|
||||
river_water = true
|
||||
minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron_1r"})
|
||||
elseif node.name == "mcl_cauldrons:cauldron_1r" then
|
||||
get_water = true
|
||||
river_water = true
|
||||
minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"})
|
||||
end
|
||||
end
|
||||
if get_water then
|
||||
local water_bottle
|
||||
if river_water then
|
||||
water_bottle = ItemStack("mcl_potions:river_water")
|
||||
else
|
||||
water_bottle = ItemStack("mcl_potions:water")
|
||||
end
|
||||
-- Replace with water bottle, if possible, otherwise
|
||||
-- place the water potion at a place where's space
|
||||
local inv = placer:get_inventory()
|
||||
minetest.sound_play("mcl_potions_bottle_fill", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true)
|
||||
if minetest.is_creative_enabled(placer:get_player_name()) then
|
||||
-- Don't replace empty bottle in creative for convenience reasons
|
||||
if not inv:contains_item("main", water_bottle) then
|
||||
inv:add_item("main", water_bottle)
|
||||
end
|
||||
elseif itemstack:get_count() == 1 then
|
||||
return water_bottle
|
||||
else
|
||||
if inv:room_for_item("main", water_bottle) then
|
||||
inv:add_item("main", water_bottle)
|
||||
else
|
||||
minetest.add_item(placer:get_pos(), water_bottle)
|
||||
end
|
||||
itemstack:take_item()
|
||||
end
|
||||
mcl_cauldrons.take_small_cauldron(pointed_thing.under, itemstack, placer, {dug = "mcl_potions_bottle_fill"})
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
|
@ -154,31 +106,6 @@ local potion_image = function(colorstring, opacity)
|
|||
return "mcl_potions_potion_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_potion_bottle.png"
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- Cauldron fill up rules:
|
||||
-- Adding any water increases the water level by 1, preserving the current water type
|
||||
local cauldron_levels = {
|
||||
-- start = { add water, add river water }
|
||||
{ "", "_1", "_1r" },
|
||||
{ "_1", "_2", "_2" },
|
||||
{ "_2", "_3", "_3" },
|
||||
{ "_1r", "_2r", "_2r" },
|
||||
{ "_2r", "_3r", "_3r" },
|
||||
}
|
||||
local fill_cauldron = function(cauldron, water_type)
|
||||
local base = "mcl_cauldrons:cauldron"
|
||||
for i=1, #cauldron_levels do
|
||||
if cauldron == base .. cauldron_levels[i][1] then
|
||||
if water_type == "mclx_core:river_water_source" then
|
||||
return base .. cauldron_levels[i][3]
|
||||
else
|
||||
return base .. cauldron_levels[i][2]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Itemstring of potions is “mcl_potions:<NBT Potion Tag>”
|
||||
|
||||
minetest.register_craftitem("mcl_potions:water", {
|
||||
|
|
|
@ -48,7 +48,7 @@ minetest.register_node("mcl_sponges:sponge", {
|
|||
buildable_to = false,
|
||||
stack_max = 64,
|
||||
sounds = mcl_sounds.node_sound_dirt_defaults(),
|
||||
groups = {handy=1, hoey=1, building_block=1},
|
||||
groups = {handy=1, building_block=1},
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local pn = placer:get_player_name()
|
||||
if pointed_thing.type ~= "node" then
|
||||
|
@ -107,7 +107,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, building_block=1},
|
||||
_mcl_blast_resistance = 0.6,
|
||||
_mcl_hardness = 0.6,
|
||||
})
|
||||
|
|
|
@ -48,16 +48,15 @@ minetest.register_tool(":", {
|
|||
},
|
||||
groups = hand_groups,
|
||||
_mcl_diggroups = {
|
||||
handy = { speed = 1, level = 1, uses = 0 },
|
||||
axey = { speed = 1, level = 1, uses = 0 },
|
||||
shovely = { speed = 1, level = 1, uses = 0 },
|
||||
hoey = { speed = 1, level = 1, uses = 0 },
|
||||
pickaxey = { speed = 1, level = 0, uses = 0 },
|
||||
swordy = { speed = 1, level = 0, uses = 0 },
|
||||
swordy_cobweb = { speed = 1, level = 0, uses = 0 },
|
||||
shearsy = { speed = 1, level = 0, uses = 0 },
|
||||
shearsy_wool = { speed = 1, level = 0, uses = 0 },
|
||||
shearsy_cobweb = { speed = 1, level = 0, uses = 0 },
|
||||
handy = { tool_multiplier = 1, level = 1, uses = 0 },
|
||||
axey = { tool_multiplier = 1, level = 1, uses = 0 },
|
||||
shovely = { tool_multiplier = 1, level = 1, uses = 0 },
|
||||
pickaxey = { tool_multiplier = 1, level = 0, uses = 0 },
|
||||
swordy = { tool_multiplier = 1, level = 0, uses = 0 },
|
||||
swordy_cobweb = { tool_multiplier = 1, level = 0, uses = 0 },
|
||||
shearsy = { tool_multiplier = 1, level = 0, uses = 0 },
|
||||
shearsy_wool = { tool_multiplier = 1, level = 0, uses = 0 },
|
||||
shearsy_cobweb = { tool_multiplier = 1, level = 0, uses = 0 },
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -91,7 +90,7 @@ minetest.register_tool("mcl_tools:pick_wood", {
|
|||
_repair_material = "group:wood",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
pickaxey = { speed = 2, level = 1, uses = 60 }
|
||||
pickaxey = { tool_multiplier = 2, level = 1, uses = 60 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:pick_stone", {
|
||||
|
@ -111,7 +110,7 @@ minetest.register_tool("mcl_tools:pick_stone", {
|
|||
_repair_material = "mcl_core:cobble",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
pickaxey = { speed = 4, level = 3, uses = 132 }
|
||||
pickaxey = { tool_multiplier = 4, level = 3, uses = 132 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:pick_iron", {
|
||||
|
@ -131,7 +130,7 @@ minetest.register_tool("mcl_tools:pick_iron", {
|
|||
_repair_material = "mcl_core:iron_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
pickaxey = { speed = 6, level = 4, uses = 251 }
|
||||
pickaxey = { tool_multiplier = 6, level = 4, uses = 251 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:pick_gold", {
|
||||
|
@ -151,7 +150,7 @@ minetest.register_tool("mcl_tools:pick_gold", {
|
|||
_repair_material = "mcl_core:gold_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
pickaxey = { speed = 12, level = 2, uses = 33 }
|
||||
pickaxey = { tool_multiplier = 12, level = 2, uses = 33 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:pick_diamond", {
|
||||
|
@ -171,7 +170,7 @@ minetest.register_tool("mcl_tools:pick_diamond", {
|
|||
_repair_material = "mcl_core:diamond",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
pickaxey = { speed = 8, level = 5, uses = 1562 }
|
||||
pickaxey = { tool_multiplier = 8, level = 5, uses = 1562 }
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -263,7 +262,7 @@ minetest.register_tool("mcl_tools:shovel_wood", {
|
|||
_repair_material = "group:wood",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
shovely = { speed = 2, level = 1, uses = 60 }
|
||||
shovely = { tool_multiplier = 2, level = 1, uses = 60 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:shovel_stone", {
|
||||
|
@ -284,7 +283,7 @@ minetest.register_tool("mcl_tools:shovel_stone", {
|
|||
_repair_material = "mcl_core:cobble",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
shovely = { speed = 4, level = 3, uses = 132 }
|
||||
shovely = { tool_multiplier = 4, level = 3, uses = 132 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:shovel_iron", {
|
||||
|
@ -305,7 +304,7 @@ minetest.register_tool("mcl_tools:shovel_iron", {
|
|||
_repair_material = "mcl_core:iron_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
shovely = { speed = 6, level = 4, uses = 251 }
|
||||
shovely = { tool_multiplier = 6, level = 4, uses = 251 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:shovel_gold", {
|
||||
|
@ -326,7 +325,7 @@ minetest.register_tool("mcl_tools:shovel_gold", {
|
|||
_repair_material = "mcl_core:gold_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
shovely = { speed = 12, level = 2, uses = 33 }
|
||||
shovely = { tool_multiplier = 12, level = 2, uses = 33 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:shovel_diamond", {
|
||||
|
@ -347,7 +346,7 @@ minetest.register_tool("mcl_tools:shovel_diamond", {
|
|||
_repair_material = "mcl_core:diamond",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
shovely = { speed = 8, level = 5, uses = 1562 }
|
||||
shovely = { tool_multiplier = 8, level = 5, uses = 1562 }
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -369,7 +368,7 @@ minetest.register_tool("mcl_tools:axe_wood", {
|
|||
_repair_material = "group:wood",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
axey = { speed = 2, level = 1, uses = 60 }
|
||||
axey = { tool_multiplier = 2, level = 1, uses = 60 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:axe_stone", {
|
||||
|
@ -388,7 +387,7 @@ minetest.register_tool("mcl_tools:axe_stone", {
|
|||
_repair_material = "mcl_core:cobble",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
axey = { speed = 4, level = 3, uses = 132 }
|
||||
axey = { tool_multiplier = 4, level = 3, uses = 132 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:axe_iron", {
|
||||
|
@ -408,7 +407,7 @@ minetest.register_tool("mcl_tools:axe_iron", {
|
|||
_repair_material = "mcl_core:iron_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
axey = { speed = 6, level = 4, uses = 251 }
|
||||
axey = { tool_multiplier = 6, level = 4, uses = 251 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:axe_gold", {
|
||||
|
@ -427,7 +426,7 @@ minetest.register_tool("mcl_tools:axe_gold", {
|
|||
_repair_material = "mcl_core:gold_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
axey = { speed = 12, level = 2, uses = 33 }
|
||||
axey = { tool_multiplier = 12, level = 2, uses = 33 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:axe_diamond", {
|
||||
|
@ -446,7 +445,7 @@ minetest.register_tool("mcl_tools:axe_diamond", {
|
|||
_repair_material = "mcl_core:diamond",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
axey = { speed = 8, level = 5, uses = 1562 }
|
||||
axey = { tool_multiplier = 8, level = 5, uses = 1562 }
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -468,8 +467,8 @@ minetest.register_tool("mcl_tools:sword_wood", {
|
|||
_repair_material = "group:wood",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
swordy = { speed = 2, level = 1, uses = 60 },
|
||||
swordy_cobweb = { speed = 2, level = 1, uses = 60 }
|
||||
swordy = { tool_multiplier = 2, level = 1, uses = 60 },
|
||||
swordy_cobweb = { tool_multiplier = 2, level = 1, uses = 60 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:sword_stone", {
|
||||
|
@ -488,8 +487,8 @@ minetest.register_tool("mcl_tools:sword_stone", {
|
|||
_repair_material = "mcl_core:cobble",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
swordy = { speed = 4, level = 3, uses = 132 },
|
||||
swordy_cobweb = { speed = 4, level = 3, uses = 132 }
|
||||
swordy = { tool_multiplier = 4, level = 3, uses = 132 },
|
||||
swordy_cobweb = { tool_multiplier = 4, level = 3, uses = 132 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:sword_iron", {
|
||||
|
@ -508,8 +507,8 @@ minetest.register_tool("mcl_tools:sword_iron", {
|
|||
_repair_material = "mcl_core:iron_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
swordy = { speed = 6, level = 4, uses = 251 },
|
||||
swordy_cobweb = { speed = 6, level = 4, uses = 251 }
|
||||
swordy = { tool_multiplier = 6, level = 4, uses = 251 },
|
||||
swordy_cobweb = { tool_multiplier = 6, level = 4, uses = 251 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:sword_gold", {
|
||||
|
@ -528,8 +527,8 @@ minetest.register_tool("mcl_tools:sword_gold", {
|
|||
_repair_material = "mcl_core:gold_ingot",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
swordy = { speed = 12, level = 2, uses = 33 },
|
||||
swordy_cobweb = { speed = 12, level = 2, uses = 33 }
|
||||
swordy = { tool_multiplier = 12, level = 2, uses = 33 },
|
||||
swordy_cobweb = { tool_multiplier = 12, level = 2, uses = 33 }
|
||||
},
|
||||
})
|
||||
minetest.register_tool("mcl_tools:sword_diamond", {
|
||||
|
@ -548,8 +547,8 @@ minetest.register_tool("mcl_tools:sword_diamond", {
|
|||
_repair_material = "mcl_core:diamond",
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
swordy = { speed = 8, level = 5, uses = 1562 },
|
||||
swordy_cobweb = { speed = 8, level = 5, uses = 1562 }
|
||||
swordy = { tool_multiplier = 8, level = 5, uses = 1562 },
|
||||
swordy_cobweb = { tool_multiplier = 8, level = 5, uses = 1562 }
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -570,9 +569,9 @@ minetest.register_tool("mcl_tools:shears", {
|
|||
sound = { breaks = "default_tool_breaks" },
|
||||
_mcl_toollike_wield = true,
|
||||
_mcl_diggroups = {
|
||||
shearsy = { speed = 1.5, level = 1, uses = 238 },
|
||||
shearsy_wool = { speed = 5, level = 1, uses = 238 },
|
||||
shearsy_cobweb = { speed = 15, level = 1, uses = 238 }
|
||||
shearsy = { tool_multiplier = 1.5, level = 1, uses = 238 },
|
||||
shearsy_wool = { tool_multiplier = 5, level = 1, uses = 238 },
|
||||
shearsy_cobweb = { tool_multiplier = 15, level = 1, uses = 238 }
|
||||
},
|
||||
})
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ local function add_chunk(pos)
|
|||
end
|
||||
prev = d
|
||||
end
|
||||
chunks[#chunks+1] = {n, n}
|
||||
chunks[#chunks] = {n, n}
|
||||
end
|
||||
function mcl_mapgen_core.is_generated(pos)
|
||||
local n = mcl_vars.get_chunk_number(pos) -- unsigned int
|
||||
|
@ -1790,8 +1790,6 @@ local generate_nether_decorations = function(minp, maxp, seed)
|
|||
return
|
||||
end
|
||||
|
||||
minetest.log("action", "[mcl_mapgen_core] Nether decorations " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp))
|
||||
|
||||
-- TODO: Generate everything based on Perlin noise instead of PseudoRandom
|
||||
|
||||
local bpos
|
||||
|
@ -1849,7 +1847,6 @@ local generate_nether_decorations = function(minp, maxp, seed)
|
|||
end
|
||||
|
||||
minetest.register_on_generated(function(minp, maxp, blockseed)
|
||||
minetest.log("action", "[mcl_mapgen_core] Generating chunk " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp))
|
||||
add_chunk(minp)
|
||||
local p1, p2 = {x=minp.x, y=minp.y, z=minp.z}, {x=maxp.x, y=maxp.y, z=maxp.z}
|
||||
if lvm > 0 then
|
||||
|
@ -2135,8 +2132,12 @@ local function basic(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
|
|||
-- * Replace water with Nether lava.
|
||||
-- * Replace stone, sand dirt in v6 so the Nether works in v6.
|
||||
elseif minp.y <= mcl_vars.mg_nether_max and maxp.y >= mcl_vars.mg_nether_min then
|
||||
local nodes
|
||||
if mg_name == "v6" then
|
||||
local nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"})
|
||||
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"})
|
||||
else
|
||||
nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:water_source"})
|
||||
end
|
||||
for n=1, #nodes do
|
||||
local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z)
|
||||
if data[p_pos] == c_water then
|
||||
|
@ -2150,18 +2151,6 @@ local function basic(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
|
|||
lvm_used = true
|
||||
end
|
||||
end
|
||||
else
|
||||
minetest.emerge_area(minp, maxp, function(blockpos, action, calls_remaining, param)
|
||||
if calls_remaining > 0 then return end
|
||||
-- local nodes = minetest.find_nodes_in_area(param.minp, param.maxp, {"mcl_core:water_source"})
|
||||
local nodes = minetest.find_nodes_in_area(param.minp, param.maxp, {"group:water"})
|
||||
local sn=(mcl_observers and mcl_observers.swap_node) or minetest.swap_node
|
||||
local l = {name="mcl_nether:nether_lava_source"}
|
||||
for _, n in pairs(nodes) do
|
||||
sn(n, l)
|
||||
end
|
||||
end, {minp=vector.new(minp), maxp=vector.new(maxp)})
|
||||
end
|
||||
|
||||
-- End block fixes:
|
||||
-- * Replace water with end stone or air (depending on height).
|
||||
|
|
|
@ -534,7 +534,7 @@ end
|
|||
|
||||
-- Debug command
|
||||
minetest.register_chatcommand("spawnstruct", {
|
||||
params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_portal_shrine | nether_portal | dungeon",
|
||||
params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_portal_shrine | dungeon",
|
||||
description = S("Generate a pre-defined structure near your position."),
|
||||
privs = {debug = true},
|
||||
func = function(name, param)
|
||||
|
@ -570,8 +570,6 @@ minetest.register_chatcommand("spawnstruct", {
|
|||
mcl_structures.generate_end_portal_shrine(pos, rot, pr)
|
||||
elseif param == "dungeon" and mcl_dungeons and mcl_dungeons.spawn_dungeon then
|
||||
mcl_dungeons.spawn_dungeon(pos, rot, pr)
|
||||
elseif param == "nether_portal" and mcl_portals and mcl_portals.spawn_nether_portal then
|
||||
mcl_portals.spawn_nether_portal(pos, rot, pr, name)
|
||||
elseif param == "" then
|
||||
message = S("Error: No structure type given. Please use “/spawnstruct <type>”.")
|
||||
errord = true
|
||||
|
|
|
@ -96,8 +96,6 @@ minetest.register_globalstep(function(dtime)
|
|||
|
||||
local player_velocity = player:get_velocity() or player:get_player_velocity()
|
||||
|
||||
local wielded = player:get_wielded_item()
|
||||
|
||||
-- controls head bone
|
||||
local pitch = - degrees(player:get_look_vertical())
|
||||
local yaw = degrees(player:get_look_horizontal())
|
||||
|
@ -109,19 +107,13 @@ minetest.register_globalstep(function(dtime)
|
|||
player_vel_yaw = limit_vel_yaw(player_vel_yaw, yaw)
|
||||
player_vel_yaws[name] = player_vel_yaw
|
||||
|
||||
-- controls right and left arms pitch when shooting a bow
|
||||
if string.find(wielded:get_name(), "mcl_bows:bow") and controls.RMB and not controls.LMB and not controls.up and not controls.down and not controls.left and not controls.right then
|
||||
-- controls right and left arms pitch when shooting a bow or punching
|
||||
if string.find(player:get_wielded_item():get_name(), "mcl_bows:bow") and controls.RMB and not controls.LMB and not controls.up and not controls.down and not controls.left and not controls.right then
|
||||
player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(pitch+90,-30,pitch * -1 * .35))
|
||||
player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3.5,5.785,0), vector.new(pitch+90,43,pitch * .35))
|
||||
-- when punching
|
||||
elseif controls.LMB and player:get_attach() == nil then
|
||||
player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(pitch,0,0))
|
||||
player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(0,0,0))
|
||||
-- when holding an item.
|
||||
elseif wielded:get_name() ~= "" then
|
||||
player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(20,0,0))
|
||||
player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(0,0,0))
|
||||
-- resets arms pitch
|
||||
else
|
||||
player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(0,0,0))
|
||||
player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(0,0,0))
|
||||
|
@ -252,7 +244,13 @@ minetest.register_globalstep(function(dtime)
|
|||
playerphysics.add_physics_factor(player, "speed", "mcl_playerplus:surface", 0.4)
|
||||
end
|
||||
end
|
||||
elseif get_item_group(node_feet, "liquid") ~= 0 and mcl_enchanting.get_enchantment(player:get_inventory():get_stack("armor", 5), "depth_strider") then
|
||||
else
|
||||
-- Reset speed decrease
|
||||
playerphysics.remove_physics_factor(player, "speed", "mcl_playerplus:surface")
|
||||
end
|
||||
|
||||
-- Swimming? Check if boots are enchanted with depth strider
|
||||
if get_item_group(node_feet, "liquid") ~= 0 and mcl_enchanting.get_enchantment(player:get_inventory():get_stack("armor", 5), "depth_strider") then
|
||||
local boots = player:get_inventory():get_stack("armor", 5)
|
||||
local depth_strider = mcl_enchanting.get_enchantment(boots, "depth_strider")
|
||||
|
||||
|
|
|
@ -106,18 +106,14 @@ minetest.register_entity("wieldview:wieldnode", {
|
|||
if player then
|
||||
local wielded = player:get_wielded_item()
|
||||
local itemstring = wielded:get_name()
|
||||
|
||||
if self.itemstring ~= itemstring then
|
||||
local def = minetest.registered_items[itemstring]
|
||||
self.object:set_properties({glow = def and def.light_source or 0})
|
||||
|
||||
-- wield item as cubic
|
||||
if armor.textures[self.wielder].wielditem == "blank.png" then
|
||||
self.object:set_properties({textures = {itemstring}})
|
||||
else -- wield item as flat
|
||||
else
|
||||
self.object:set_properties({textures = {""}})
|
||||
end
|
||||
|
||||
self.itemstring = itemstring
|
||||
end
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue