Merge branch 'mineclone5' into mineclone5

This commit is contained in:
jordan4ibanez 2021-04-25 19:59:19 +00:00
commit d5a0fa1c14
52 changed files with 1110 additions and 373 deletions

View File

@ -188,7 +188,7 @@ function boat.on_punch(self, puncher, time_from_last_punch, tool_capabilities, d
end end
function boat.on_step(self, dtime, moveresult) function boat.on_step(self, dtime, moveresult)
mcl_burning.tick(self.object, dtime) mcl_burning.tick(self.object, dtime, self)
self._v = get_v(self.object:get_velocity()) * get_sign(self._v) self._v = get_v(self.object:get_velocity()) * get_sign(self._v)
local v_factor = 1 local v_factor = 1

View File

@ -1,132 +1,52 @@
local S = minetest.get_translator("mcl_burning") local S = minetest.get_translator("mcl_burning")
function mcl_burning.get_default(datatype) function mcl_burning.get_storage(obj)
local default_table = {string = "", float = 0.0, int = 0, bool = false} return obj:is_player() and mcl_burning.storage[obj] or obj:get_luaentity()
return default_table[datatype]
end
function mcl_burning.get(obj, datatype, name)
local key
if obj:is_player() then
local meta = obj:get_meta()
return meta["get_" .. datatype](meta, "mcl_burning:" .. name)
else
local luaentity = obj:get_luaentity()
return luaentity and luaentity["mcl_burning_" .. name] or mcl_burning.get_default(datatype)
end
end
function mcl_burning.set(obj, datatype, name, value)
if obj:is_player() then
local meta = obj:get_meta()
meta["set_" .. datatype](meta, "mcl_burning:" .. name, value or mcl_burning.get_default(datatype))
else
local luaentity = obj:get_luaentity()
if mcl_burning.get_default(datatype) == value then
value = nil
end
luaentity["mcl_burning_" .. name] = value
end
end end
function mcl_burning.is_burning(obj) function mcl_burning.is_burning(obj)
return mcl_burning.get(obj, "float", "burn_time") > 0 return mcl_burning.get_storage(obj).burn_time
end end
function mcl_burning.is_affected_by_rain(obj) function mcl_burning.is_affected_by_rain(obj)
return mcl_weather and mcl_weather.get_weather() == "rain" and mcl_weather.is_outdoor(obj:get_pos()) return mcl_weather.get_weather() == "rain" and mcl_weather.is_outdoor(obj:get_pos())
end end
function mcl_burning.get_collisionbox(obj, smaller) function mcl_burning.get_collisionbox(obj, smaller, storage)
local box = obj:get_properties().collisionbox local cache = storage.collisionbox_cache
local minp, maxp = vector.new(box[1], box[2], box[3]), vector.new(box[4], box[5], box[6]) if cache then
if smaller then local box = cache[smaller and 2 or 1]
return box[1], box[2]
else
local box = obj:get_properties().collisionbox
local minp, maxp = vector.new(box[1], box[2], box[3]), vector.new(box[4], box[5], box[6])
local s_vec = vector.new(0.1, 0.1, 0.1) local s_vec = vector.new(0.1, 0.1, 0.1)
minp = vector.add(minp, s_vec) local s_minp = vector.add(minp, s_vec)
maxp = vector.subtract(maxp, s_vec) local s_maxp = vector.subtract(maxp, s_vec)
storage.collisionbox_cache = {{minp, maxp}, {s_minp, s_maxp}}
return minp, maxp
end end
return minp, maxp
end end
function mcl_burning.get_touching_nodes(obj, nodenames) function mcl_burning.get_touching_nodes(obj, nodenames, storage)
local pos = obj:get_pos() local pos = obj:get_pos()
local box = obj:get_properties().collisionbox local minp, maxp = mcl_burning.get_collisionbox(obj, true, storage)
local minp, maxp = mcl_burning.get_collisionbox(obj, true)
local nodes = minetest.find_nodes_in_area(vector.add(pos, minp), vector.add(pos, maxp), nodenames) local nodes = minetest.find_nodes_in_area(vector.add(pos, minp), vector.add(pos, maxp), nodenames)
return nodes return nodes
end end
function mcl_burning.get_highest_group_value(obj, groupname)
local nodes = mcl_burning.get_touching_nodes(obj, "group:" .. groupname, true)
local highest_group_value = 0
for _, pos in pairs(nodes) do
local node = minetest.get_node(pos)
local group_value = minetest.get_item_group(node.name, groupname)
if group_value > highest_group_value then
highest_group_value = group_value
end
end
return highest_group_value
end
function mcl_burning.damage(obj)
local luaentity = obj:get_luaentity()
local health
if luaentity then
health = luaentity.health
end
local hp = health or obj:get_hp()
if hp <= 0 then
return
end
local do_damage = true
if obj:is_player() then
if mcl_potions.player_has_effect(obj, "fire_proof") then
do_damage = false
else
local name = obj:get_player_name()
armor.last_damage_types[name] = "fire"
local deathmsg = S("@1 burned to death.", name)
local reason = mcl_burning.get(obj, "string", "reason")
if reason ~= "" then
deathmsg = S("@1 was burned by @2.", name, reason)
end
mcl_death_messages.player_damage(obj, deathmsg)
end
else
if luaentity.fire_damage_resistant then
do_damage = false
end
end
if do_damage then
local new_hp = hp - 1
if health then
luaentity.health = new_hp
else
obj:set_hp(new_hp)
end
end
end
function mcl_burning.set_on_fire(obj, burn_time, reason) function mcl_burning.set_on_fire(obj, burn_time, reason)
if obj:get_hp() < 0 then if obj:get_hp() < 0 then
return return
end end
local storage = mcl_burning.get_storage(obj)
local luaentity = obj:get_luaentity() local luaentity = obj:get_luaentity()
if luaentity and luaentity.fire_resistant then if luaentity and luaentity.fire_resistant then
return return
end end
local old_burn_time = mcl_burning.get(obj, "float", "burn_time")
local max_fire_prot_lvl = 0 local max_fire_prot_lvl = 0
if obj:is_player() then if obj:is_player() then
@ -148,37 +68,22 @@ function mcl_burning.set_on_fire(obj, burn_time, reason)
burn_time = burn_time - math.floor(burn_time * max_fire_prot_lvl * 0.15) burn_time = burn_time - math.floor(burn_time * max_fire_prot_lvl * 0.15)
end end
if old_burn_time <= burn_time then if not storage.burn_time or burn_time >= storage.burn_time then
--[[local sound_id = mcl_burning.get(obj, "int", "sound_id") if obj:is_player() and not storage.fire_hud_id then
if sound_id == 0 then storage.fire_hud_id = obj:hud_add({
sound_id = minetest.sound_play("fire_fire", { hud_elem_type = "image",
object = obj, position = {x = 0.5, y = 0.5},
gain = 0.18, scale = {x = -100, y = -100},
max_hear_distance = 16, text = "mcl_burning_entity_flame_animated.png^[opacity:180^[verticalframe:" .. mcl_burning.animation_frames .. ":" .. 1,
loop = true, z_index = 1000,
}) + 1 })
end]]--
local hud_id
if obj:is_player() then
hud_id = mcl_burning.get(obj, "int", "hud_id")
if hud_id == 0 then
hud_id = obj:hud_add({
hud_elem_type = "image",
position = {x = 0.5, y = 0.5},
scale = {x = -100, y = -100},
text = "mcl_burning_entity_flame_animated.png^[opacity:180^[verticalframe:" .. mcl_burning.animation_frames .. ":" .. 1,
z_index = 1000,
}) + 1
end
end end
mcl_burning.set(obj, "float", "burn_time", burn_time) storage.burn_time = burn_time
mcl_burning.set(obj, "string", "reason", reason) storage.burn_reason = reason
mcl_burning.set(obj, "int", "hud_id", hud_id) storage.fire_damage_timer = 0
--mcl_burning.set(obj, "int", "sound_id", sound_id)
local fire_entity = minetest.add_entity(obj:get_pos(), "mcl_burning:fire") local fire_entity = minetest.add_entity(obj:get_pos(), "mcl_burning:fire")
local minp, maxp = mcl_burning.get_collisionbox(obj) local minp, maxp = mcl_burning.get_collisionbox(obj, false, storage)
local obj_size = obj:get_properties().visual_size local obj_size = obj:get_properties().visual_size
local vertical_grow_factor = 1.2 local vertical_grow_factor = 1.2
@ -192,111 +97,81 @@ function mcl_burning.set_on_fire(obj, burn_time, reason)
fire_entity:set_properties({visual_size = size}) fire_entity:set_properties({visual_size = size})
fire_entity:set_attach(obj, "", offset, {x = 0, y = 0, z = 0}) fire_entity:set_attach(obj, "", offset, {x = 0, y = 0, z = 0})
mcl_burning.update_animation_frame(obj, fire_entity, 0) local fire_luaentity = fire_entity:get_luaentity()
fire_luaentity:update_frame(obj, storage)
for _, other in pairs(minetest.get_objects_inside_radius(fire_entity:get_pos(), 0)) do
local other_luaentity = other:get_luaentity()
if other_luaentity and other_luaentity.name == "mcl_burning:fire" and other_luaentity ~= fire_luaentity then
other:remove()
break
end
end
end end
end end
function mcl_burning.extinguish(obj) function mcl_burning.extinguish(obj)
if mcl_burning.is_burning(obj) then if mcl_burning.is_burning(obj) then
--local sound_id = mcl_burning.get(obj, "int", "sound_id") - 1 local storage = mcl_burning.get_storage(obj)
--minetest.sound_stop(sound_id)
if obj:is_player() then if obj:is_player() then
local hud_id = mcl_burning.get(obj, "int", "hud_id") - 1 if storage.fire_hud_id then
obj:hud_remove(hud_id) obj:hud_remove(storage.fire_hud_id)
end end
mcl_burning.storage[obj] = {}
mcl_burning.set(obj, "string", "reason") else
mcl_burning.set(obj, "float", "burn_time") storage.burn_time = nil
mcl_burning.set(obj, "float", "damage_timer") storage.burn_reason = nil
mcl_burning.set(obj, "int", "hud_id") storage.fire_damage_timer = nil
--mcl_burning.set(obj, "int", "sound_id")
end
end
function mcl_burning.catch_fire_tick(obj, dtime)
if mcl_burning.is_affected_by_rain(obj) or #mcl_burning.get_touching_nodes(obj, "group:puts_out_fire") > 0 then
mcl_burning.extinguish(obj)
else
local set_on_fire_value = mcl_burning.get_highest_group_value(obj, "set_on_fire")
if set_on_fire_value > 0 then
mcl_burning.set_on_fire(obj, set_on_fire_value)
end end
end end
end end
function mcl_burning.tick(obj, dtime) function mcl_burning.tick(obj, dtime, storage)
local burn_time = mcl_burning.get(obj, "float", "burn_time") - dtime if storage.burn_time then
storage.burn_time = storage.burn_time - dtime
if burn_time <= 0 then if storage.burn_time <= 0 or mcl_burning.is_affected_by_rain(obj) or #mcl_burning.get_touching_nodes(obj, "group:puts_out_fire", storage) > 0 then
mcl_burning.extinguish(obj) mcl_burning.extinguish(obj)
else return true
mcl_burning.set(obj, "float", "burn_time", burn_time) else
storage.fire_damage_timer = storage.fire_damage_timer + dtime
local damage_timer = mcl_burning.get(obj, "float", "damage_timer") + dtime if storage.fire_damage_timer >= 1 then
storage.fire_damage_timer = 0
if damage_timer >= 1 then local luaentity = obj:get_luaentity()
damage_timer = 0 local is_mob = luaentity and luaentity._cmi_is_mob
mcl_burning.damage(obj) local hp = is_mob and luaentity.health or obj:get_hp()
end
mcl_burning.set(obj, "float", "damage_timer", damage_timer) if hp > 0 then
end local do_damage = true
mcl_burning.catch_fire_tick(obj, dtime) if obj:is_player() then
end if mcl_potions.player_has_effect(obj, "fire_proof") then
do_damage = false
else
local name = obj:get_player_name()
armor.last_damage_types[name] = "fire"
local deathmsg = S("@1 burned to death.", name)
if storage.reason then
deathmsg = S("@1 was burned by @2.", name, storage.reason)
end
mcl_death_messages.player_damage(obj, deathmsg)
end
elseif luaentity.fire_damage_resistant then
do_damage = false
end
function mcl_burning.update_animation_frame(obj, fire_entity, animation_frame) if do_damage then
local fire_texture = "mcl_burning_entity_flame_animated.png^[opacity:180^[verticalframe:" .. mcl_burning.animation_frames .. ":" .. animation_frame local new_hp = hp - 1
local fire_HUD_texture = "mcl_burning_hud_flame_animated.png^[opacity:180^[verticalframe:" .. mcl_burning.animation_frames .. ":" .. animation_frame if is_mob then
fire_entity:set_properties({textures = {"blank.png", "blank.png", fire_texture, fire_texture, fire_texture, fire_texture}}) luaentity.health = new_hp
if obj:is_player() then else
local hud_id = mcl_burning.get(obj, "int", "hud_id") - 1 obj:set_hp(new_hp)
obj:hud_change(hud_id, "text", fire_HUD_texture) end
end end
end end
function mcl_burning.fire_entity_step(self, dtime)
if self.removed then
return
end
local obj = self.object
local parent = obj:get_attach()
local do_remove
self.doing_step = true
if not parent or not mcl_burning.is_burning(parent) then
do_remove = true
else
for _, other in pairs(minetest.get_objects_inside_radius(obj:get_pos(), 0)) do
local luaentity = obj:get_luaentity()
if luaentity and luaentity.name == "mcl_burning:fire" and not luaentity.doing_step and not luaentity.removed then
do_remove = true
break
end end
end end
end end
self.doing_step = false
if do_remove then
self.removed = true
obj:remove()
return
end
local animation_timer = self.animation_timer + dtime
if animation_timer >= 0.015 then
animation_timer = 0
local animation_frame = self.animation_frame + 1
if animation_frame > mcl_burning.animation_frames - 1 then
animation_frame = 0
end
mcl_burning.update_animation_frame(parent, obj, animation_frame)
self.animation_frame = animation_frame
end
self.animation_timer = animation_timer
end end

View File

@ -2,11 +2,65 @@ local S = minetest.get_translator("mcl_burning")
local modpath = minetest.get_modpath("mcl_burning") local modpath = minetest.get_modpath("mcl_burning")
mcl_burning = { mcl_burning = {
storage = {},
animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8 animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8
} }
dofile(modpath .. "/api.lua") dofile(modpath .. "/api.lua")
minetest.register_globalstep(function(dtime)
for _, player in pairs(minetest.get_connected_players()) do
local storage = mcl_burning.storage[player]
if not mcl_burning.tick(player, dtime, storage) and not mcl_burning.is_affected_by_rain(player) then
local nodes = mcl_burning.get_touching_nodes(player, {"group:puts_out_fire", "group:set_on_fire"}, storage)
local burn_time = 0
for _, pos in pairs(nodes) do
local node = minetest.get_node(pos)
if minetest.get_item_group(node.name, "puts_out_fire") > 0 then
burn_time = 0
break
end
local value = minetest.get_item_group(node.name, "set_on_fire")
if value > burn_time then
burn_time = value
end
end
if burn_time > 0 then
mcl_burning.set_on_fire(player, burn_time)
end
end
end
end)
minetest.register_on_respawnplayer(function(player)
mcl_burning.extinguish(player)
end)
minetest.register_on_joinplayer(function(player)
local storage
local burn_data = player:get_meta():get_string("mcl_burning:data")
if burn_data == "" then
storage = {}
else
storage = minetest.deserialize(burn_data)
end
mcl_burning.storage[player] = storage
end)
minetest.register_on_leaveplayer(function(player)
local storage = mcl_burning.storage[player]
storage.fire_hud_id = nil
player:get_meta():set_string("mcl_burning:data", minetest.serialize(storage))
mcl_burning.storage[player] = nil
end)
minetest.register_entity("mcl_burning:fire", { minetest.register_entity("mcl_burning:fire", {
initial_properties = { initial_properties = {
physical = false, physical = false,
@ -18,21 +72,45 @@ minetest.register_entity("mcl_burning:fire", {
animation_frame = 0, animation_frame = 0,
animation_timer = 0, animation_timer = 0,
on_step = mcl_burning.fire_entity_step,
})
minetest.register_globalstep(function(dtime) on_step = function(self, dtime)
for _, player in pairs(minetest.get_connected_players()) do local parent, storage = self:sanity_check()
if player:get_meta():get_float("mcl_burning:burn_time") > 0 then
mcl_burning.tick(player, dtime) if parent then
self.animation_timer = self.animation_timer + dtime
if self.animation_timer >= 0.1 then
self.animation_timer = 0
self.animation_frame = self.animation_frame + 1
if self.animation_frame > mcl_burning.animation_frames - 1 then
self.animation_frame = 0
end
self:update_frame(parent, storage)
end
else
self.object:remove()
end end
end end,
end) sanity_check = function(self)
local parent = self.object:get_attach()
minetest.register_on_respawnplayer(function(player) if not parent then
mcl_burning.extinguish(player) return
end) end
minetest.register_on_leaveplayer(function(player) local storage = mcl_burning.get_storage(parent)
mcl_burning.set(player, "int", "hud_id")
end) if not storage or not storage.burn_time then
return
end
return parent, storage
end,
update_frame = function(self, parent, storage)
local frame_overlay = "^[opacity:180^[verticalframe:" .. mcl_burning.animation_frames .. ":" .. self.animation_frame
local fire_texture = "mcl_burning_entity_flame_animated.png" .. frame_overlay
self.object:set_properties({textures = {"blank.png", "blank.png", fire_texture, fire_texture, fire_texture, fire_texture}})
if parent:is_player() then
parent:hud_change(storage.fire_hud_id, "text", "mcl_burning_hud_flame_animated.png" .. frame_overlay)
end
end,
})

View File

@ -171,15 +171,18 @@ local land_state_execution = function(self,dtime)
--make slow falling mobs fall slow --make slow falling mobs fall slow
if self.fall_slow then if self.fall_slow then
if self.object:get_velocity().y < 0 then local velocity = self.object:get_velocity()
--lua is acting really weird so we have to help it if velocity then
if round2(self.object:get_acceleration().y, 1) == -self.gravity then if velocity.y < 0 then
self.object:set_acceleration(vector_new(0,0,0)) --lua is acting really weird so we have to help it
mobs.mob_fall_slow(self) if round2(self.object:get_acceleration().y, 1) == -self.gravity then
end self.object:set_acceleration(vector_new(0,0,0))
else mobs.mob_fall_slow(self)
if round2(self.object:get_acceleration().y, 1) == 0 then end
self.object:set_acceleration(vector_new(0,-self.gravity,0)) else
if round2(self.object:get_acceleration().y, 1) == 0 then
self.object:set_acceleration(vector_new(0,-self.gravity,0))
end
end end
end end
end end
@ -371,8 +374,11 @@ local land_state_execution = function(self,dtime)
if float_now then if float_now then
mobs.float(self) mobs.float(self)
elseif self.object:get_acceleration().y == 0 then else
self.object:set_acceleration(vector_new(0,-self.gravity,0)) local acceleration = self.object:get_acceleration()
if acceleration and acceleration.y == 0 then
self.object:set_acceleration(vector_new(0,-self.gravity,0))
end
end end
end end
@ -894,7 +900,7 @@ mobs.mob_step = function(self, dtime)
pos.y = pos.y + self.eye_height pos.y = pos.y + self.eye_height
local node = minetest.get_node(pos).name local node = minetest_get_node(pos).name
if minetest_get_item_group(node, "water") ~= 0 then if minetest_get_item_group(node, "water") ~= 0 then
self.breath = self.breath - dtime self.breath = self.breath - dtime
@ -1106,7 +1112,7 @@ mobs.mob_step = function(self, dtime)
if not self.ignores_cobwebs then if not self.ignores_cobwebs then
local pos = self.object:get_pos() local pos = self.object:get_pos()
local node = minetest_get_node(pos).name local node = pos and minetest_get_node(pos).name
if node == "mcl_core:cobweb" then if node == "mcl_core:cobweb" then
@ -1131,6 +1137,6 @@ mobs.mob_step = function(self, dtime)
end end
end end
self.old_velocity = self.object:get_velocity() self.old_velocity = self.object:get_velocity()
self.old_pos = self.object:get_pos() self.old_pos = self.object:get_pos()
end end

View File

@ -2847,7 +2847,7 @@ mob_step = function()
--end --end
--if not self.fire_resistant then --if not self.fire_resistant then
-- mcl_burning.tick(self.object, dtime) -- mcl_burning.tick(self.object, dtime, self)
--end --end
--if use_cmi then --if use_cmi then

View File

@ -82,6 +82,23 @@ minetest.register_tool("mcl_armor:helmet_diamond",{
}, },
on_place = armor.on_armor_use, on_place = armor.on_armor_use,
on_secondary_use = armor.on_armor_use, on_secondary_use = armor.on_armor_use,
_mcl_upgradeable = true,
_mcl_upgrade_item = "mcl_armor:helmet_netherite"
})
minetest.register_tool("mcl_armor:helmet_netherite",{
description = S("Netherite Helmet"),
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = usage,
inventory_image = "mcl_armor_inv_helmet_netherite.png",
groups = {armor_head=1, mcl_armor_points=3, mcl_armor_uses=407, mcl_armor_toughness=2, enchantability=10 },
_repair_material = "mcl_netherite:netherite_ingot",
sounds = {
_mcl_armor_equip = "mcl_armor_equip_diamond",
_mcl_armor_unequip = "mcl_armor_unequip_diamond",
},
on_place = armor.on_armor_use,
on_secondary_use = armor.on_armor_use,
}) })
minetest.register_tool("mcl_armor:helmet_chain", { minetest.register_tool("mcl_armor:helmet_chain", {
@ -159,6 +176,23 @@ minetest.register_tool("mcl_armor:chestplate_diamond",{
}, },
on_place = armor.on_armor_use, on_place = armor.on_armor_use,
on_secondary_use = armor.on_armor_use, on_secondary_use = armor.on_armor_use,
_mcl_upgradable = true,
_mcl_upgradeitem = "mcl_armor:chestplate_netherite"
})
minetest.register_tool("mcl_armor:chestplate_netherite",{
description = S("Netherite Chestplate"),
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = usage,
inventory_image = "mcl_armor_inv_chestplate_netherite.png",
groups = {armor_torso=1, mcl_armor_points=8, mcl_armor_uses=592, mcl_armor_toughness=2, enchantability=10 },
_repair_material = "mcl_netherite:netherite_ingot",
sounds = {
_mcl_armor_equip = "mcl_armor_equip_diamond",
_mcl_armor_unequip = "mcl_armor_unequip_diamond",
},
on_place = armor.on_armor_use,
on_secondary_use = armor.on_armor_use,
}) })
minetest.register_tool("mcl_armor:chestplate_chain", { minetest.register_tool("mcl_armor:chestplate_chain", {
@ -236,6 +270,23 @@ minetest.register_tool("mcl_armor:leggings_diamond",{
}, },
on_place = armor.on_armor_use, on_place = armor.on_armor_use,
on_secondary_use = armor.on_armor_use, on_secondary_use = armor.on_armor_use,
_mcl_upgradable = true,
_mcl_upgrade_item = "mcl_armor:leggings_netherite"
})
minetest.register_tool("mcl_armor:leggings_netherite",{
description = S("Netherite Leggings"),
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = usage,
inventory_image = "mcl_armor_inv_leggings_netherite.png",
groups = {armor_legs=1, mcl_armor_points=6, mcl_armor_uses=555, mcl_armor_toughness=2, enchantability=10 },
_repair_material = "mcl_netherite:netherite_ingot",
sounds = {
_mcl_armor_equip = "mcl_armor_equip_diamond",
_mcl_armor_unequip = "mcl_armor_unequip_diamond",
},
on_place = armor.on_armor_use,
on_secondary_use = armor.on_armor_use,
}) })
minetest.register_tool("mcl_armor:leggings_chain", { minetest.register_tool("mcl_armor:leggings_chain", {
@ -312,6 +363,8 @@ minetest.register_tool("mcl_armor:boots_diamond",{
}, },
on_place = armor.on_armor_use, on_place = armor.on_armor_use,
on_secondary_use = armor.on_armor_use, on_secondary_use = armor.on_armor_use,
_mcl_upgradable = true,
_mcl_upgrade_item = "mcl_armor:boots_diamond"
}) })
minetest.register_tool("mcl_armor:boots_chain", { minetest.register_tool("mcl_armor:boots_chain", {
@ -329,6 +382,21 @@ minetest.register_tool("mcl_armor:boots_chain", {
on_secondary_use = armor.on_armor_use, on_secondary_use = armor.on_armor_use,
}) })
minetest.register_tool("mcl_armor:boots_netherite", {
description = S("Netherite Boots"),
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = usage,
inventory_image = "mcl_armor_inv_boots_netherite.png",
groups = {armor_feet=1, mcl_armor_points=3, mcl_armor_uses=481, enchantability=1 },
_repair_material = "mcl_netherite:netherite_ingot",
sounds = {
_mcl_armor_equip = "mcl_armor_equip_chainmail",
_mcl_armor_unequip = "mcl_armor_unequip_chainmail",
},
on_place = armor.on_armor_use,
on_secondary_use = armor.on_armor_use,
})
-- Register Craft Recipies -- Register Craft Recipies
local craft_ingreds = { local craft_ingreds = {

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 B

View File

@ -1,79 +1,132 @@
# Blender v2.73 (sub 0) OBJ File: '3d_armor_entity_3.blend' # Blender v2.92.0 OBJ File: ''
# www.blender.org # www.blender.org
mtllib 3d_armor_entity.mtl mtllib 3d_armor_entity.mtl
o Cube
v 1.000000 1.000000 -1.000000
v 1.000000 -1.000000 -1.000000
v 1.000000 1.000000 1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 1.000000 -1.000000
v -1.000000 -1.000000 -1.000000
v -1.000000 1.000000 1.000000
v -1.000000 -1.000000 1.000000
vt 0.625000 0.500000
vt 0.875000 0.500000
vt 0.875000 0.750000
vt 0.625000 0.750000
vt 0.375000 0.750000
vt 0.625000 1.000000
vt 0.375000 1.000000
vt 0.375000 0.000000
vt 0.625000 0.000000
vt 0.625000 0.250000
vt 0.375000 0.250000
vt 0.125000 0.500000
vt 0.375000 0.500000
vt 0.125000 0.750000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material
s off
f 1/1/1 5/2/1 7/3/1 3/4/1
f 4/5/2 3/4/2 7/6/2 8/7/2
f 8/8/3 7/9/3 5/10/3 6/11/3
f 6/12/4 2/13/4 4/5/4 8/14/4
f 2/13/5 1/1/5 3/4/5 4/5/5
f 6/11/6 5/10/6 1/1/6 2/13/6
o Player_Cube o Player_Cube
v 2.200000 9.763893 1.200000 v 2.200000 9.763893 1.200001
v 2.200000 9.763893 -1.200000
v 2.200000 2.663871 1.200000 v 2.200000 2.663871 1.200000
v 2.200000 2.663871 -1.200000 v 2.200000 2.663871 -1.200000
v 2.200000 9.763893 -1.200000
v -2.200000 9.763893 -1.200000 v -2.200000 9.763893 -1.200000
v -2.200000 9.763893 1.200000 v -2.200000 9.763893 1.200001
v -2.200000 2.663871 -1.200000
v -2.200000 2.663871 1.200000 v -2.200000 2.663871 1.200000
v 2.300000 13.863962 2.300000 v -2.200000 2.663871 -1.200000
v 2.300000 13.863962 -2.300000 v 2.300000 13.863962 2.300001
v 2.300000 9.263885 2.300000 v 2.300000 9.263885 2.300000
v 2.300000 9.263885 -2.300000 v 2.300000 9.263885 -2.299999
v -2.300000 13.863962 -2.300000 v 2.300000 13.863962 -2.299999
v -2.300000 13.863962 2.300000 v -2.300000 13.863962 -2.299999
v -2.300000 9.263885 -2.300000 v -2.300000 13.863962 2.300001
v -2.300000 9.263885 2.300000 v -2.300000 9.263885 2.300000
v -2.300000 9.263885 -2.299999
v -2.322686 2.473175 -1.300000 v -2.322686 2.473175 -1.300000
v -2.322686 2.473175 1.300000 v -2.322686 2.473175 1.300000
v -4.713554 2.682348 1.300000 v -4.713554 2.682348 1.300000
v -4.713554 2.682348 -1.300000 v -4.713554 2.682348 -1.300000
v -1.686446 9.745432 -1.300000 v -4.077313 9.954605 -1.299999
v -1.686446 9.745432 1.300000
v -4.077313 9.954605 1.300000 v -4.077313 9.954605 1.300000
v -4.077313 9.954605 -1.300000 v -1.686446 9.745432 1.300000
v 4.077313 9.954605 -1.300000 v -1.686446 9.745432 -1.299999
v 4.077313 9.954605 1.300000
v 1.686446 9.745432 1.300000 v 1.686446 9.745432 1.300000
v 1.686446 9.745432 -1.300000
v 4.713554 2.682348 -1.300000
v 4.713554 2.682348 1.300000
v 2.322686 2.473175 1.300000 v 2.322686 2.473175 1.300000
v 4.713554 2.682348 1.300000
v 4.077313 9.954605 1.300000
v 1.686446 9.745432 -1.299999
v 2.322686 2.473175 -1.300000 v 2.322686 2.473175 -1.300000
v 4.077313 9.954605 -1.299999
v 4.713554 2.682348 -1.300000
v 2.538733 2.980834 -1.210000
v 0.139099 2.938947 -1.200000 v 0.139099 2.938947 -1.200000
v 0.139099 2.938947 1.200000 v 0.139099 2.938947 1.200000
v 0.261266 -4.059988 1.200000
v 0.261266 -4.059988 -1.200000
v 2.660901 -4.018101 1.190000
v 2.660901 -4.018101 -1.210000
v 2.538733 2.980834 1.190000 v 2.538733 2.980834 1.190000
v 2.538733 2.980834 -1.210000 v 0.261266 -4.059988 -1.200000
v -0.139099 2.938947 -1.200000 v 2.660901 -4.018101 -1.210000
v -0.139099 2.938947 1.200000 v 2.660901 -4.018101 1.190000
v -0.261266 -4.059988 1.200000 v 0.261266 -4.059988 1.200000
v -0.261266 -4.059988 -1.200000
v -2.538734 2.980834 -1.210000 v -2.538734 2.980834 -1.210000
v -2.538734 2.980834 1.190000 v -2.538734 2.980834 1.190000
v -0.139099 2.938947 1.200000
v -0.139099 2.938947 -1.200000
v -0.261266 -4.059988 1.200000
v -0.261266 -4.059988 -1.200000
v -2.660901 -4.018101 -1.210000 v -2.660901 -4.018101 -1.210000
v -2.660901 -4.018101 1.190000 v -2.660901 -4.018101 1.190000
v 0.000000 -4.387500 -1.400000
v 0.000000 -4.387500 1.400000
v -2.799999 -4.387500 1.390000 v -2.799999 -4.387500 1.390000
v -2.799999 -4.387500 -1.410000 v -2.799999 -4.387500 -1.410000
v -2.800000 -0.812499 1.390000 v -2.800000 -0.812499 1.390000
v -2.800000 -0.812499 -1.410000 v -2.800000 -0.812499 -1.410000
v -0.000000 -4.387500 -1.400000 v 0.000000 -0.812499 1.400000
v -0.000000 -4.387500 1.400000 v 0.000000 -0.812499 -1.400000
v -0.000000 -0.812499 1.400000 v 0.000000 -0.812499 -1.400000
v -0.000000 -0.812499 -1.400000
v 2.800000 -0.812499 -1.410000
v 2.800000 -0.812499 1.390000
v 2.799999 -4.387500 -1.410000
v 2.799999 -4.387500 1.390000
v 0.000000 -4.387500 -1.400000 v 0.000000 -4.387500 -1.400000
v 0.000000 -4.387500 1.400000 v 0.000000 -4.387500 1.400000
v 0.000000 -0.812499 1.400000 v 0.000000 -0.812499 1.400000
v 0.000000 -0.812499 -1.400000 v 2.800000 -0.812499 -1.410000
v 2.267006 13.830965 2.267006 v 2.799999 -4.387500 -1.410000
v 2.267006 13.830965 -2.267006 v 2.799999 -4.387500 1.390000
v 2.800000 -0.812499 1.390000
v 2.267006 13.830965 2.267007
v 2.267006 13.830965 -2.267005
v 2.267006 9.296881 -2.267005
v 2.267006 9.296881 2.267006 v 2.267006 9.296881 2.267006
v 2.267006 9.296881 -2.267006 v -2.267006 13.830965 -2.267005
v -2.267006 13.830965 -2.267006 v -2.267006 13.830965 2.267007
v -2.267006 13.830965 2.267006 v -2.267006 9.296881 -2.267005
v -2.267006 9.296881 -2.267006
v -2.267006 9.296881 2.267006 v -2.267006 9.296881 2.267006
v -4.168111 10.060661 1.681621
v 1.741822 -5.305762 4.169018
v 1.718504 -5.438008 3.407457
v -6.641035 -3.963995 3.407457
v 4.191429 8.586647 1.681621
v -6.617718 -3.831752 4.169018
v 4.168111 8.454401 0.920061
v -4.191429 9.928415 0.920061
v -4.191429 8.586648 1.681620
v 6.617716 -3.831752 4.169018
v 6.641035 -3.963997 3.407457
v -1.718504 -5.438006 3.407457
v 4.168111 10.060658 1.681621
v -1.741822 -5.305762 4.169018
v 4.191429 9.928414 0.920061
v -4.168111 8.454404 0.920061
vt 0.250000 0.375000 vt 0.250000 0.375000
vt 0.250000 0.000000 vt 0.250000 0.000000
vt 0.312500 0.000000 vt 0.312500 0.000000
@ -81,6 +134,8 @@ vt 0.312500 0.375000
vt 0.437500 0.375000 vt 0.437500 0.375000
vt 0.437500 0.500000 vt 0.437500 0.500000
vt 0.312500 0.500000 vt 0.312500 0.500000
vt 0.437500 0.500000
vt 0.437500 0.375000
vt 0.562500 0.375000 vt 0.562500 0.375000
vt 0.562500 0.500000 vt 0.562500 0.500000
vt 0.437500 0.000000 vt 0.437500 0.000000
@ -97,97 +152,308 @@ vt 0.750000 1.000000
vt 0.625000 1.000000 vt 0.625000 1.000000
vt 0.875000 0.750000 vt 0.875000 0.750000
vt 0.875000 1.000000 vt 0.875000 1.000000
vt 0.750000 1.000000
vt 0.750000 0.750000
vt 0.750000 0.500000 vt 0.750000 0.500000
vt 0.875000 0.750000
vt 0.875000 0.500000 vt 0.875000 0.500000
vt 1.000000 0.750000 vt 1.000000 0.750000
vt 1.000000 0.500000 vt 1.000000 0.500000
vt 0.750000 0.375000 vt 0.750000 0.375000
vt 0.750000 0.500000
vt 0.812500 0.500000 vt 0.812500 0.500000
vt 0.812500 0.375000 vt 0.812500 0.375000
vt 0.687500 0.375000 vt 0.687500 0.375000
vt 0.687500 0.500000 vt 0.687500 0.500000
vt 0.750000 0.500000
vt 0.750000 0.375000
vt 0.687500 0.375000
vt 0.625000 0.375000
vt 0.625000 0.000000
vt 0.687500 0.000000 vt 0.687500 0.000000
vt 0.750000 0.000000 vt 0.750000 0.000000
vt 0.687500 0.000000
vt 0.812500 0.375000
vt 0.812500 0.000000 vt 0.812500 0.000000
vt 0.875000 0.375000 vt 0.875000 0.375000
vt 0.875000 0.000000 vt 0.875000 0.000000
vt 0.812500 0.375000
vt 0.812500 0.000000
vt 0.875000 0.000000
vt 0.875000 0.375000
vt 0.750000 0.375000
vt 0.750000 0.000000
vt 0.687500 0.375000
vt 0.687500 0.000000
vt 0.687500 0.375000
vt 0.687500 0.000000
vt 0.625000 0.000000
vt 0.625000 0.375000
vt 0.750000 0.500000
vt 0.687500 0.500000
vt 0.750000 0.375000
vt 0.812500 0.375000
vt 0.812500 0.500000
vt 0.750000 0.500000
vt 0.125000 0.375000 vt 0.125000 0.375000
vt 0.062500 0.375000 vt 0.062500 0.375000
vt 0.062500 0.500000 vt 0.062500 0.500000
vt 0.125000 0.500000 vt 0.125000 0.500000
vt 0.187500 0.375000 vt 0.187500 0.375000
vt 0.125000 0.375000
vt 0.125000 0.500000
vt 0.187500 0.500000 vt 0.187500 0.500000
vt 0.000000 0.375000 vt 0.000000 0.375000
vt 0.000000 0.000000 vt 0.000000 0.000000
vt 0.062500 0.000000 vt 0.062500 0.000000
vt 0.062500 0.375000
vt 0.250000 0.375000
vt 0.250000 0.000000
vt 0.187500 0.000000
vt 0.187500 0.375000
vt 0.125000 0.000000
vt 0.062500 0.000000
vt 0.187500 0.375000
vt 0.187500 0.000000 vt 0.187500 0.000000
vt 0.125000 0.000000 vt 0.125000 0.000000
vt 0.437500 0.875000 vt 0.125000 0.375000
vt 0.437500 1.000000 vt 0.125000 0.375000
vt 0.375000 1.000000 vt 0.125000 0.500000
vt 0.375000 0.875000 vt 0.062500 0.500000
vt 0.250000 0.875000 vt 0.062500 0.375000
vt 0.312500 0.875000 vt 0.187500 0.375000
vt 0.312500 0.656250 vt 0.125000 0.375000
vt 0.250000 0.656250 vt 0.125000 0.000000
vt 0.500000 0.875000 vt 0.187500 0.000000
vt 0.437500 0.656250 vt 0.062500 0.000000
vt 0.500000 0.656250 vt 0.125000 0.000000
vt 0.375000 0.656250 vt 0.250000 0.375000
vt 0.312500 1.000000 vt 0.187500 0.375000
usemtl Armor vt 0.187500 0.000000
vt 0.250000 0.000000
vt 0.000000 0.375000
vt 0.062500 0.375000
vt 0.062500 0.000000
vt 0.000000 0.000000
vt 0.187500 0.375000
vt 0.187500 0.500000
vt 0.125000 0.500000
vt 0.125000 0.375000
vt 0.381250 0.832812
vt 0.381250 0.845312
vt 0.375000 0.845312
vt 0.375000 0.832812
vt 0.362500 0.832812
vt 0.368750 0.832812
vt 0.368750 0.810938
vt 0.362500 0.810938
vt 0.387500 0.832812
vt 0.381250 0.832812
vt 0.381250 0.810938
vt 0.387500 0.810938
vt 0.375000 0.832812
vt 0.368750 0.832812
vt 0.368750 0.810938
vt 0.375000 0.810938
vt 0.381250 0.832812
vt 0.375000 0.832812
vt 0.375000 0.810938
vt 0.381250 0.810938
vt 0.375000 0.845312
vt 0.368750 0.845312
vt 0.381250 0.832812
vt 0.381250 0.810938
vt 0.375000 0.810938
vt 0.375000 0.832812
vt 0.375000 0.832812
vt 0.375000 0.810938
vt 0.368750 0.810938
vt 0.368750 0.832812
vt 0.387500 0.832812
vt 0.387500 0.810938
vt 0.381250 0.810938
vt 0.381250 0.832812
vt 0.362500 0.832812
vt 0.362500 0.810938
vt 0.368750 0.810938
vt 0.368750 0.832812
vt 0.381250 0.832812
vt 0.375000 0.832812
vt 0.375000 0.845312
vt 0.381250 0.845312
vt 0.368750 0.845312
vt 0.375000 0.845312
vt 0.500000 0.750000
vt 0.625000 0.750000
vt 0.625000 0.500000
vt 0.500000 0.500000
vt 0.750000 0.750000
vt 0.625000 1.000000
vt 0.750000 1.000000
vt 0.875000 0.750000
vt 0.750000 0.750000
vt 0.750000 1.000000
vt 0.875000 1.000000
vt 0.750000 0.500000
vt 0.875000 0.750000
vt 0.875000 0.500000
vt 1.000000 0.750000
vt 1.000000 0.500000
vt 0.032859 0.558649
vt 0.032859 0.998468
vt 0.362724 0.998468
vt 0.362724 0.558649
vt 0.032859 0.558649
vt 0.362724 0.558649
vt 0.362724 0.998468
vt 0.032859 0.998468
vt 0.039157 0.992309
vt 0.039157 0.656118
vt 0.060169 0.656118
vt 0.060169 0.992309
vt -0.003415 0.501261
vt 0.368238 0.501261
vt 0.368238 0.563203
vt -0.003415 0.563203
vt 0.368238 0.996797
vt -0.003415 0.996797
vt -0.003415 0.934855
vt 0.368238 0.934855
vt 0.394691 0.498800
vt 0.394691 0.994336
vt 0.363720 0.994336
vt 0.363720 0.498800
vt 0.032859 0.998468
vt 0.032859 0.558649
vt 0.362724 0.558649
vt 0.362724 0.998468
vt 0.032859 0.998468
vt 0.362724 0.998468
vt 0.362724 0.558649
vt 0.032859 0.558649
vt 0.039157 0.656118
vt 0.039157 0.992309
vt 0.060169 0.992309
vt 0.060169 0.656118
vt -0.003415 0.996797
vt 0.368238 0.996797
vt 0.368238 0.934855
vt -0.003415 0.934855
vt 0.368238 0.501261
vt -0.003415 0.501261
vt -0.003415 0.563203
vt 0.368238 0.563203
vt 0.394691 0.994336
vt 0.394691 0.498800
vt 0.363720 0.498800
vt 0.363720 0.994336
vn 1.0000 0.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn -0.0872 -0.9962 0.0000
vn 0.0872 0.9962 0.0000
vn -0.9962 0.0872 0.0000
vn 0.9962 -0.0872 0.0000
vn -0.9962 -0.0872 0.0000
vn 0.9962 0.0872 0.0000
vn -0.0872 0.9962 0.0000
vn 0.0872 -0.9962 0.0000
vn -0.0175 0.9998 0.0000
vn 0.0175 -0.9998 0.0000
vn 0.9998 0.0175 0.0000
vn 0.0042 0.0001 1.0000
vn -0.0042 -0.0001 -1.0000
vn -0.9998 -0.0175 0.0000
vn 0.0175 0.9998 0.0000
vn 0.9998 -0.0175 0.0000
vn 0.0042 -0.0001 -1.0000
vn -0.0042 0.0001 1.0000
vn -0.9998 0.0175 0.0000
vn -0.0175 -0.9998 0.0000
vn -0.0036 -0.0000 1.0000
vn 0.0036 0.0000 -1.0000
vn -0.0036 0.0000 -1.0000
vn 0.0036 -0.0000 1.0000
vn 0.0302 0.1710 0.9848
vn -0.0302 -0.1710 -0.9848
vn 0.1710 0.9698 -0.1737
vn 0.9848 -0.1736 0.0000
vn -0.9848 0.1736 -0.0000
vn -0.1710 -0.9698 0.1736
vn -0.0302 0.1710 0.9848
vn 0.0302 -0.1710 -0.9848
vn -0.1710 0.9698 -0.1736
vn 0.9848 0.1736 0.0000
vn -0.9848 -0.1736 -0.0000
vn 0.1710 -0.9698 0.1736
usemtl None
s off s off
f 1/1 3/2 4/3 2/4 f 9/15/7 10/16/7 11/17/7 12/18/7
f 5/5 6/6 1/7 2/4 f 13/19/8 14/20/8 9/21/8 12/18/8
f 8/6 7/5 4/8 3/9 f 15/22/9 16/23/9 11/24/9 10/25/9
f 5/5 2/4 4/3 7/10 f 13/19/10 12/18/10 11/17/10 16/26/10
f 7/10 8/11 6/12 5/5 f 16/26/11 15/27/11 14/28/11 13/19/11
f 8/11 3/13 1/14 6/12 f 15/27/12 10/29/12 9/30/12 14/28/12
f 9/15 11/16 12/17 10/18 f 17/31/7 18/32/7 19/33/7 20/34/7
f 13/19 14/20 9/21 10/18 f 21/35/8 22/36/8 17/37/8 20/34/8
f 12/22 11/23 16/20 15/19 f 19/38/9 18/39/9 23/40/9 24/41/9
f 13/19 10/18 12/17 15/24 f 21/35/10 20/34/10 19/33/10 24/42/10
f 14/22 13/19 15/24 16/25 f 22/43/11 21/35/11 24/42/11 23/44/11
f 9/26 14/22 16/25 11/27 f 17/45/12 22/43/12 23/44/12 18/46/12
f 17/28 18/24 19/29 20/30 f 25/47/13 26/48/13 27/49/13 28/50/13
f 24/31 23/32 22/24 21/28 f 29/51/14 30/52/14 31/53/14 32/54/14
f 23/31 24/14 20/13 19/33 f 30/55/15 29/56/15 28/57/15 27/58/15
f 24/31 21/28 17/34 20/33 f 29/51/10 32/54/10 25/59/10 28/60/10
f 21/28 22/30 18/35 17/34 f 32/54/16 31/61/16 26/62/16 25/59/16
f 22/30 23/36 19/37 18/35 f 31/61/12 30/63/12 27/64/12 26/62/12
f 27/30 31/35 30/37 26/36 f 33/65/12 34/66/12 35/67/12 36/68/12
f 28/28 32/34 31/35 27/30 f 37/69/17 38/70/17 34/66/17 33/65/17
f 25/31 29/33 32/34 28/28 f 39/71/10 40/72/10 38/70/10 37/69/10
f 26/31 30/33 29/13 25/14 f 36/73/18 35/74/18 40/75/18 39/76/18
f 25/31 28/28 27/24 26/32 f 39/71/19 37/69/19 33/77/19 36/78/19
f 32/28 29/30 30/29 31/24 f 38/79/20 40/80/20 35/81/20 34/82/20
f 40/38 33/39 34/40 39/41 f 41/83/21 42/84/21 43/85/21 44/86/21
f 36/42 38/38 37/41 35/43 f 45/87/22 46/88/22 47/89/22 48/90/22
f 39/44 37/45 38/46 40/39 f 44/91/23 47/92/23 46/93/23 41/94/23
f 34/1 35/2 37/47 39/42 f 43/95/24 48/96/24 47/97/24 44/98/24
f 40/38 38/48 36/46 33/39 f 41/83/25 46/99/25 45/100/25 42/84/25
f 33/42 36/47 35/48 34/38 f 42/101/26 45/102/26 48/103/26 43/104/26
f 45/38 46/41 42/40 41/39 f 49/105/27 50/106/27 51/107/27 52/108/27
f 41/42 42/38 43/48 44/47 f 52/109/28 51/110/28 53/111/28 54/112/28
f 45/38 41/39 44/46 47/48 f 49/105/29 52/108/29 54/113/29 55/114/29
f 42/1 46/42 48/47 43/2 f 51/115/30 50/116/30 56/117/30 53/118/30
f 46/44 45/39 47/46 48/45 f 50/119/31 49/120/31 55/121/31 56/122/31
f 44/42 43/43 48/41 47/38 f 54/123/32 53/124/32 56/125/32 55/126/32
f 53/49 54/50 49/51 50/52 f 57/127/9 58/128/9 59/129/9 60/130/9
f 51/53 52/54 50/55 49/56 f 61/131/11 62/132/11 60/133/11 59/134/11
f 55/57 51/49 49/58 54/59 f 63/135/33 61/136/33 59/137/33 58/138/33
f 52/52 56/54 53/55 50/60 f 62/139/34 64/140/34 57/141/34 60/142/34
f 56/49 55/52 54/60 53/58 f 64/143/7 63/144/7 58/145/7 57/146/7
f 52/52 51/51 55/61 56/54 f 62/139/8 61/147/8 63/148/8 64/140/8
f 64/49 61/58 62/60 63/52 f 65/149/11 66/150/11 67/151/11 68/152/11
f 57/52 59/60 61/55 64/54 f 69/153/35 70/154/35 66/155/35 65/156/35
f 63/57 62/59 60/58 58/49 f 68/157/36 67/158/36 71/159/36 72/160/36
f 58/53 60/56 59/55 57/54 f 72/161/7 71/162/7 70/163/7 69/164/7
f 61/49 59/52 60/51 62/50 f 66/165/9 70/166/9 71/167/9 67/168/9
f 57/52 64/54 63/61 58/51 f 69/153/8 65/156/8 68/169/8 72/170/8
f 65/15 66/18 68/17 67/16 f 73/171/11 74/172/11 75/173/11 76/174/11
f 69/19 66/18 65/21 70/20 f 77/175/9 74/172/9 73/176/9 78/177/9
f 68/22 71/19 72/20 67/23 f 75/178/8 79/179/8 80/180/8 76/181/8
f 69/19 71/24 68/17 66/18 f 77/175/12 79/182/12 75/173/12 74/172/12
f 70/22 72/25 71/24 69/19 f 78/183/7 80/184/7 79/182/7 77/175/7
f 65/26 67/27 72/25 70/22 f 73/185/10 76/186/10 80/184/10 78/183/10
f 85/187/37 81/188/37 86/189/37 82/190/37
f 87/191/38 83/192/38 84/193/38 88/194/38
f 81/195/39 85/196/39 87/197/39 88/198/39
f 85/199/40 82/200/40 83/201/40 87/202/40
f 86/203/41 81/204/41 88/205/41 84/206/41
f 82/207/42 86/208/42 84/209/42 83/210/42
f 93/211/43 89/212/43 94/213/43 90/214/43
f 95/215/44 91/216/44 92/217/44 96/218/44
f 89/219/45 93/220/45 95/221/45 96/222/45
f 93/223/46 90/224/46 91/225/46 95/226/46
f 94/227/47 89/228/47 96/229/47 92/230/47
f 90/231/48 94/232/48 92/233/48 91/234/48

View File

@ -6,6 +6,8 @@ local player_in_bed = 0
local is_sp = minetest.is_singleplayer() local is_sp = minetest.is_singleplayer()
local weather_mod = minetest.get_modpath("mcl_weather") ~= nil local weather_mod = minetest.get_modpath("mcl_weather") ~= nil
local explosions_mod = minetest.get_modpath("mcl_explosions") ~= nil local explosions_mod = minetest.get_modpath("mcl_explosions") ~= nil
local spawn_mod = minetest.get_modpath("mcl_spawn")
local worlds_mod = minetest.get_modpath("mcl_worlds")
-- Helper functions -- Helper functions
@ -76,7 +78,7 @@ local function lay_down(player, pos, bed_pos, state, skip)
bed_center = {x = bed_pos.x - dir.x/2, y = bed_pos.y + 0.1, z = bed_pos.z - dir.z/2} bed_center = {x = bed_pos.x - dir.x/2, y = bed_pos.y + 0.1, z = bed_pos.z - dir.z/2}
-- save respawn position when entering bed -- save respawn position when entering bed
if minetest.get_modpath("mcl_spawn") and mcl_spawn.set_spawn_pos(player, bed_pos, false) then if spawn_mod and mcl_spawn.set_spawn_pos(player, bed_pos, nil) then
minetest.chat_send_player(name, S("New respawn position set!")) minetest.chat_send_player(name, S("New respawn position set!"))
end end
@ -297,7 +299,7 @@ function mcl_beds.on_rightclick(pos, player, is_top)
if player:get_meta():get_string("mcl_beds:sleeping") == "true" then if player:get_meta():get_string("mcl_beds:sleeping") == "true" then
return return
end end
if minetest.get_modpath("mcl_worlds") then if worlds_mod then
local dim = mcl_worlds.pos_to_dimension(pos) local dim = mcl_worlds.pos_to_dimension(pos)
if dim == "nether" or dim == "end" then if dim == "nether" or dim == "end" then
-- Bed goes BOOM in the Nether or End. -- Bed goes BOOM in the Nether or End.

View File

@ -108,7 +108,7 @@ local damage_particles = function(pos, is_critical)
end end
ARROW_ENTITY.on_step = function(self, dtime) ARROW_ENTITY.on_step = function(self, dtime)
mcl_burning.tick(self.object, dtime) mcl_burning.tick(self.object, dtime, self)
self._time_in_air = self._time_in_air + .001 self._time_in_air = self._time_in_air + .001

View File

@ -61,7 +61,7 @@ function mcl_enchanting.update_groupcaps(itemstack)
if not hash or hash ~= groupcaps.hash then if not hash or hash ~= groupcaps.hash then
local tool_capabilities = itemstack:get_tool_capabilities() local tool_capabilities = itemstack:get_tool_capabilities()
tool_capabilities.groupcaps = groupcaps.values tool_capabilities.groupcaps = table.copy(groupcaps.values)
-- Increase the number of uses depending on the unbreaking level -- Increase the number of uses depending on the unbreaking level
-- of the tool. -- of the tool.

View File

@ -55,6 +55,7 @@ local uses = {
iron = 251, iron = 251,
gold = 33, gold = 33,
diamond = 1562, diamond = 1562,
netherite = 2031,
} }
local hoe_tt = S("Turns block into farmland") local hoe_tt = S("Turns block into farmland")
@ -255,6 +256,8 @@ minetest.register_tool("mcl_farming:hoe_diamond", {
_mcl_diggroups = { _mcl_diggroups = {
hoey = { speed = 8, level = 5, uses = 1562 } hoey = { speed = 8, level = 5, uses = 1562 }
}, },
_mcl_upgradable = true,
_mcl_upgrade_item = "mcl_tools:hoe_netherite"
}) })
minetest.register_craft({ minetest.register_craft({
@ -273,3 +276,24 @@ minetest.register_craft({
{"mcl_core:stick", ""} {"mcl_core:stick", ""}
} }
}) })
minetest.register_tool("mcl_farming:hoe_netherite", {
description = S("Netherite Hoe"),
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.netherite),
_doc_items_longdesc = hoe_longdesc,
_doc_items_usagehelp = hoe_usagehelp,
inventory_image = "farming_tool_netheritehoe.png",
wield_scale = mcl_vars.tool_wield_scale,
on_place = hoe_on_place_function(uses.netherite),
groups = { tool=1, hoe=1, enchantability=10 },
tool_capabilities = {
full_punch_interval = 0.25,
damage_groups = { fleshy = 4, },
punch_attack_uses = uses.netherite,
},
_repair_material = "mcl_nether:netherite_ingot",
_mcl_toollike_wield = true,
_mcl_diggroups = {
hoey = { speed = 8, level = 5, uses = uses.netherite }
},
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -15,7 +15,9 @@ local function register_rocket(n, duration, force)
local elytra = mcl_playerplus.elytra[user] local elytra = mcl_playerplus.elytra[user]
if elytra.active and elytra.rocketing <= 0 then if elytra.active and elytra.rocketing <= 0 then
elytra.rocketing = duration elytra.rocketing = duration
itemstack:take_item() if not minetest.is_creative_enabled(user:get_player_name()) then
itemstack:take_item()
end
minetest.sound_play("mcl_fireworks_rocket", {pos = user:get_pos()}) minetest.sound_play("mcl_fireworks_rocket", {pos = user:get_pos()})
end end
return itemstack return itemstack

View File

@ -90,7 +90,7 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor)
local wdir = minetest.dir_to_wallmounted(diff) local wdir = minetest.dir_to_wallmounted(diff)
local itemstring = itemstack:get_name() local itemstring = itemstack:get_name()
--local fakestack = ItemStack(itemstack) local fakestack = ItemStack(itemstack)
local idef = fakestack:get_definition() local idef = fakestack:get_definition()
local retval local retval
if wdir == 0 or wdir == 1 then if wdir == 0 or wdir == 1 then

View File

@ -52,6 +52,36 @@ minetest.register_node("mcl_nether:quartz_ore", {
_mcl_fortune_drop = mcl_core.fortune_drop_ore _mcl_fortune_drop = mcl_core.fortune_drop_ore
}) })
minetest.register_node("mcl_nether:ancient_debris", {
description = S("Ancient Debris"),
_doc_items_longdesc = S("Ancient debris can be found in the nether and is very very rare."),
stack_max = 64,
tiles = {"mcl_nether_ancient_debris_top.png", "mcl_nether_ancient_debris_side.png"},
is_ground_content = true,
groups = {pickaxey=4, building_block=1, material_stone=1, xp=0},
drop = 'mcl_nether:ancient_debris',
sounds = mcl_sounds.node_sound_stone_defaults(),
_mcl_blast_resistance = 1200,
_mcl_hardness = 30,
_mcl_silk_touch_drop = true,
_mcl_fortune_drop = mcl_core.fortune_drop_ore
})
minetest.register_node("mcl_nether:netheriteblock", {
description = S("Netherite Block"),
_doc_items_longdesc = S("Netherite block is very hard and can be made of 9 netherite ingots."),
stack_max = 64,
tiles = {"mcl_nether_netheriteblock.png"},
is_ground_content = true,
groups = {pickaxey=4, building_block=1, material_stone=1, xp = 0},
drop = 'mcl_nether:netheriteblock',
sounds = mcl_sounds.node_sound_stone_defaults(),
_mcl_blast_resistance = 1200,
_mcl_hardness = 50,
_mcl_silk_touch_drop = true,
_mcl_fortune_drop = mcl_core.fortune_drop_ore
})
-- For eternal fire on top of netherrack and magma blocks -- For eternal fire on top of netherrack and magma blocks
-- (this code does not require a dependency on mcl_fire) -- (this code does not require a dependency on mcl_fire)
local eternal_after_destruct = function(pos, oldnode) local eternal_after_destruct = function(pos, oldnode)
@ -253,6 +283,22 @@ minetest.register_craftitem("mcl_nether:quartz", {
groups = { craftitem = 1 }, groups = { craftitem = 1 },
}) })
minetest.register_craftitem("mcl_nether:netherite_scrap", {
description = S("Netherite Scrap"),
_doc_items_longdesc = S("Netherite scrap is a crafting ingredient for netherite ingots."),
inventory_image = "mcl_nether_netherite_scrap.png",
stack_max = 64,
groups = { craftitem = 1 },
})
minetest.register_craftitem("mcl_nether:netherite_ingot", {
description = S("Netherite Ingot"),
_doc_items_longdesc = S("Netherite ingots can be used with a smithing table to upgrade items to netherite."),
inventory_image = "mcl_nether_netherite_ingot.png",
stack_max = 64,
groups = { craftitem = 1 },
})
minetest.register_craftitem("mcl_nether:netherbrick", { minetest.register_craftitem("mcl_nether:netherbrick", {
description = S("Nether Brick"), description = S("Nether Brick"),
_doc_items_longdesc = S("Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences."), _doc_items_longdesc = S("Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences."),
@ -268,6 +314,13 @@ minetest.register_craft({
cooktime = 10, cooktime = 10,
}) })
minetest.register_craft({
type = "cooking",
output = "mcl_nether:netherite_scrap",
recipe = "mcl_nether:ancient_debris",
cooktime = 10,
})
minetest.register_craft({ minetest.register_craft({
output = 'mcl_nether:quartz_block', output = 'mcl_nether:quartz_block',
recipe = { recipe = {
@ -339,5 +392,32 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
output = "mcl_nether:netherite_ingot",
recipe = {
{'mcl_nether:netherite_scrap', 'mcl_nether:netherite_scrap', 'mcl_nether:netherite_scrap'},
{'mcl_nether:netherite_scrap', 'mcl_core:gold_ingot', 'mcl_core:gold_ingot'},
{'mcl_core:gold_ingot', 'mcl_core:gold_ingot', ''},
}
})
minetest.register_craft({
output = "mcl_nether:netheriteblock",
recipe = {
{'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot'},
{'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot'},
{'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot', 'mcl_nether:netherite_ingot'}
}
})
minetest.register_craft({
output = "mcl_nether:netherite_ingot 9",
recipe = {
{'mcl_nether:netheriteblock', '', ''},
{'', '', ''},
{'', '', ''}
}
})
dofile(minetest.get_modpath(minetest.get_current_modname()).."/nether_wart.lua") dofile(minetest.get_modpath(minetest.get_current_modname()).."/nether_wart.lua")
dofile(minetest.get_modpath(minetest.get_current_modname()).."/lava.lua") dofile(minetest.get_modpath(minetest.get_current_modname()).."/lava.lua")

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

View File

@ -0,0 +1,161 @@
--[[
By EliasFleckenstein03 and Code-Sploit
]]
--[[
Netherite item / node strings
Nodes:
Ancient Debris mcl_nether:ancient_debris
Netherite Ingot mcl_nether:netherite_ingot
Netherite Scrap mcl_nether:netherite_scrap
Netherite Block mcl_nether:netheriteblock
Items:
Netherite Sword mcl_tools:sword_netherite
Netherite Pickaxe mcl_tools:pick_netherite
Netherite Axe mcl_tools:axe_netherite
Netherite Shovel mcl_tools:shovel_netherite
Netherite Hoe mcl_farming:hoe_netherite
Netherite Helmet mcl_armor:helmet_netherite
Netherite Chestplate mcl_armor:chestplate_netherite
Netherite Leggings mcl_armor:leggings_netherite
Netherite Boots mcl_armor:boots_netherite
]]
local S = minetest.get_translator("mcl_smithing_table")
mcl_smithing_table = {}
-- Function to upgrade diamond tool/armor to netherite tool/armor
function mcl_smithing_table.upgrade_item(itemstack)
itemstack = ItemStack(itemstack) -- Copy the stack
local def = itemstack:get_definition()
if not def or not def._mcl_upgradable then
return
end
local itemname = itemstack:get_name()
local upgrade_item = def._mcl_upgrade_item or itemname:gsub("diamond", "netherite")
if upgrade_item == itemname then
return
end
itemstack:set_name(upgrade_item)
-- Reload the ToolTips of the tool
tt.reload_itemstack_description(itemstack)
-- Only return itemstack if upgrade was successfull
return itemstack
end
-- Badly copied over from mcl_anvils
-- ToDo: Make better formspec
local formspec = "size[9,9]" ..
"label[0,4.0;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, S("Inventory"))) .. "]" ..
"list[current_player;main;0,4.5;9,3;9]" ..
mcl_formspec.get_itemslot_bg(0,4.5,9,3) ..
"list[current_player;main;0,7.74;9,1;]" ..
mcl_formspec.get_itemslot_bg(0,7.74,9,1) ..
"list[context;diamond_item;1,2.5;1,1;]" ..
mcl_formspec.get_itemslot_bg(1,2.5,1,1) ..
"list[context;netherite;4,2.5;1,1;]" ..
mcl_formspec.get_itemslot_bg(4,2.5,1,1) ..
"list[context;upgraded_item;8,2.5;1,1;]" ..
mcl_formspec.get_itemslot_bg(8,2.5,1,1) ..
"label[3,0.1;" .. minetest.formspec_escape(minetest.colorize(mcl_colors.DARK_GRAY, S("Upgrade Gear"))) .. "]" ..
"listring[context;output]"..
"listring[current_player;main]"..
"listring[context;input]"..
"listring[current_player;main]"
local function reset_upgraded_item(pos)
local inv = minetest.get_meta(pos):get_inventory()
local upgraded_item
if inv:get_stack("netherite", 1):get_name() == "mcl_nether:netherite_ingot" then
upgraded_item = mcl_smithing_table.upgrade_item(inv:get_stack("diamond_item", 1))
end
inv:set_stack("upgraded_item", 1, upgraded_item)
end
minetest.register_node("mcl_smithing_table:table", {
description = S("Smithing table"),
-- ToDo: Add _doc_items_longdesc and _doc_items_usagehelp
stack_max = 64,
groups = {pickaxey = 2, deco_block = 1},
tiles = {
"mcl_smithing_table_top.png", "mcl_smithing_table_bottom.png", "mcl_smithing_table_side.png",
"mcl_smithing_table_side.png", "mcl_smithing_table_side.png", "mcl_smithing_table_front.png"
},
sounds = mcl_sounds.node_sound_metal_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", formspec)
local inv = meta:get_inventory()
inv:set_size("diamond_item", 1)
inv:set_size("netherite", 1)
inv:set_size("upgraded_item", 1)
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
if listname == "diamond_item" and mcl_smithing_table.upgrade_item(stack) or listname == "netherite" and stack:get_name() == "mcl_nether:netherite_ingot" then
return stack:get_count()
end
return 0
end,
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
return 0
end,
on_metadata_inventory_put = reset_upgraded_item,
on_metadata_inventory_take = function(pos, listname, index, stack, player)
local inv = minetest.get_meta(pos):get_inventory()
local function take_item(listname)
local itemstack = inv:get_stack(listname, 1)
itemstack:take_item()
inv:set_stack(listname, 1, itemstack)
end
if listname == "upgraded_item" then
take_item("diamond_item")
take_item("netherite")
-- ToDo: make epic sound
minetest.sound_play("mcl_smithing_table_upgrade", {pos = pos, max_hear_distance = 16})
end
reset_upgraded_item(pos)
end,
_mcl_blast_resistance = 2.5,
_mcl_hardness = 2.5
})
minetest.register_craft({
output = "mcl_smithing_table:table",
recipe = {
{"mcl_core:iron_ingot", "mcl_core:iron_ingot", ""},
{"group:wood", "group:wood", ""},
{"group:wood", "group:wood", ""}
}
})

View File

@ -0,0 +1,2 @@
name = mcl_smithing_table
depends = mcl_colors, mcl_formspec

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

View File

@ -31,7 +31,7 @@ minetest.register_node("mcl_sweet_berry:sweet_berry_bush_2", {
type = "fixed", type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16},
}, },
drop = "mc:sweet_berry 2" drop = "mcl_sweet_berry:sweet_berry 2"
}) })
minetest.register_node("mcl_sweet_berry:sweet_berry_bush_3", { minetest.register_node("mcl_sweet_berry:sweet_berry_bush_3", {
drawtype = "plantlike", drawtype = "plantlike",
@ -41,7 +41,7 @@ minetest.register_node("mcl_sweet_berry:sweet_berry_bush_3", {
type = "fixed", type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16},
}, },
drop = "mc:sweet_berry 3" drop = "mcl_sweet_berry:sweet_berry 3"
}) })
minetest.register_decoration({ minetest.register_decoration({
deco_type = "simple", deco_type = "simple",

View File

@ -173,6 +173,29 @@ minetest.register_tool("mcl_tools:pick_diamond", {
_mcl_diggroups = { _mcl_diggroups = {
pickaxey = { speed = 8, level = 5, uses = 1562 } pickaxey = { speed = 8, level = 5, uses = 1562 }
}, },
_mcl_upgradable = true,
_mcl_upgrade_item = "mcl_tools:pick_netherite"
})
minetest.register_tool("mcl_tools:pick_netherite", {
description = S("Netherite Pickaxe"),
_doc_items_longdesc = pickaxe_longdesc,
inventory_image = "default_tool_netheritepick.png",
wield_scale = wield_scale,
groups = { tool=1, pickaxe=1, dig_speed_class=6, enchantability=10 },
tool_capabilities = {
-- 1/1.2
full_punch_interval = 0.83333333,
max_drop_level=5,
damage_groups = {fleshy=6},
punch_attack_uses = 1016,
},
sound = { breaks = "default_tool_breaks" },
_repair_material = "mcl_nether:netherite_ingot",
_mcl_toollike_wield = true,
_mcl_diggroups = {
pickaxey = { speed = 9.5, level = 6, uses = 2031 }
},
}) })
local make_grass_path = function(itemstack, placer, pointed_thing) local make_grass_path = function(itemstack, placer, pointed_thing)
@ -349,6 +372,30 @@ minetest.register_tool("mcl_tools:shovel_diamond", {
_mcl_diggroups = { _mcl_diggroups = {
shovely = { speed = 8, level = 5, uses = 1562 } shovely = { speed = 8, level = 5, uses = 1562 }
}, },
_mcl_upgradable = true,
_mcl_upgrade_item = "mcl_tools:shovel_netherite"
})
minetest.register_tool("mcl_tools:shovel_netherite", {
description = S("Netherite Shovel"),
_doc_items_longdesc = shovel_longdesc,
_doc_items_usagehelp = shovel_use,
inventory_image = "default_tool_netheriteshovel.png",
wield_scale = wield_scale,
groups = { tool=1, shovel=1, dig_speed_class=6, enchantability=10 },
tool_capabilities = {
full_punch_interval = 1,
max_drop_level=5,
damage_groups = {fleshy=5},
punch_attack_uses = 1016,
},
on_place = make_grass_path,
sound = { breaks = "default_tool_breaks" },
_repair_material = "mcl_nether:netherite_ingot",
_mcl_toollike_wield = true,
_mcl_diggroups = {
shovely = { speed = 9, level = 6, uses = 2031 }
},
}) })
-- Axes -- Axes
@ -481,6 +528,29 @@ minetest.register_tool("mcl_tools:axe_diamond", {
_mcl_diggroups = { _mcl_diggroups = {
axey = { speed = 8, level = 5, uses = 1562 } axey = { speed = 8, level = 5, uses = 1562 }
}, },
_mcl_upgradable = true,
_mcl_upgrade_item = "mcl_tools:axe_netherite"
})
minetest.register_tool("mcl_tools:axe_netherite", {
description = S("Netherite Axe"),
_doc_items_longdesc = axe_longdesc,
inventory_image = "default_tool_netheriteaxe.png",
wield_scale = wield_scale,
groups = { tool=1, axe=1, dig_speed_class=6, enchantability=10 },
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level=5,
damage_groups = {fleshy=10},
punch_attack_uses = 1016,
},
on_place = make_stripped_trunk,
sound = { breaks = "default_tool_breaks" },
_repair_material = "mcl_nether:netherite_ingot",
_mcl_toollike_wield = true,
_mcl_diggroups = {
axey = { speed = 9, level = 6, uses = 2031 }
},
}) })
-- Swords -- Swords
@ -584,6 +654,28 @@ minetest.register_tool("mcl_tools:sword_diamond", {
swordy = { speed = 8, level = 5, uses = 1562 }, swordy = { speed = 8, level = 5, uses = 1562 },
swordy_cobweb = { speed = 8, level = 5, uses = 1562 } swordy_cobweb = { speed = 8, level = 5, uses = 1562 }
}, },
_mcl_upgradable = true,
_mcl_upgrade_item = "mcl_tools:sword_netherite"
})
minetest.register_tool("mcl_tools:sword_netherite", {
description = S("Netherite Sword"),
_doc_items_longdesc = sword_longdesc,
inventory_image = "default_tool_netheritesword.png",
wield_scale = wield_scale,
groups = { weapon=1, sword=1, dig_speed_class=5, enchantability=10 },
tool_capabilities = {
full_punch_interval = 0.625,
max_drop_level=5,
damage_groups = {fleshy=9},
punch_attack_uses = 2031,
},
sound = { breaks = "default_tool_breaks" },
_repair_material = "mcl_nether:netherite_ingot",
_mcl_toollike_wield = true,
_mcl_diggroups = {
swordy = { speed = 8, level = 5, uses = 2031 },
swordy_cobweb = { speed = 8, level = 5, uses = 2031 }
},
}) })
--Shears --Shears

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -2068,6 +2068,20 @@ local function register_dimension_ores()
}) })
end end
-- Ancient debris
if minetest.settings:get_bool("mcl_generate_ores", true) then
minetest.register_ore({
ore_type = "scatter",
ore = "mcl_nether:ancient_debris",
wherein = {"mcl_nether:netherrack"},
clust_scarcity = 10000,
clust_num_ores = 4,
clust_size = 1,
y_min = mcl_worlds.layer_to_y(8, "nether"),
y_max = mcl_worlds.layer_to_y(119, "nether"),
})
end
-- Lava springs in the Nether -- Lava springs in the Nether
minetest.register_ore({ minetest.register_ore({
ore_type = "scatter", ore_type = "scatter",

View File

@ -0,0 +1,44 @@
local c_debris = minetest.get_content_id("mcl_nether:ancient_debris")
local c_netherrack = minetest.get_content_id("mcl_nether:netherrack")
local c_air = minetest.get_content_id("air")
local facedir = {
vector.new(0, 0, 1),
vector.new(0, 1, 0),
vector.new(1, 0, 0),
vector.new(0, 0, -1),
vector.new(0, -1, 0),
vector.new(-1, 0, 0),
}
minetest.register_on_generated(function(minp, maxp)
if maxp.y < mcl_vars.mg_nether_min or minp.y > mcl_vars.mg_nether_max then
return
end
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
local data = vm:get_data()
local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax})
for idx in area:iter(minp.x, math.max(minp.y, mcl_vars.mg_nether_min), minp.z, maxp.x, math.min(maxp.y, mcl_vars.mg_nether_max), maxp.z) do
if data[idx] == c_debris then
local pos = area:position(idx)
local exposed = false
for _, dir in pairs(facedir) do
if data[area:indexp(vector.add(pos, dir))] == c_air then
exposed = true
break
end
end
if exposed then
data[idx] = c_netherrack
end
end
end
vm:set_data(data)
vm:calc_lighting()
vm:update_liquids()
vm:write_to_map()
end)

View File

@ -0,0 +1,4 @@
name = mcl_debrisgen
author = Fleckenstein
description = Make sure ancient debris is not generated exposed to air
depends = mcl_mapgen_core, mcl_nether

View File

@ -2016,8 +2016,8 @@ local function basic(vm, data, data2, emin, emax, area, minp, maxp, blockseed)
-- Big lava seas by replacing air below a certain height -- Big lava seas by replacing air below a certain height
if mcl_vars.mg_lava then if mcl_vars.mg_lava then
lvm_used = set_layers(data, area, c_lava, c_air, mcl_vars.mg_overworld_min, mcl_vars.mg_lava_overworld_max, minp, maxp, lvm_used, pr) lvm_used = set_layers(data, area, c_lava, c_air, mcl_vars.mg_overworld_min, mcl_vars.mg_lava_overworld_max, emin, emax, lvm_used, pr)
lvm_used = set_layers(data, area, c_nether_lava, c_air, mcl_vars.mg_nether_min, mcl_vars.mg_lava_nether_max, minp, maxp, lvm_used, pr) lvm_used = set_layers(data, area, c_nether_lava, c_air, mcl_vars.mg_nether_min, mcl_vars.mg_lava_nether_max, emin, emax, lvm_used, pr)
end end
-- Clay, vines, cocoas -- Clay, vines, cocoas

View File

@ -7,8 +7,8 @@ Drop registered inventories on player death.
* function(player): must return inventory * function(player): must return inventory
* listname: string * listname: string
* drop: bool * drop: bool
* true: the entire list will be dropped * true: the list will be dropped
* false: items with curse_of_vanishing enchantement will be broken. * false: the list will only be cleared
## mcl_death_drop.registered_dropped_lists ## mcl_death_drop.registered_dropped_lists
Table containing dropped list inventory, name and drop state. Table containing dropped list inventory, name and drop state.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 B

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 B

After

Width:  |  Height:  |  Size: 218 B

View File

@ -215,6 +215,24 @@ minetest.register_globalstep(function(dtime)
if vector.length(player_velocity) < 40 then if vector.length(player_velocity) < 40 then
local add_velocity = player.add_velocity or player.add_player_velocity local add_velocity = player.add_velocity or player.add_player_velocity
add_velocity(player, vector.multiply(player:get_look_dir(), 4)) add_velocity(player, vector.multiply(player:get_look_dir(), 4))
minetest.add_particlespawner({
amount = 1,
time = 0.1,
minpos = fly_pos,
maxpos = fly_pos,
minvel = {x = 0, y = 0, z = 0},
maxvel = {x = 0, y = 0, z = 0},
minacc = {x = 0, y = 0, z = 0},
maxacc = {x = 0, y = 0, z = 0},
minexptime = 0.3,
maxexptime = 0.5,
minsize = 1,
maxsize = 2.5,
collisiondetection = false,
vertical = false,
texture = "mcl_particles_crit.png^[colorize:#bc7a57:127",
glow = 5,
})
end end
end end
else else

View File

@ -397,9 +397,9 @@ end
-- false otherwise. -- false otherwise.
mcl_spawn.get_bed_spawn_pos = function(player) mcl_spawn.get_bed_spawn_pos = function(player)
local spawn, custom_spawn = nil, false local spawn, custom_spawn = nil, false
if player ~= nil and player:is_player() then if player and player:is_player() then
local attr = player:get_meta():get_string("mcl_beds:spawn") local attr = player:get_meta():get_string("mcl_beds:spawn")
if attr ~= nil and attr ~= "" then if attr and attr ~= "" then
spawn = minetest.string_to_pos(attr) spawn = minetest.string_to_pos(attr)
custom_spawn = true custom_spawn = true
end end

View File

@ -202,7 +202,8 @@ def convert_textures():
[ tex_dir + "/models/armor/chainmail_layer_1.png", tex_dir + "/models/armor/chainmail_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_chain.png", "mcl_armor_chestplate_chain.png", "mcl_armor_leggings_chain.png", "mcl_armor_boots_chain.png" ], [ tex_dir + "/models/armor/chainmail_layer_1.png", tex_dir + "/models/armor/chainmail_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_chain.png", "mcl_armor_chestplate_chain.png", "mcl_armor_leggings_chain.png", "mcl_armor_boots_chain.png" ],
[ tex_dir + "/models/armor/gold_layer_1.png", tex_dir + "/models/armor/gold_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_gold.png", "mcl_armor_chestplate_gold.png", "mcl_armor_leggings_gold.png", "mcl_armor_boots_gold.png" ], [ tex_dir + "/models/armor/gold_layer_1.png", tex_dir + "/models/armor/gold_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_gold.png", "mcl_armor_chestplate_gold.png", "mcl_armor_leggings_gold.png", "mcl_armor_boots_gold.png" ],
[ tex_dir + "/models/armor/iron_layer_1.png", tex_dir + "/models/armor/iron_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_iron.png", "mcl_armor_chestplate_iron.png", "mcl_armor_leggings_iron.png", "mcl_armor_boots_iron.png" ], [ tex_dir + "/models/armor/iron_layer_1.png", tex_dir + "/models/armor/iron_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_iron.png", "mcl_armor_chestplate_iron.png", "mcl_armor_leggings_iron.png", "mcl_armor_boots_iron.png" ],
[ tex_dir + "/models/armor/diamond_layer_1.png", tex_dir + "/models/armor/diamond_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_diamond.png", "mcl_armor_chestplate_diamond.png", "mcl_armor_leggings_diamond.png", "mcl_armor_boots_diamond.png" ] [ tex_dir + "/models/armor/diamond_layer_1.png", tex_dir + "/models/armor/diamond_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_diamond.png", "mcl_armor_chestplate_diamond.png", "mcl_armor_leggings_diamond.png", "mcl_armor_boots_diamond.png" ],
[ tex_dir + "/models/armor/netherite_layer_1.png", tex_dir + "/models/armor/netherite_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_netherite.png", "mcl_armor_chestplate_netherite.png", "mcl_armor_leggings_netherite.png", "mcl_armor_boots_netherite.png" ]
] ]
for a in armor_files: for a in armor_files:
APXSIZE = 16 # for some reason MineClone2 requires this APXSIZE = 16 # for some reason MineClone2 requires this