Compare commits
48 Commits
4fcd1ae541
...
accb8742dd
Author | SHA1 | Date |
---|---|---|
the-real-herowl | accb8742dd | |
codiac | 71282e196e | |
codiac | 89c97690c8 | |
codiac | 06f9486e4d | |
codiac | ae5564e658 | |
the-real-herowl | fdf823fff6 | |
Araca | 52b65554d9 | |
the-real-herowl | 5a069af072 | |
the-real-herowl | 14f73a8c55 | |
the-real-herowl | dbab70ea38 | |
chmodsayshello | 952a96b57d | |
Dehydrate6684 | e5a260b563 | |
Dehydrate6684 | 9b2b8ee56e | |
seventeenthShulker | 00cfca5947 | |
seventeenthShulker | c37da143da | |
seventeenthShulker | 520fd773fb | |
seventeenthShulker | 378df76e5f | |
seventeenthShulker | 3e12b3c700 | |
seventeenthShulker | 0637182697 | |
seventeenthShulker | 0580b14310 | |
seventeenthShulker | 98cf3b7f7a | |
seventeenthShulker | e5829f719d | |
seventeenthShulker | 089e3d46f1 | |
seventeenthShulker | 5d8688dbeb | |
seventeenthShulker | 058684f17f | |
seventeenthShulker | 918b8eee38 | |
seventeenthShulker | af206ed8b3 | |
seventeenthShulker | f2eca64e42 | |
the-real-herowl | 262100be24 | |
Eliy21 | 69dc013799 | |
Michieal | a425d359f5 | |
Freedom | 83d6e2a5d2 | |
FossFanatic | ce403b9245 | |
Eliy21 | da911bd4d4 | |
the-real-herowl | 8789411ab7 | |
the-real-herowl | 5b1deedaf0 | |
SmokeyDope | fa1d8dfc47 | |
SmokeyDope | d2a4a6d042 | |
SmokeyDope | 5e194b33bd | |
Araca | 35bb569ee1 | |
chmodsayshello | 5be506830f | |
chmodsayshello | ec7e99019e | |
Dehydrate6684 | b320d008ca | |
Dehydrate6684 | 23468cc2dd | |
Dehydrate6684 | 0c48a46f7c | |
Dehydrate6684 | cc217d0089 | |
Dehydrate6684 | e6653b78ee | |
Dehydrate6684 | a960bf2e8e |
|
@ -62,8 +62,13 @@ end
|
|||
local function set_double_attach(boat)
|
||||
boat._driver:set_attach(boat.object, "",
|
||||
{x = 0, y = 0.42, z = 0.8}, {x = 0, y = 0, z = 0})
|
||||
boat._passenger:set_attach(boat.object, "",
|
||||
{x = 0, y = 0.42, z = -2.2}, {x = 0, y = 0, z = 0})
|
||||
if boat._passenger:is_player() then
|
||||
boat._passenger:set_attach(boat.object, "",
|
||||
{x = 0, y = 0.42, z = -6.2}, {x = 0, y = 0, z = 0})
|
||||
else
|
||||
boat._passenger:set_attach(boat.object, "",
|
||||
{x = 0, y = 0.42, z = -4.5}, {x = 0, y = 270, z = 0})
|
||||
end
|
||||
end
|
||||
local function set_choat_attach(boat)
|
||||
boat._driver:set_attach(boat.object, "",
|
||||
|
@ -155,7 +160,7 @@ local boat = {
|
|||
minetest.register_on_respawnplayer(detach_object)
|
||||
|
||||
function boat.on_rightclick(self, clicker)
|
||||
if self._passenger or not clicker or clicker:get_attach() then
|
||||
if self._passenger or not clicker or clicker:get_attach() or (self.name == "mcl_boats:chest_boat" and self._driver) then
|
||||
return
|
||||
end
|
||||
attach_object(self, clicker)
|
||||
|
|
|
@ -21,7 +21,7 @@ mcl_dripping.register_drop({
|
|||
-- The group the liquid's nodes belong to
|
||||
liquid = "water",
|
||||
-- The texture used (particles will take a random 2x2 area of it)
|
||||
texture = "default_water_source_animated.png",
|
||||
texture = "mcl_core_water_source_animation.png",
|
||||
-- Define particle glow, ranges from `0` to `minetest.LIGHT_MAX`
|
||||
light = 1,
|
||||
-- The nodes (or node group) the particles will spawn under
|
||||
|
|
|
@ -82,7 +82,7 @@ end
|
|||
|
||||
mcl_dripping.register_drop({
|
||||
liquid = "water",
|
||||
texture = "default_water_source_animated.png",
|
||||
texture = "mcl_core_water_source_animation.png",
|
||||
light = 1,
|
||||
nodes = { "group:opaque", "group:leaves" },
|
||||
sound = "drippingwater_drip",
|
||||
|
@ -92,7 +92,7 @@ mcl_dripping.register_drop({
|
|||
|
||||
mcl_dripping.register_drop({
|
||||
liquid = "lava",
|
||||
texture = "default_lava_source_animated.png",
|
||||
texture = "mcl_core_lava_source_animation.png",
|
||||
light = math.max(7, minetest.registered_nodes["mcl_core:lava_source"].light_source - 3),
|
||||
nodes = { "group:opaque" },
|
||||
sound = "drippingwater_lavadrip",
|
||||
|
|
|
@ -410,7 +410,7 @@ function mob_class:check_head_swivel(dtime)
|
|||
--final_rotation = vector.new(0,0,0)
|
||||
end
|
||||
|
||||
mcl_util.set_bone_position(self.object,self.head_swivel, vector.new(0,self.bone_eye_height,self.horrizonatal_head_height), final_rotation)
|
||||
mcl_util.set_bone_position(self.object,self.head_swivel, vector.new(0,self.bone_eye_height,self.horizontal_head_height), final_rotation)
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -147,7 +147,7 @@ function mcl_mobs.register_mob(name, def)
|
|||
head_eye_height = def.head_eye_height or def.bone_eye_height or 0, -- how hight aproximatly the mobs head is fromm the ground to tell the mob how high to look up at the player
|
||||
curiosity = def.curiosity or 1, -- how often mob will look at player on idle
|
||||
head_yaw = def.head_yaw or "y", -- axis to rotate head on
|
||||
horrizonatal_head_height = def.horrizonatal_head_height or 0,
|
||||
horizontal_head_height = def.horizontal_head_height or 0,
|
||||
wears_armor = def.wears_armor, -- a number value used to index texture slot for armor
|
||||
stepheight = def.stepheight or 0.6,
|
||||
name = name,
|
||||
|
|
|
@ -13,7 +13,7 @@ local axolotl = {
|
|||
head_swivel = "head.control",
|
||||
bone_eye_height = -1,
|
||||
head_eye_height = -0.5,
|
||||
horrizonatal_head_height = 0,
|
||||
horizontal_head_height = 0,
|
||||
curiosity = 10,
|
||||
head_yaw="z",
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ mcl_mobs.register_mob("mobs_mc:chicken", {
|
|||
head_swivel = "head.control",
|
||||
bone_eye_height = 4,
|
||||
head_eye_height = 1.5,
|
||||
horrizonatal_head_height = -.3,
|
||||
horizontal_head_height = -.3,
|
||||
curiosity = 10,
|
||||
head_yaw="z",
|
||||
visual_size = {x=1,y=1},
|
||||
|
|
|
@ -24,7 +24,7 @@ local cow_def = {
|
|||
head_swivel = "head.control",
|
||||
bone_eye_height = 10,
|
||||
head_eye_height = 1.1,
|
||||
horrizonatal_head_height=-1.8,
|
||||
horizontal_head_height=-1.8,
|
||||
curiosity = 2,
|
||||
head_yaw="z",
|
||||
makes_footstep_sound = true,
|
||||
|
|
|
@ -4,12 +4,14 @@
|
|||
--License for code WTFPL and otherwise stated in readmes
|
||||
|
||||
local S = minetest.get_translator("mobs_mc")
|
||||
local allow_nav_hacks = minetest.settings:get_bool("mcl_mob_allow_nav_hacks ",false)
|
||||
|
||||
--###################
|
||||
--################### IRON GOLEM
|
||||
--###################
|
||||
|
||||
local etime = 0
|
||||
local walk_dist = 40
|
||||
local tele_dist = 80
|
||||
|
||||
mcl_mobs.register_mob("mobs_mc:iron_golem", {
|
||||
description = S("Iron Golem"),
|
||||
|
@ -85,11 +87,23 @@ mcl_mobs.register_mob("mobs_mc:iron_golem", {
|
|||
punch_start = 40, punch_end = 50,
|
||||
},
|
||||
jump = true,
|
||||
on_step = function(self,dtime)
|
||||
etime = etime + dtime
|
||||
if etime > 10 then
|
||||
if self._home and vector.distance(self._home,self.object:get_pos()) > 50 then
|
||||
self:gopath(self._home)
|
||||
do_custom = function(self, dtime)
|
||||
self.home_timer = (self.home_timer or 0) + dtime
|
||||
|
||||
if self.home_timer > 10 then
|
||||
self.home_timer = 0
|
||||
if self._home and self.state ~= "attack" then
|
||||
local dist = vector.distance(self._home,self.object:get_pos())
|
||||
if allow_nav_hacks and dist >= tele_dist then
|
||||
self.object:set_pos(self._home)
|
||||
self.state = "stand"
|
||||
self.order = "follow"
|
||||
elseif dist >= walk_dist then
|
||||
self:gopath(self._home, function(self)
|
||||
self.state = "stand"
|
||||
self.order = "follow"
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
|
|
@ -62,7 +62,7 @@ mcl_mobs.register_mob("mobs_mc:llama", {
|
|||
head_swivel = "head.control",
|
||||
bone_eye_height = 11,
|
||||
head_eye_height = 3,
|
||||
horrizonatal_head_height=0,
|
||||
horizontal_head_height=0,
|
||||
curiosity = 60,
|
||||
head_yaw = "z",
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ local ocelot = {
|
|||
head_swivel = "head.control",
|
||||
bone_eye_height = 6.2,
|
||||
head_eye_height = 0.4,
|
||||
horrizonatal_head_height=-0,
|
||||
horizontal_head_height=-0,
|
||||
head_yaw="z",
|
||||
curiosity = 4,
|
||||
collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.69, 0.3},
|
||||
|
|
|
@ -137,7 +137,7 @@ mcl_mobs.register_mob("mobs_mc:parrot", {
|
|||
xp_max = 3,
|
||||
head_swivel = "head.control",
|
||||
bone_eye_height = 1.1,
|
||||
horrizonatal_head_height=0,
|
||||
horizontal_head_height=0,
|
||||
curiosity = 10,
|
||||
collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.89, 0.25},
|
||||
visual = "mesh",
|
||||
|
|
|
@ -22,7 +22,7 @@ mcl_mobs.register_mob("mobs_mc:pig", {
|
|||
head_swivel = "head.control",
|
||||
bone_eye_height = 7.5,
|
||||
head_eye_height = 0.8,
|
||||
horrizonatal_head_height=-1,
|
||||
horizontal_head_height=-1,
|
||||
curiosity = 3,
|
||||
head_yaw="z",
|
||||
makes_footstep_sound = true,
|
||||
|
|
|
@ -27,7 +27,7 @@ mcl_mobs.register_mob("mobs_mc:polar_bear", {
|
|||
head_swivel = "head.control",
|
||||
bone_eye_height = 2.6,
|
||||
head_eye_height = 1,
|
||||
horrizonatal_head_height = 0,
|
||||
horizontal_head_height = 0,
|
||||
curiosity = 20,
|
||||
head_yaw="z",
|
||||
visual_size = {x=3.0, y=3.0},
|
||||
|
|
|
@ -18,7 +18,7 @@ local rabbit = {
|
|||
head_swivel = "head.control",
|
||||
bone_eye_height = 2,
|
||||
head_eye_height = 0.5,
|
||||
horrizonatal_head_height = -.3,
|
||||
horizontal_head_height = -.3,
|
||||
curiosity = 20,
|
||||
head_yaw="z",
|
||||
visual = "mesh",
|
||||
|
|
|
@ -67,7 +67,7 @@ mcl_mobs.register_mob("mobs_mc:sheep", {
|
|||
head_swivel = "head.control",
|
||||
bone_eye_height = 3.3,
|
||||
head_eye_height = 1.1,
|
||||
horrizonatal_head_height=-.7,
|
||||
horizontal_head_height=-.7,
|
||||
curiosity = 6,
|
||||
head_yaw="z",
|
||||
visual = "mesh",
|
||||
|
|
|
@ -29,7 +29,7 @@ local wolf = {
|
|||
head_swivel = "head.control",
|
||||
bone_eye_height = 3.5,
|
||||
head_eye_height = 1.1,
|
||||
horrizonatal_head_height=0,
|
||||
horizontal_head_height=0,
|
||||
curiosity = 3,
|
||||
head_yaw="z",
|
||||
sounds = {
|
||||
|
|
|
@ -774,7 +774,7 @@ local function search(data)
|
|||
for i = 1, #data.items_raw do
|
||||
local item = data.items_raw[i]
|
||||
local def = reg_items[item]
|
||||
local desc = lower(def.description)
|
||||
local desc = string.lower(M.get_translated_string(data.lang_code, def.description))
|
||||
local search_in = item .. desc
|
||||
local to_add
|
||||
|
||||
|
@ -838,6 +838,7 @@ local function init_data(name)
|
|||
iX = sfinv_only and 8 or DEFAULT_SIZE,
|
||||
items = init_items,
|
||||
items_raw = init_items,
|
||||
lang_code = M.get_player_information(name).lang_code or 'en',
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -431,6 +431,27 @@ awards.register_achievement("mcl:wax_off", {
|
|||
group = "Husbandry",
|
||||
})
|
||||
|
||||
-- Triggered in mcl_smithing_table
|
||||
awards.register_achievement("mcl:trim", {
|
||||
title = S("Crafting a New Look"),
|
||||
description = S("Craft a trimmed armor at a Smithing Table"),
|
||||
icon = "dune_armor_trim_smithing_template.png",
|
||||
type = "Advancement",
|
||||
group = "Adventure",
|
||||
})
|
||||
|
||||
awards.register_achievement("mcl:lots_of_trimming", {
|
||||
title = S("Smithing with Style"),
|
||||
description = S("Apply these smithing templates at least once: Spire, Snout, Rib, Ward, Silence, Vex, Tide, Wayfinder"),
|
||||
icon = "silence_armor_trim_smithing_template.png",
|
||||
type = "Advancement",
|
||||
group = "Adventure",
|
||||
on_unlock = function(name, awdef)
|
||||
-- delete json that is no longer needed
|
||||
minetest.get_player_by_name(name):get_meta():set_string("mcl_smithing_table:achievement_trims", "")
|
||||
end,
|
||||
})
|
||||
|
||||
-- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.)
|
||||
|
||||
if non_pc_achievements then
|
||||
|
|
|
@ -51,3 +51,7 @@ Bring Home the Beacon=Den Nachbarn heimleuchten
|
|||
Use a beacon.=Benutzen Sie ein Leuchtfeuer.
|
||||
Beaconator=Leuchtturmwärter
|
||||
Use a fully powered beacon.=Benutzen Sie ein vollständiges Leuchtfeuer.
|
||||
Crafting a New Look=Ein neues Aussehen
|
||||
Craft a trimmed armor at a Smithing Table=Versieh ein Rüstungsteil an einem Schmiedetisch mit einem Rüstungsbesatz
|
||||
Smithing with Style=Schmieden mit Stil
|
||||
Apply these smithing templates at least once: Spire, Snout, Rib, Ward, Silence, Vex, Tide, Wayfinder=Wende jede dieser Schmiedevorlagen mindestens einmal an: Turmspitze, Schnauze, Rippe, Warthof, Stille, Plagegeist, Gezeiten und Wegfinder
|
|
@ -111,3 +111,7 @@ Voluntary Exile=
|
|||
Kill a raid captain. Maybe consider staying away from the local villages for the time being...=
|
||||
Tactical Fishing=
|
||||
Catch a fish... without a fishing rod!=
|
||||
Crafting a New Look=
|
||||
Craft a trimmed armor at a Smithing Table=
|
||||
Smithing with Style=
|
||||
Apply these smithing templates at least once: Spire, Snout, Rib, Ward, Silence, Vex, Tide, Wayfinder=
|
|
@ -741,12 +741,14 @@ if minetest.is_creative_enabled("") then
|
|||
for _, item in ipairs(drops) do
|
||||
minetest.add_item(pos, item)
|
||||
end
|
||||
end
|
||||
local inv = digger:get_inventory()
|
||||
if inv then
|
||||
for _, item in ipairs(drops) do
|
||||
if not inv:contains_item("main", item, true) then
|
||||
inv:add_item("main", item)
|
||||
else
|
||||
-- If there is a player
|
||||
local inv = digger:get_inventory()
|
||||
if inv then
|
||||
for _, item in ipairs(drops) do
|
||||
if not inv:contains_item("main", item, true) then
|
||||
inv:add_item("main", item)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -246,6 +246,15 @@ function mesecon.mergetable(source, dest)
|
|||
return rval
|
||||
end
|
||||
|
||||
--
|
||||
function mesecon.join_table(t1, t2)
|
||||
local rval = mesecon.tablecopy(t2)
|
||||
for i, v in ipairs(t1) do
|
||||
table.insert(rval, mesecon.tablecopy(v))
|
||||
end
|
||||
return rval
|
||||
end
|
||||
|
||||
function mesecon.register_node(name, spec_common, spec_off, spec_on)
|
||||
spec_common.drop = spec_common.drop or name .. "_off"
|
||||
spec_common.on_blast = spec_common.on_blast or mesecon.on_blastnode
|
||||
|
|
|
@ -211,6 +211,11 @@ function mesecon.register_button(basename, description, texture, recipeitem, sou
|
|||
output = "mesecons_button:button_"..basename.."_off",
|
||||
recipe = {{ recipeitem }},
|
||||
})
|
||||
|
||||
if minetest.get_modpath("mesecons_mvps") then
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_"..basename.."_off")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_"..basename.."_on")
|
||||
end
|
||||
end
|
||||
|
||||
mesecon.register_button(
|
||||
|
|
|
@ -117,7 +117,7 @@ local function is_available(pos)
|
|||
return false, n
|
||||
end
|
||||
if minetest.registered_nodes[name] then
|
||||
return minetest.registered_nodes[name].buildable_to, n or false, n
|
||||
return minetest.registered_nodes[name].buildable_to or minetest.get_item_group(name, "dig_by_piston") == 1, n or false, n
|
||||
end
|
||||
return false, n
|
||||
end
|
||||
|
@ -126,6 +126,7 @@ end
|
|||
function mesecon.mvps_get_stack(pos, dir, maximum, piston_pos)
|
||||
-- determine the number of nodes to be pushed
|
||||
local nodes = {}
|
||||
local dig_nodes = {}
|
||||
local frontiers = {pos}
|
||||
|
||||
while #frontiers > 0 do
|
||||
|
@ -140,47 +141,50 @@ function mesecon.mvps_get_stack(pos, dir, maximum, piston_pos)
|
|||
return
|
||||
end
|
||||
|
||||
if not node_replaceable(nn.name) then
|
||||
if #nodes >= maximum then return nil, false end
|
||||
table.insert(nodes, {node = nn, pos = {x=np.x, y=np.y, z=np.z}})
|
||||
if minetest.get_item_group(nn.name, "dig_by_piston") == 1 then
|
||||
-- if we want the node to drop, e.g. sugar cane, do not count towards push limit
|
||||
table.insert(dig_nodes, {node = nn, pos = {x=np.x, y=np.y, z=np.z}})
|
||||
else
|
||||
if not node_replaceable(nn.name) then
|
||||
table.insert(nodes, {node = nn, pos = {x=np.x, y=np.y, z=np.z}})
|
||||
if #nodes > maximum then return nil, nil, false, true end
|
||||
|
||||
-- add connected nodes to frontiers, connected is a vector list
|
||||
-- the vectors must be absolute positions
|
||||
local connected = {}
|
||||
local has_loop
|
||||
if minetest.registered_nodes[nn.name]
|
||||
and minetest.registered_nodes[nn.name].mvps_sticky then
|
||||
connected, has_loop = minetest.registered_nodes[nn.name].mvps_sticky(np, nn, piston_pos)
|
||||
if has_loop then
|
||||
return {}, true
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(connected, vector.add(np, dir))
|
||||
|
||||
-- Make sure there are no duplicates in frontiers / nodes before
|
||||
-- adding nodes in "connected" to frontiers
|
||||
for _, cp in ipairs(connected) do
|
||||
local duplicate = false
|
||||
for _, rp in ipairs(nodes) do
|
||||
if vector.equals(cp, rp.pos) then
|
||||
duplicate = true
|
||||
-- add connected nodes to frontiers, connected is a vector list
|
||||
-- the vectors must be absolute positions
|
||||
local connected = {}
|
||||
local has_loop
|
||||
if minetest.registered_nodes[nn.name] and minetest.registered_nodes[nn.name].mvps_sticky then
|
||||
connected, has_loop = minetest.registered_nodes[nn.name].mvps_sticky(np, nn, piston_pos)
|
||||
if has_loop then
|
||||
return {}, {}, true, false
|
||||
end
|
||||
end
|
||||
for _, fp in ipairs(frontiers) do
|
||||
if vector.equals(cp, fp) then
|
||||
duplicate = true
|
||||
table.insert(connected, vector.add(np, dir))
|
||||
|
||||
-- Make sure there are no duplicates in frontiers / nodes before
|
||||
-- adding nodes in "connected" to frontiers
|
||||
for _, cp in ipairs(connected) do
|
||||
local duplicate = false
|
||||
for _, rp in ipairs(nodes) do
|
||||
if vector.equals(cp, rp.pos) then
|
||||
duplicate = true
|
||||
end
|
||||
end
|
||||
for _, fp in ipairs(frontiers) do
|
||||
if vector.equals(cp, fp) then
|
||||
duplicate = true
|
||||
end
|
||||
end
|
||||
if not duplicate and not mesecon.is_mvps_stopper(minetest.get_node(cp)) and minetest.get_item_group(nn.name, "dig_by_piston") == 0 then
|
||||
table.insert(frontiers, cp)
|
||||
end
|
||||
end
|
||||
if not duplicate and not mesecon.is_mvps_stopper(minetest.get_node(cp)) then
|
||||
table.insert(frontiers, cp)
|
||||
end
|
||||
end
|
||||
end
|
||||
table.remove(frontiers, 1)
|
||||
end
|
||||
|
||||
return nodes, false
|
||||
return nodes, dig_nodes, false, false
|
||||
end
|
||||
|
||||
function mesecon.mvps_set_owner(pos, placer)
|
||||
|
@ -203,6 +207,11 @@ local function are_protected(nodes, player_name)
|
|||
end
|
||||
|
||||
function mesecon.mvps_push(pos, dir, maximum, player_name, piston_pos)
|
||||
-- check if the node in front of the piston is protected against player_name (to prevent replacing air)
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
return false
|
||||
end
|
||||
|
||||
return mesecon.mvps_push_or_pull(pos, dir, dir, maximum, player_name, piston_pos)
|
||||
end
|
||||
|
||||
|
@ -222,9 +231,9 @@ end
|
|||
-- movedir: direction of actual movement
|
||||
-- maximum: maximum nodes to be pushed
|
||||
function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name, piston_pos)
|
||||
local nodes, has_loop = mesecon.mvps_get_stack(pos, movedir, maximum, piston_pos)
|
||||
local nodes, dig_nodes, has_loop, too_many = mesecon.mvps_get_stack(pos, movedir, maximum, piston_pos)
|
||||
|
||||
if has_loop then
|
||||
if has_loop or too_many then
|
||||
return false
|
||||
end
|
||||
|
||||
|
@ -237,6 +246,9 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
|
|||
if (newpos[i].x == piston_pos.x) and (newpos[i].y == piston_pos.y) and (newpos[i].z == piston_pos.z) then
|
||||
return
|
||||
end
|
||||
if minetest.is_protected(newpos[i], player_name) then
|
||||
return
|
||||
end
|
||||
if not is_available(newpos[i]) then
|
||||
local available = false
|
||||
for j in ipairs(nodes) do
|
||||
|
@ -253,18 +265,35 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
|
|||
end
|
||||
end
|
||||
|
||||
if are_protected(nodes, player_name) then
|
||||
local all_nodes = nodes
|
||||
if dig_nodes and #dig_nodes > 0 then all_nodes = mesecon.join_table(dig_nodes, nodes) end
|
||||
if are_protected(all_nodes, player_name) then
|
||||
return
|
||||
end
|
||||
|
||||
local first_dropper = nil
|
||||
-- remove all nodes
|
||||
for id, n in ipairs(nodes) do
|
||||
for id, n in ipairs(all_nodes) do
|
||||
n.meta = minetest.get_meta(n.pos):to_table()
|
||||
local is_dropper = mesecon.is_mvps_dropper(n.node, movedir, nodes, id)
|
||||
local is_dropper = mesecon.is_mvps_dropper(n.node, movedir, all_nodes, id)
|
||||
if is_dropper then
|
||||
--local drops = minetest.get_node_drops(n.node.name, "")
|
||||
minetest.dig_node(n.pos)
|
||||
-- if current node has already been destroyed (e.g. chain reaction of sugar cane breaking), skip it
|
||||
if minetest.get_node(n.pos).name == n.node.name then
|
||||
-- simulate dig_node using handle_node_drops
|
||||
local drops = minetest.get_node_drops(n.node.name, "")
|
||||
local counted_drops = {}
|
||||
minetest.remove_node(n.pos)
|
||||
for _, callback in pairs(minetest.registered_on_dignodes) do
|
||||
callback(n.pos, n)
|
||||
end
|
||||
for _, item in ipairs(drops) do
|
||||
if type(item) ~= "string" then
|
||||
item = item:get_name() .. item:get_count()
|
||||
end
|
||||
table.insert(counted_drops, item)
|
||||
end
|
||||
minetest.handle_node_drops(n.pos, counted_drops)
|
||||
end
|
||||
else
|
||||
minetest.remove_node(n.pos)
|
||||
local node_timer = minetest.get_node_timer(n.pos)
|
||||
|
@ -273,13 +302,13 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
|
|||
end
|
||||
end
|
||||
if is_dropper then
|
||||
first_dropper = id
|
||||
break
|
||||
-- get id of the first dropper, but we still let everything else drop, so don't break here
|
||||
if not first_dropper then first_dropper = id end
|
||||
end
|
||||
end
|
||||
|
||||
-- update mesecons for removed nodes ( has to be done after all nodes have been removed )
|
||||
for id, n in ipairs(nodes) do
|
||||
for id, n in ipairs(all_nodes) do
|
||||
if first_dropper and id >= first_dropper then
|
||||
break
|
||||
end
|
||||
|
@ -287,7 +316,7 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, player_name,
|
|||
end
|
||||
|
||||
-- add nodes
|
||||
for id, n in ipairs(nodes) do
|
||||
for id, n in ipairs(all_nodes) do
|
||||
if first_dropper and id >= first_dropper then
|
||||
break
|
||||
end
|
||||
|
@ -394,6 +423,7 @@ mesecon.register_mvps_stopper("mcl_core:realm_barrier")
|
|||
mesecon.register_mvps_stopper("mcl_core:void")
|
||||
mesecon.register_mvps_stopper("mcl_core:bedrock")
|
||||
mesecon.register_mvps_stopper("mcl_core:obsidian")
|
||||
mesecon.register_mvps_stopper("mcl_core:crying_obsidian")
|
||||
mesecon.register_mvps_stopper("mcl_chests:ender_chest")
|
||||
mesecon.register_mvps_stopper("mcl_chests:ender_chest_small")
|
||||
mesecon.register_mvps_stopper("mcl_mobspawners:spawner")
|
||||
|
@ -411,10 +441,9 @@ mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_on")
|
|||
mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_off")
|
||||
mesecon.register_mvps_stopper("mcl_banners:hanging_banner")
|
||||
mesecon.register_mvps_stopper("mcl_banners:standing_banner")
|
||||
mesecon.register_mvps_stopper("mcl_campfires:campfire")
|
||||
mesecon.register_mvps_stopper("mcl_campfires:campfire_lit")
|
||||
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire")
|
||||
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire_lit")
|
||||
mesecon.register_mvps_stopper("mcl_beehives:bee_nest")
|
||||
mesecon.register_mvps_stopper("mcl_beehives:beehive")
|
||||
mesecon.register_mvps_stopper("mcl_compass:lodestone")
|
||||
|
||||
-- Unmovable by technical restrictions.
|
||||
-- Open formspec would screw up if node is destroyed (minor problem)
|
||||
|
@ -445,13 +474,14 @@ mesecon.register_mvps_stopper("mcl_chests:trapped_chest")
|
|||
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_small")
|
||||
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_left")
|
||||
mesecon.register_mvps_stopper("mcl_chests:trapped_chest_right")
|
||||
mesecon.register_mvps_stopper("mcl_signs:wall_sign")
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign")
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5")
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign45")
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5")
|
||||
mesecon.register_mvps_stopper("mcl_barrels:barrel_open")
|
||||
mesecon.register_mvps_stopper("mcl_barrels:barrel_closed")
|
||||
mesecon.register_mvps_stopper("mcl_campfires:campfire")
|
||||
mesecon.register_mvps_stopper("mcl_campfires:campfire_lit")
|
||||
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire")
|
||||
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire_lit")
|
||||
mesecon.register_mvps_stopper("mcl_lectern:lectern")
|
||||
mesecon.register_mvps_stopper("mcl_grindstone:grindstone")
|
||||
|
||||
|
||||
-- Unmovable by design: objects
|
||||
|
@ -495,8 +525,6 @@ mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_2")
|
|||
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_3")
|
||||
|
||||
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_door")
|
||||
mesecon.register_mvps_unsticky("mcl_bamboo:bamboo_trapdoor")
|
||||
mesecon.register_mvps_unsticky("mcl_signs:wall_sign_bamboo")
|
||||
mesecon.register_mvps_unsticky("mcl_bamboo:scaffolding")
|
||||
|
||||
-- Beds
|
||||
|
@ -532,21 +560,6 @@ mesecon.register_mvps_unsticky("mcl_beds:bed_white_top")
|
|||
mesecon.register_mvps_unsticky("mcl_beds:bed_white_bottom")
|
||||
mesecon.register_mvps_unsticky("mcl_beds:bed_yellow_top")
|
||||
mesecon.register_mvps_unsticky("mcl_beds:bed_yellow_bottom")
|
||||
-- Buttons
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_stone_off")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_stone_on")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_wood_off")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_wood_on")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_acaciawood_off")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_acaciawood_on")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_birchwood_off")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_birchwood_on")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_darkwood_off")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_darkwood_on")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_sprucewood_off")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_sprucewood_on")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_junglewood_off")
|
||||
mesecon.register_mvps_unsticky("mesecons_button:button_junglewood_on")
|
||||
-- Cactus, Sugarcane & Vines
|
||||
mesecon.register_mvps_unsticky("mcl_core:cactus")
|
||||
mesecon.register_mvps_unsticky("mcl_core:reeds")
|
||||
|
@ -559,23 +572,6 @@ mesecon.register_mvps_unsticky("mcl_cake:cake_4")
|
|||
mesecon.register_mvps_unsticky("mcl_cake:cake_5")
|
||||
mesecon.register_mvps_unsticky("mcl_cake:cake_6")
|
||||
mesecon.register_mvps_unsticky("mcl_cake:cake")
|
||||
-- Carpet
|
||||
mesecon.register_mvps_unsticky("mcl_wool:black_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:blue_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:brown_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:cyan_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:green_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:grey_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:light_blue_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:lime_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:orange_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:magenta_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:pink_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:purple_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:red_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:silver_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:white_carpet")
|
||||
mesecon.register_mvps_unsticky("mcl_wool:yellow_carpet")
|
||||
-- Carved & Jack O'Lantern Pumpkins, Pumpkin & Melon
|
||||
mesecon.register_mvps_unsticky("mcl_farming:pumpkin_face")
|
||||
mesecon.register_mvps_unsticky("mcl_farming:pumpkin_face_light")
|
||||
|
@ -907,16 +903,16 @@ mesecon.register_mvps_unsticky("mcl_chests:black_shulker_box_small")
|
|||
mesecon.register_mvps_unsticky("mcl_chests:blue_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:brown_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:cyan_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:dark_green_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:dark_grey_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:lightblue_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:green_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:grey_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:light_blue_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:lime_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:orange_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:magenta_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:pink_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:purple_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:violet_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:red_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:silver_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:grey_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:white_shulker_box_small")
|
||||
mesecon.register_mvps_unsticky("mcl_chests:yellow_shulker_box_small")
|
||||
-- Snow
|
||||
|
|
|
@ -138,8 +138,6 @@ local function piston_off(pos, node)
|
|||
end
|
||||
|
||||
local function piston_orientate(pos, placer)
|
||||
mesecon.mvps_set_owner(pos, placer)
|
||||
|
||||
-- not placed by player
|
||||
if not placer then return end
|
||||
|
||||
|
@ -153,6 +151,9 @@ local function piston_orientate(pos, placer)
|
|||
elseif pitch < -55 then
|
||||
minetest.add_node(pos, {name=pistonspec.piston_down})
|
||||
end
|
||||
|
||||
-- set owner meta after setting node, or it will not keep
|
||||
mesecon.mvps_set_owner(pos, placer)
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -326,7 +326,7 @@ end
|
|||
tt.register_snippet(function(itemstring, toolcaps, stack)
|
||||
if not stack then return nil end
|
||||
local meta = stack:get_meta()
|
||||
if meta:get_string("mcl_armor:trim_overlay") == "" then return nil end -- remember, get_string returns "" if the key doesn't exist
|
||||
if not mcl_armor.is_trimmed(stack) then return nil end
|
||||
-- we need to get the part of the overlay image between the overlay begin ( and the trim name end _
|
||||
-- we COULD easily store this info in meta, but that would bloat the meta storage, as the same few values would be stored over and over again on every trimmed item
|
||||
-- this is fine here as this code gets only executed when you put armor and a trim in a smithing table
|
||||
|
@ -334,3 +334,9 @@ tt.register_snippet(function(itemstring, toolcaps, stack)
|
|||
local trim_name = full_overlay:match("%((.-)%_")
|
||||
return "Upgrade:\n " .. trim_name:gsub("^%l", string.upper) .. " Armor Trim"
|
||||
end)
|
||||
|
||||
function mcl_armor.is_trimmed(itemstack)
|
||||
-- this meta value will be there for every trimmed armor piece
|
||||
-- remember, get_string returns "" if the key doesn't exist
|
||||
return itemstack:get_meta():get_string("mcl_armor:trim_overlay") ~= ""
|
||||
end
|
|
@ -60,7 +60,7 @@ mcl_armor = {
|
|||
trims = {
|
||||
core_textures = {},
|
||||
blacklisted = {["mcl_armor:elytra"]=true, ["mcl_armor:elytra_enchanted"]=true},
|
||||
overlays = {"sentry","dune","coast","wild","tide","ward","vex","rib","snout","eye","spire"},
|
||||
overlays = {"sentry","dune","coast","wild","tide","ward","vex","rib","snout","eye","spire","silence","wayfinder"},
|
||||
colors = {["amethyst"]="#8246a5",["gold"]="#ce9627",["emerald"]="#1b9958",["copper"]="#c36447",["diamond"]="#5faed8",["iron"]="#938e88",["lapis"]="#1c306b",["netherite"]="#302a26",["quartz"]="#c9bcb9",["redstone"]="#af2c23"},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -44,3 +44,21 @@ minetest.register_craft({
|
|||
{"mcl_core:diamond","mcl_core:diamond","mcl_core:diamond"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = mod_registername .. "silence",
|
||||
recipe = {
|
||||
{"mcl_core:diamond","mcl_core:diamond","mcl_core:diamond"},
|
||||
{"mcl_core:diamond", mod_registername.."ward","mcl_core:diamond"},
|
||||
{"mcl_core:diamond","mcl_core:diamond","mcl_core:diamond"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = mod_registername .. "wayfinder",
|
||||
recipe = {
|
||||
{"mcl_core:diamond","mcl_core:diamond","mcl_core:diamond"},
|
||||
{"mcl_core:diamond", "mcl_maps:empty_map","mcl_core:diamond"},
|
||||
{"mcl_core:diamond","mcl_core:diamond","mcl_core:diamond"},
|
||||
}
|
||||
})
|
|
@ -251,7 +251,7 @@ local bamboo_def = {
|
|||
minetest.register_node(BAMBOO, bamboo_def)
|
||||
|
||||
local bamboo_top = table.copy(bamboo_def)
|
||||
bamboo_top.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
|
||||
bamboo_top.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
|
||||
bamboo_top.tiles = {"mcl_bamboo_endcap.png"}
|
||||
bamboo_top.drawtype = "plantlike_rooted" --"plantlike"
|
||||
--bamboo_top.paramtype2 = "meshoptions"
|
||||
|
@ -361,7 +361,7 @@ bamboo_one_def.selection_box = {
|
|||
{-0.05, -0.5, 0.285, -0.275, 0.5, 0.06},
|
||||
}
|
||||
}
|
||||
bamboo_one_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
|
||||
bamboo_one_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
|
||||
mcl_bamboo.mcl_log(dump(mcl_bamboo.bamboo_index))
|
||||
minetest.register_node(mcl_bamboo.bamboo_index[2], bamboo_one_def)
|
||||
local bamboo_two_def = table.copy(bamboo_def)
|
||||
|
@ -385,7 +385,7 @@ bamboo_two_def.selection_box = {
|
|||
{0.25, -0.5, 0.325, 0.025, 0.5, 0.100},
|
||||
}
|
||||
}
|
||||
bamboo_two_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
|
||||
bamboo_two_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
|
||||
minetest.register_node(mcl_bamboo.bamboo_index[3], bamboo_two_def)
|
||||
local bamboo_three_def = table.copy(bamboo_def)
|
||||
|
||||
|
@ -408,5 +408,5 @@ bamboo_three_def.selection_box = {
|
|||
{-0.125, -0.5, 0.125, -0.3125, 0.5, 0.3125},
|
||||
}
|
||||
}
|
||||
bamboo_three_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3}
|
||||
bamboo_three_def.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, dig_by_piston = 1, plant = 1, non_mycelium_plant = 1, flammable = 3}
|
||||
minetest.register_node(mcl_bamboo.bamboo_index[4], bamboo_three_def)
|
||||
|
|
|
@ -67,7 +67,7 @@ end
|
|||
|
||||
local BAMBOO_ENDCAP_NAME = "mcl_bamboo:bamboo_endcap"
|
||||
|
||||
-- For when I learn more about the pistons...
|
||||
-- check if supporting block is broken. pistons now break the bamboo plant.
|
||||
function mcl_bamboo.break_orphaned(pos)
|
||||
mcl_bamboo.mcl_log("Break_Orphaned called.")
|
||||
local node_below = minetest.get_node(vector.offset(pos, 0, -1, 0))
|
||||
|
|
|
@ -33,7 +33,7 @@ minetest.register_node("mcl_bells:bell", {
|
|||
"mcl_bells_bell_side.png",
|
||||
},
|
||||
is_ground_content = false,
|
||||
groups = {pickaxey=2, deco_block=1 },
|
||||
groups = {pickaxey=2, deco_block=1, dig_by_piston=1 },
|
||||
sounds = mcl_sounds.node_sound_metal_defaults(),
|
||||
_mcl_blast_resistance = 5,
|
||||
_mcl_hardness = 5,
|
||||
|
|
|
@ -67,12 +67,12 @@ local function register_filled_cauldron(water_level, description, liquid)
|
|||
local water_tex
|
||||
if liquid == "river_water" then
|
||||
id = id .. "r"
|
||||
water_tex = "default_water_source_animated.png^[verticalframe:16:0^[multiply:#0084FF"
|
||||
water_tex = "mcl_core_water_source_animation.png^[verticalframe:16:0^[multiply:#0084FF"
|
||||
elseif liquid == "lava" then
|
||||
id = id .. "_lava"
|
||||
water_tex = "default_lava_source_animated.png^[verticalframe:16:0"
|
||||
water_tex = "mcl_core_lava_source_animation.png^[verticalframe:16:0"
|
||||
else
|
||||
water_tex = "default_water_source_animated.png^[verticalframe:16:0^[multiply:#3F76E4"
|
||||
water_tex = "mcl_core_water_source_animation.png^[verticalframe:16:0^[multiply:#3F76E4"
|
||||
end
|
||||
minetest.register_node(id, {
|
||||
description = description,
|
||||
|
|
|
@ -406,7 +406,7 @@ mcl_core.register_snowed_node("mcl_core:dirt_with_grass_snow", "mcl_core:dirt_wi
|
|||
minetest.register_node("mcl_core:grass_path", {
|
||||
tiles = {"mcl_core_grass_path_top.png", "default_dirt.png", "mcl_core_grass_path_side.png"},
|
||||
description = S("Grass Path"),
|
||||
_doc_items_longdesc = S("Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block."),
|
||||
_doc_items_longdesc = S("Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created by right clicking with a shovel. A grass path turns into dirt when it is below a solid block or when shift+right clicked with a shovel."),
|
||||
drop = "mcl_core:dirt",
|
||||
is_ground_content = true,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||
|
@ -419,7 +419,7 @@ minetest.register_node("mcl_core:grass_path", {
|
|||
{-0.5, -0.5, -0.5, 0.5, 0.4375, 0.5},
|
||||
}
|
||||
},
|
||||
groups = {handy=1,shovely=1, cultivatable=2, dirtifies_below_solid=1, dirtifier=1, deco_block=1 },
|
||||
groups = {handy=1,shovely=1, cultivatable=2, dirtifies_below_solid=1, dirtifier=1, deco_block=1, path_remove_possible=1 },
|
||||
sounds = mcl_sounds.node_sound_dirt_defaults({
|
||||
footstep = {name="default_grass_footstep", gain=0.1},
|
||||
}),
|
||||
|
|
|
@ -11,12 +11,39 @@ local function rotate_climbable(pos, node, user, mode)
|
|||
return false
|
||||
end
|
||||
|
||||
---Updates the trapdoor above (if any).
|
||||
---
|
||||
---@param pos mt.Vector The position of the ladder.
|
||||
---@param event "place" | "destruct" The place or destruct event.
|
||||
function mcl_core.update_trapdoor(pos, event)
|
||||
local top_pos = vector.offset(pos, 0, 1, 0)
|
||||
local top_node = minetest.get_node_or_nil(top_pos)
|
||||
|
||||
if top_node and minetest.get_item_group(top_node.name, "trapdoor") == 2 then
|
||||
local new_name = top_node.name
|
||||
if event == "place" then
|
||||
new_name = string.gsub(new_name, "open$", "ladder")
|
||||
elseif event == "destruct" then
|
||||
new_name = string.gsub(new_name, "ladder$", "open")
|
||||
end
|
||||
|
||||
-- If node above is an opened trapdoor
|
||||
minetest.swap_node(top_pos, {
|
||||
name = new_name,
|
||||
param1 = top_node.param1,
|
||||
param2 = top_node.param2,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
-- TODO: Move ladders into their own API.
|
||||
minetest.register_node("mcl_core:ladder", {
|
||||
description = S("Ladder"),
|
||||
_doc_items_longdesc = S("A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns."),
|
||||
_doc_items_longdesc = S(
|
||||
"A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns."),
|
||||
drawtype = "signlike",
|
||||
is_ground_content = false,
|
||||
tiles = {"default_ladder.png"},
|
||||
tiles = { "default_ladder.png" },
|
||||
inventory_image = "default_ladder.png",
|
||||
wield_image = "default_ladder.png",
|
||||
paramtype = "light",
|
||||
|
@ -26,14 +53,21 @@ minetest.register_node("mcl_core:ladder", {
|
|||
climbable = true,
|
||||
node_box = {
|
||||
type = "wallmounted",
|
||||
wall_side = { -0.5, -0.5, -0.5, -7/16, 0.5, 0.5 },
|
||||
wall_side = { -0.5, -0.5, -0.5, -7 / 16, 0.5, 0.5 },
|
||||
},
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
wall_side = { -0.5, -0.5, -0.5, -7/16, 0.5, 0.5 },
|
||||
wall_side = { -0.5, -0.5, -0.5, -7 / 16, 0.5, 0.5 },
|
||||
},
|
||||
stack_max = 64,
|
||||
groups = {handy=1,axey=1, attached_node=1, deco_block=1, dig_by_piston=1},
|
||||
groups = {
|
||||
handy = 1,
|
||||
axey = 1,
|
||||
attached_node = 1,
|
||||
deco_block = 1,
|
||||
dig_by_piston = 1,
|
||||
ladder = 1
|
||||
},
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
node_placement_prediction = "",
|
||||
-- Restrict placement of ladders
|
||||
|
@ -53,7 +87,7 @@ minetest.register_node("mcl_core:ladder", {
|
|||
|
||||
-- Don't allow to place the ladder at particular nodes
|
||||
if (groups and (groups.glass or groups.leaves or groups.slab)) or
|
||||
node.name == "mcl_core:ladder" or node.name == "mcl_core:ice" or node.name == "mcl_nether:glowstone" or node.name == "mcl_ocean:sea_lantern" then
|
||||
node.name == "mcl_core:ladder" or node.name == "mcl_core:ice" or node.name == "mcl_nether:glowstone" or node.name == "mcl_ocean:sea_lantern" then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
|
@ -75,12 +109,17 @@ minetest.register_node("mcl_core:ladder", {
|
|||
|
||||
if success then
|
||||
if idef.sounds and idef.sounds.place then
|
||||
minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true)
|
||||
minetest.sound_play(idef.sounds.place, { pos = above, gain = 1 }, true)
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
|
||||
after_destruct = function(pos, old)
|
||||
mcl_core.update_trapdoor(pos, "destruct")
|
||||
end,
|
||||
after_place_node = function(pos)
|
||||
mcl_core.update_trapdoor(pos, "place")
|
||||
end,
|
||||
_mcl_blast_resistance = 0.4,
|
||||
_mcl_hardness = 0.4,
|
||||
on_rotate = rotate_climbable,
|
||||
|
@ -89,9 +128,10 @@ minetest.register_node("mcl_core:ladder", {
|
|||
|
||||
minetest.register_node("mcl_core:vine", {
|
||||
description = S("Vines"),
|
||||
_doc_items_longdesc = S("Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread."),
|
||||
_doc_items_longdesc = S(
|
||||
"Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread."),
|
||||
drawtype = "signlike",
|
||||
tiles = {"mcl_core_vine.png"},
|
||||
tiles = { "mcl_core_vine.png" },
|
||||
color = "#48B518",
|
||||
inventory_image = "mcl_core_vine.png",
|
||||
wield_image = "mcl_core_vine.png",
|
||||
|
@ -107,9 +147,19 @@ minetest.register_node("mcl_core:vine", {
|
|||
},
|
||||
stack_max = 64,
|
||||
groups = {
|
||||
handy = 1, axey = 1, shearsy = 1, swordy = 1, deco_block = 1,
|
||||
dig_by_piston = 1, destroy_by_lava_flow = 1, compostability = 50,
|
||||
flammable = 2, fire_encouragement = 15, fire_flammability = 100, foliage_palette_wallmounted = 1
|
||||
handy = 1,
|
||||
axey = 1,
|
||||
shearsy = 1,
|
||||
swordy = 1,
|
||||
deco_block = 1,
|
||||
dig_by_piston = 1,
|
||||
destroy_by_lava_flow = 1,
|
||||
compostability = 50,
|
||||
flammable = 2,
|
||||
fire_encouragement = 15,
|
||||
fire_flammability = 100,
|
||||
foliage_palette_wallmounted = 1,
|
||||
ladder = 1
|
||||
},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
drop = "",
|
||||
|
@ -151,7 +201,7 @@ minetest.register_node("mcl_core:vine", {
|
|||
|
||||
if success then
|
||||
if idef.sounds and idef.sounds.place then
|
||||
minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true)
|
||||
minetest.sound_play(idef.sounds.place, { pos = above, gain = 1 }, true)
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
|
@ -174,13 +224,19 @@ minetest.register_node("mcl_core:vine", {
|
|||
-- If dug, also dig a “dependant” vine below it.
|
||||
-- A vine is dependant if it hangs from this node and has no supporting block.
|
||||
on_dig = function(pos, node, digger)
|
||||
local below = vector.offset(pos,0,-1,0)
|
||||
local below = vector.offset(pos, 0, -1, 0)
|
||||
local belownode = minetest.get_node(below)
|
||||
minetest.node_dig(pos, node, digger)
|
||||
if belownode.name == node.name and (not mcl_core.check_vines_supported(below, belownode)) then
|
||||
minetest.registered_nodes[node.name].on_dig(below, node, digger)
|
||||
end
|
||||
end,
|
||||
after_destruct = function(pos, old)
|
||||
mcl_core.update_trapdoor(pos, "destruct")
|
||||
end,
|
||||
after_place_node = function(pos)
|
||||
mcl_core.update_trapdoor(pos, "place")
|
||||
end,
|
||||
|
||||
|
||||
_mcl_blast_resistance = 0.2,
|
||||
|
|
|
@ -18,17 +18,17 @@ end
|
|||
minetest.register_node("mcl_core:water_flowing", {
|
||||
description = S("Flowing Water"),
|
||||
_doc_items_create_entry = false,
|
||||
wield_image = "default_water_flowing_animated.png^[verticalframe:64:0",
|
||||
wield_image = "mcl_core_water_flow_animation.png^[verticalframe:64:0",
|
||||
drawtype = "flowingliquid",
|
||||
tiles = {"default_water_flowing_animated.png^[verticalframe:64:0"},
|
||||
tiles = {"mcl_core_water_flow_animation.png^[verticalframe:64:0"},
|
||||
special_tiles = {
|
||||
{
|
||||
image="default_water_flowing_animated.png",
|
||||
image="mcl_core_water_flow_animation.png",
|
||||
backface_culling=false,
|
||||
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1.5}
|
||||
},
|
||||
{
|
||||
image="default_water_flowing_animated.png",
|
||||
image="mcl_core_water_flow_animation.png",
|
||||
backface_culling=false,
|
||||
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1.5}
|
||||
},
|
||||
|
@ -71,12 +71,12 @@ S("• When water is directly below lava, the water turns into stone."),
|
|||
drawtype = "liquid",
|
||||
waving = 3,
|
||||
tiles = {
|
||||
{name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
|
||||
{name="mcl_core_water_source_animation.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
|
||||
},
|
||||
special_tiles = {
|
||||
-- New-style water source material (mostly unused)
|
||||
{
|
||||
name="default_water_source_animated.png",
|
||||
name="mcl_core_water_source_animation.png",
|
||||
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0},
|
||||
backface_culling = false,
|
||||
}
|
||||
|
@ -119,17 +119,17 @@ S("• When water is directly below lava, the water turns into stone."),
|
|||
minetest.register_node("mcl_core:lava_flowing", {
|
||||
description = S("Flowing Lava"),
|
||||
_doc_items_create_entry = false,
|
||||
wield_image = "default_lava_flowing_animated.png^[verticalframe:64:0",
|
||||
wield_image = "mcl_core_lava_flow_animation.png^[verticalframe:64:0",
|
||||
drawtype = "flowingliquid",
|
||||
tiles = {"default_lava_flowing_animated.png^[verticalframe:64:0"},
|
||||
tiles = {"mcl_core_lava_flow_animation.png^[verticalframe:64:0"},
|
||||
special_tiles = {
|
||||
{
|
||||
image="default_lava_flowing_animated.png",
|
||||
image="mcl_core_lava_flow_animation.png",
|
||||
backface_culling=false,
|
||||
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=6.6}
|
||||
},
|
||||
{
|
||||
image="default_lava_flowing_animated.png",
|
||||
image="mcl_core_lava_flow_animation.png",
|
||||
backface_culling=false,
|
||||
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=6.6}
|
||||
},
|
||||
|
@ -182,12 +182,12 @@ S("• When flowing water touches flowing lava either from above or horizontally
|
|||
S("• When lava is directly above water, the water turns into stone."),
|
||||
drawtype = "liquid",
|
||||
tiles = {
|
||||
{name="default_lava_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
|
||||
{name="mcl_core_lava_source_animation.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
|
||||
},
|
||||
special_tiles = {
|
||||
-- New-style lava source material (mostly unused)
|
||||
{
|
||||
name="default_lava_source_animated.png",
|
||||
name="mcl_core_lava_source_animation.png",
|
||||
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0},
|
||||
backface_culling = false,
|
||||
}
|
||||
|
|
|
@ -139,8 +139,8 @@ minetest.register_node("mcl_core:deadbush", {
|
|||
sunlight_propagates = true,
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
groups = {handy = 1, shearsy = 1, flammable = 3, attached_node = 1, plant = 1, non_mycelium_plant = 1, dig_by_water = 1,
|
||||
destroy_by_lava_flow = 1, deco_block = 1, fire_encouragement = 60, fire_flammability = 100},
|
||||
groups = {handy = 1, shearsy = 1, flammable = 3, attached_node = 1, plant = 1, non_mycelium_plant = 1, dig_by_piston = 1,
|
||||
dig_by_water = 1, destroy_by_lava_flow = 1, deco_block = 1, fire_encouragement = 60, fire_flammability = 100},
|
||||
drop = {
|
||||
max_items = 1,
|
||||
items = {
|
||||
|
|
|
@ -67,12 +67,23 @@ function mcl_doors:register_trapdoor(name, def)
|
|||
local tmp_node
|
||||
-- Close
|
||||
if minetest.get_item_group(me.name, "trapdoor") == 2 then
|
||||
minetest.sound_play(def.sound_close, {pos = pos, gain = 0.3, max_hear_distance = 16}, true)
|
||||
tmp_node = {name=name, param1=me.param1, param2=me.param2}
|
||||
-- Open
|
||||
minetest.sound_play(def.sound_close, { pos = pos, gain = 0.3, max_hear_distance = 16 }, true)
|
||||
tmp_node = { name = name, param1 = me.param1, param2 = me.param2 }
|
||||
-- Open
|
||||
else
|
||||
minetest.sound_play(def.sound_open, {pos = pos, gain = 0.3, max_hear_distance = 16}, true)
|
||||
tmp_node = {name=name.."_open", param1=me.param1, param2=me.param2}
|
||||
minetest.sound_play(def.sound_open, { pos = pos, gain = 0.3, max_hear_distance = 16 }, true)
|
||||
|
||||
local bottom_node = minetest.get_node_or_nil(vector.offset(pos, 0, -1, 0))
|
||||
local name_end = "_open"
|
||||
|
||||
-- Checking if there is something underneath the trapdoor
|
||||
if bottom_node then
|
||||
local is_ladder = minetest.get_item_group(bottom_node.name, "ladder")
|
||||
if is_ladder > 0 then
|
||||
name_end = "_ladder"
|
||||
end
|
||||
end
|
||||
tmp_node = { name = name .. name_end, param1 = me.param1, param2 = me.param2 }
|
||||
end
|
||||
minetest.set_node(pos, tmp_node)
|
||||
end
|
||||
|
@ -89,20 +100,22 @@ function mcl_doors:register_trapdoor(name, def)
|
|||
longdesc = def._doc_items_longdesc
|
||||
if not longdesc then
|
||||
if def.only_redstone_can_open then
|
||||
longdesc = S("Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can only be opened or closed by redstone power.")
|
||||
longdesc = S(
|
||||
"Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can only be opened or closed by redstone power.")
|
||||
else
|
||||
longdesc = S("Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can be opened or closed by hand or redstone power.")
|
||||
longdesc = S(
|
||||
"Trapdoors are horizontal barriers which can be opened or closed and climbed like a ladder when open. They occupy the upper or lower part of a block, depending on how they have been placed. This trapdoor can be opened or closed by hand or redstone power.")
|
||||
end
|
||||
end
|
||||
usagehelp = def._doc_items_usagehelp
|
||||
if not usagehelp and not def.only_redstone_can_open then
|
||||
usagehelp = S("To open or close this trapdoor, rightclick it or send a redstone signal to it.")
|
||||
end
|
||||
if def.only_redstone_can_open then
|
||||
tt_help = S("Openable by redstone power")
|
||||
else
|
||||
tt_help = S("Openable by players and redstone power")
|
||||
end
|
||||
if def.only_redstone_can_open then
|
||||
tt_help = S("Openable by redstone power")
|
||||
else
|
||||
tt_help = S("Openable by players and redstone power")
|
||||
end
|
||||
|
||||
-- Closed trapdoor
|
||||
|
||||
|
@ -128,7 +141,7 @@ function mcl_doors:register_trapdoor(name, def)
|
|||
_doc_items_usagehelp = usagehelp,
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_closed,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true,
|
||||
use_texture_alpha = "clip",
|
||||
inventory_image = def.inventory_image,
|
||||
wield_image = def.wield_image,
|
||||
is_ground_content = false,
|
||||
|
@ -143,13 +156,15 @@ function mcl_doors:register_trapdoor(name, def)
|
|||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-8/16, -8/16, -8/16, 8/16, -5/16, 8/16},},
|
||||
{ -8 / 16, -8 / 16, -8 / 16, 8 / 16, -5 / 16, 8 / 16 }, },
|
||||
},
|
||||
mesecons = {
|
||||
effector = {
|
||||
action_on = (function(pos, node)
|
||||
punch(pos)
|
||||
end),
|
||||
}
|
||||
},
|
||||
mesecons = {effector = {
|
||||
action_on = (function(pos, node)
|
||||
punch(pos)
|
||||
end),
|
||||
}},
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local p0 = pointed_thing.under
|
||||
local p1 = pointed_thing.above
|
||||
|
@ -164,7 +179,7 @@ function mcl_doors:register_trapdoor(name, def)
|
|||
|
||||
--local origname = itemstack:get_name()
|
||||
if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5)
|
||||
or (fpos < -0.5 and fpos > -0.999999999) then
|
||||
or (fpos < -0.5 and fpos > -0.999999999) then
|
||||
param2 = param2 + 20
|
||||
if param2 == 21 then
|
||||
param2 = 23
|
||||
|
@ -193,16 +208,44 @@ function mcl_doors:register_trapdoor(name, def)
|
|||
|
||||
groups_open.trapdoor = 2
|
||||
groups_open.not_in_creative_inventory = 1
|
||||
minetest.register_node(name.."_open", {
|
||||
-- Non-climbable opened
|
||||
minetest.register_node(name .. "_open", {
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_open,
|
||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true,
|
||||
use_texture_alpha = "clip",
|
||||
is_ground_content = false,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
pointable = true,
|
||||
groups = groups_open,
|
||||
_mcl_hardness = def._mcl_hardness,
|
||||
_mcl_blast_resistance = def._mcl_blast_resistance,
|
||||
sounds = def.sounds,
|
||||
drop = name,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, 5 / 16, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
on_rightclick = on_rightclick,
|
||||
mesecons = {
|
||||
effector = {
|
||||
action_off = (function(pos, node)
|
||||
punch(pos)
|
||||
end),
|
||||
}
|
||||
},
|
||||
on_rotate = on_rotate,
|
||||
})
|
||||
|
||||
-- Climbable opened
|
||||
minetest.register_node(name .. "_ladder", {
|
||||
drawtype = "nodebox",
|
||||
tiles = tiles_open,
|
||||
use_texture_alpha = "clip",
|
||||
is_ground_content = false,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
-- TODO: Implement Minecraft behaviour: Climbable if directly above
|
||||
-- ladder w/ matching orientation.
|
||||
-- Current behavour: Always climbable
|
||||
climbable = true,
|
||||
sunlight_propagates = true,
|
||||
pointable = true,
|
||||
|
@ -213,19 +256,20 @@ function mcl_doors:register_trapdoor(name, def)
|
|||
drop = name,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, 5/16, 0.5, 0.5, 0.5}
|
||||
fixed = { -0.5, -0.5, 5 / 16, 0.5, 0.5, 0.5 }
|
||||
},
|
||||
on_rightclick = on_rightclick,
|
||||
mesecons = {effector = {
|
||||
action_off = (function(pos, node)
|
||||
punch(pos)
|
||||
end),
|
||||
}},
|
||||
mesecons = {
|
||||
effector = {
|
||||
action_off = (function(pos, node)
|
||||
punch(pos)
|
||||
end),
|
||||
}
|
||||
},
|
||||
on_rotate = on_rotate,
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doc") then
|
||||
doc.add_entry_alias("nodes", name, "nodes", name.."_open")
|
||||
doc.add_entry_alias("nodes", name, "nodes", name .. "_open")
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -180,16 +180,18 @@ function mcl_enchanting.combine(itemstack, combine_with)
|
|||
return false
|
||||
end
|
||||
local enchantments = mcl_enchanting.get_enchantments(itemstack)
|
||||
local any_new_enchantment = false
|
||||
for enchantment, combine_level in pairs(mcl_enchanting.get_enchantments(combine_with)) do
|
||||
local enchantment_def = mcl_enchanting.enchantments[enchantment]
|
||||
local enchantment_level = enchantments[enchantment]
|
||||
if enchantment_level then
|
||||
if enchantment_level then -- The enchantment already exist in the provided item
|
||||
if enchantment_level == combine_level then
|
||||
enchantment_level = math.min(enchantment_level + 1, enchantment_def.max_level)
|
||||
else
|
||||
enchantment_level = math.max(enchantment_level, combine_level)
|
||||
end
|
||||
elseif mcl_enchanting.item_supports_enchantment(itemname, enchantment) then
|
||||
any_new_enchantment = any_new_enchantment or ( enchantment_level ~= enchantments[enchantment] )
|
||||
elseif mcl_enchanting.item_supports_enchantment(itemname, enchantment) then -- this is a new enchantement to try to add
|
||||
local supported = true
|
||||
for incompatible in pairs(enchantment_def.incompatible) do
|
||||
if enchantments[incompatible] then
|
||||
|
@ -199,24 +201,18 @@ function mcl_enchanting.combine(itemstack, combine_with)
|
|||
end
|
||||
if supported then
|
||||
enchantment_level = combine_level
|
||||
any_new_enchantment = true
|
||||
end
|
||||
end
|
||||
if enchantment_level and enchantment_level > 0 then
|
||||
enchantments[enchantment] = enchantment_level
|
||||
end
|
||||
end
|
||||
local any_enchantment = false
|
||||
for enchantment, enchantment_level in pairs(enchantments) do
|
||||
if enchantment_level > 0 then
|
||||
any_enchantment = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if any_enchantment then
|
||||
if any_new_enchantment then
|
||||
itemstack:set_name(enchanted_itemname)
|
||||
mcl_enchanting.set_enchantments(itemstack, enchantments)
|
||||
end
|
||||
mcl_enchanting.set_enchantments(itemstack, enchantments)
|
||||
return true
|
||||
return any_new_enchantment
|
||||
end
|
||||
|
||||
function mcl_enchanting.enchantments_snippet(_, _, itemstack)
|
||||
|
|
|
@ -128,8 +128,6 @@ local fortune_wheat_seed_drop = {
|
|||
overwrite = true,
|
||||
}
|
||||
|
||||
-- CHECKME: How does tall grass behave when pushed by a piston?
|
||||
|
||||
--- Tall Grass ---
|
||||
local def_tallgrass = {
|
||||
description = S("Tall Grass"),
|
||||
|
@ -155,7 +153,7 @@ local def_tallgrass = {
|
|||
groups = {
|
||||
handy = 1, shearsy = 1, attached_node = 1, deco_block = 1,
|
||||
plant = 1, place_flowerlike = 2, non_mycelium_plant = 1,
|
||||
flammable = 3, fire_encouragement = 60, fire_flammability = 100,
|
||||
flammable = 3, fire_encouragement = 60, fire_flammability = 10, dig_by_piston = 1,
|
||||
dig_by_water = 1, destroy_by_lava_flow = 1, compostability = 30, grass_palette = 1
|
||||
},
|
||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||
|
@ -252,7 +250,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
|||
paramtype2 = paramtype2,
|
||||
palette = palette,
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
buildable_to = false,
|
||||
drop = drop_bottom,
|
||||
_mcl_shears_drop = shears_drop,
|
||||
_mcl_fortune_drop = fortune_drop,
|
||||
|
@ -354,7 +352,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
|||
paramtype2 = paramtype2,
|
||||
palette = palette,
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
buildable_to = false,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -selbox_radius, -0.5, -selbox_radius, selbox_radius, selbox_top_height, selbox_radius },
|
||||
|
|
|
@ -118,7 +118,7 @@ function mcl_lanterns.register_lantern(name, def)
|
|||
node_placement_prediction = "",
|
||||
sunlight_propagates = true,
|
||||
light_source = def.light_level,
|
||||
groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1},
|
||||
groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1, dig_by_piston=1},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
|
|
|
@ -183,7 +183,7 @@ mcl_flowerpots.register_potted_flower("mcl_mangrove:propagule", {
|
|||
image = "mcl_mangrove_propagule.png",
|
||||
})
|
||||
|
||||
local water_tex = "default_water_source_animated.png^[verticalframe:16:0^[multiply:#3F76E4"
|
||||
local water_tex = "mcl_core_water_source_animation.png^[verticalframe:16:0^[multiply:#3F76E4"
|
||||
|
||||
local wlroots = {
|
||||
description = S("water logged mangrove roots"),
|
||||
|
@ -194,12 +194,12 @@ local wlroots = {
|
|||
S("These cannot be crafted yet only occure when get in contact of water."),
|
||||
_doc_items_hidden = false,
|
||||
tiles = {
|
||||
{name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}}
|
||||
{name="mcl_core_water_source_animation.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}}
|
||||
},
|
||||
special_tiles = {
|
||||
-- New-style water source material (mostly unused)
|
||||
{
|
||||
name="default_water_source_animated.png",
|
||||
name="mcl_core_water_source_animation.png",
|
||||
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0},
|
||||
backface_culling = false,
|
||||
}
|
||||
|
@ -221,7 +221,7 @@ local wlroots = {
|
|||
liquids_pointable = true,
|
||||
drop = "mcl_mangrove:mangrove_roots",
|
||||
groups = {
|
||||
handy = 1, hoey = 1, water=3, liquid=3, puts_out_fire=1, dig_by_piston = 1, deco_block = 1, not_in_creative_inventory=1 },
|
||||
handy = 1, hoey = 1, water=3, liquid=3, puts_out_fire=1, dig_by_piston = 1, deco_block = 1, waterlogged = 1, not_in_creative_inventory=1 },
|
||||
_mcl_blast_resistance = 100,
|
||||
_mcl_hardness = -1, -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode
|
||||
on_construct = function(pos)
|
||||
|
@ -245,7 +245,7 @@ local rwlroots = table.copy(wlroots)
|
|||
-- FIXME luacheck complains that this is a repeated definition of water_tex.
|
||||
-- Maybe the tiles definition below should be replaced with the animated tile
|
||||
-- definition as per above?
|
||||
water_tex = "default_water_source_animated.png^[verticalframe:16:0^[multiply:#0084FF"
|
||||
water_tex = "mcl_core_water_source_animation.png^[verticalframe:16:0^[multiply:#0084FF"
|
||||
rwlroots.tiles = {
|
||||
"("..water_tex..")^mcl_mangrove_roots_top.png",
|
||||
"("..water_tex..")^mcl_mangrove_roots_side.png",
|
||||
|
|
|
@ -4664,7 +4664,7 @@
|
|||
126,
|
||||
164
|
||||
],
|
||||
"default_water_source_animated.png": [
|
||||
"mcl_core_water_source_animation.png": [
|
||||
37,
|
||||
98,
|
||||
129
|
||||
|
@ -4984,7 +4984,7 @@
|
|||
79,
|
||||
64
|
||||
],
|
||||
"default_water_flowing_animated.png": [
|
||||
"mcl_core_water_flow_animation.png": [
|
||||
38,
|
||||
101,
|
||||
129
|
||||
|
@ -5009,7 +5009,7 @@
|
|||
89,
|
||||
86
|
||||
],
|
||||
"default_lava_flowing_animated.png": [
|
||||
"mcl_core_lava_flow_animation.png": [
|
||||
177,
|
||||
42,
|
||||
16
|
||||
|
@ -5059,7 +5059,7 @@
|
|||
142,
|
||||
123
|
||||
],
|
||||
"default_lava_source_animated.png": [
|
||||
"mcl_core_lava_source_animation.png": [
|
||||
180,
|
||||
45,
|
||||
17
|
||||
|
@ -6604,16 +6604,6 @@
|
|||
56,
|
||||
64
|
||||
],
|
||||
"default_river_water_flowing_animated.png": [
|
||||
38,
|
||||
123,
|
||||
130
|
||||
],
|
||||
"default_river_water_source_animated.png": [
|
||||
37,
|
||||
120,
|
||||
130
|
||||
],
|
||||
"mcl_armor_stand_item.png": [
|
||||
134,
|
||||
114,
|
||||
|
@ -9009,17 +8999,17 @@
|
|||
127,
|
||||
113
|
||||
],
|
||||
"bucket_river_water.png": [
|
||||
"mcl_buckets_river_water_bucket.png": [
|
||||
139,
|
||||
152,
|
||||
155
|
||||
],
|
||||
"bucket_water.png": [
|
||||
"mcl_buckets_water_bucket.png": [
|
||||
139,
|
||||
147,
|
||||
155
|
||||
],
|
||||
"bucket.png": [
|
||||
"mcl_buckets_bucket.png": [
|
||||
147,
|
||||
143,
|
||||
139
|
||||
|
|
|
@ -267,7 +267,8 @@ function kelp.next_height(pos, node, pos_tip, node_tip, submerged, downward_flow
|
|||
-- Flowing liquid: Grow 1 step, but also turn the tip node into a liquid source.
|
||||
if downward_flowing then
|
||||
local alt_liq = mt_registered_nodes[node_tip.name].liquid_alternative_source
|
||||
if alt_liq then
|
||||
local alt_liq_accessible = mt_get_item_group(node_tip.name,"waterlogged") -- returns 0 if it isn't waterlogged.
|
||||
if alt_liq and not alt_liq_accessible then
|
||||
mt_set_node(pos_tip, {name=alt_liq})
|
||||
end
|
||||
end
|
||||
|
|
|
@ -215,9 +215,23 @@ minetest.register_node("mcl_sculk:vein", {
|
|||
type = "wallmounted",
|
||||
},
|
||||
groups = {
|
||||
handy = 1, axey = 1, shearsy = 1, swordy = 1, deco_block = 1,
|
||||
dig_by_piston = 1, destroy_by_lava_flow = 1, sculk = 1, dig_by_water = 1,
|
||||
handy = 1,
|
||||
axey = 1,
|
||||
shearsy = 1,
|
||||
swordy = 1,
|
||||
deco_block = 1,
|
||||
dig_by_piston = 1,
|
||||
destroy_by_lava_flow = 1,
|
||||
sculk = 1,
|
||||
dig_by_water = 1,
|
||||
ladder = 1
|
||||
},
|
||||
after_destruct = function(pos, old)
|
||||
mcl_core.update_trapdoor(pos, "destruct")
|
||||
end,
|
||||
after_place_node = function(pos)
|
||||
mcl_core.update_trapdoor(pos, "place")
|
||||
end,
|
||||
sounds = sounds,
|
||||
drop = "",
|
||||
_mcl_shears_drop = true,
|
||||
|
|
|
@ -85,7 +85,7 @@ end
|
|||
mcl_signs = {}
|
||||
|
||||
-- GLOBALS
|
||||
mcl_signs.sign_groups = { handy = 1, axey = 1, deco_block = 1, material_wood = 1, attached_node = 1, dig_by_piston = 1, flammable = -1 }
|
||||
mcl_signs.sign_groups = { handy = 1, axey = 1, deco_block = 1, material_wood = 1, attached_node = 1, flammable = -1 }
|
||||
--- colors used for wools.
|
||||
mcl_signs.mcl_wool_colors = {
|
||||
unicolor_white = "#FFFFFF",
|
||||
|
@ -764,6 +764,15 @@ function mcl_signs.register_sign (modname, color, _name, ttsign)
|
|||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign22_5" .. _name, 1 })
|
||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
||||
|
||||
-- register as unpushable
|
||||
if minetest.get_modpath("mesecons_mvps") then
|
||||
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
|
||||
end
|
||||
end
|
||||
|
||||
--- The same as register_sign, except caller defines the textures. Note, there is a greyscale version of the sign,
|
||||
|
@ -1002,6 +1011,14 @@ function mcl_signs.register_sign_custom (modname, _name, tiles, color, inventory
|
|||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
||||
|
||||
-- register as unpushable
|
||||
if minetest.get_modpath("mesecons_mvps") then
|
||||
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
|
||||
end
|
||||
end
|
||||
|
||||
--- Override an existing sign, tint the textures, and gives it an unique node name. Creates both wall and standing signs.
|
||||
|
@ -1234,6 +1251,15 @@ function mcl_signs.reregister_sign (modname, color, _name, ttsign)
|
|||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign22_5" .. _name, 1 })
|
||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
||||
|
||||
-- register as unpushable
|
||||
if minetest.get_modpath("mesecons_mvps") then
|
||||
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
|
||||
end
|
||||
end
|
||||
|
||||
--- The same as reregister_sign, except caller defines the textures. Note, there is a greyscale version of the sign,
|
||||
|
@ -1469,6 +1495,14 @@ function mcl_signs.reregister_sign_custom (modname, _name, tiles, color, invento
|
|||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign45" .. _name, 2 })
|
||||
table.insert(mcl_signs.standing_rotation_levels, { "mcl_signs:standing_sign67_5" .. _name, 3 })
|
||||
|
||||
-- register as unpushable
|
||||
if minetest.get_modpath("mesecons_mvps") then
|
||||
mesecon.register_mvps_stopper("mcl_signs:wall_sign" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign22_5" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign45" .. _name)
|
||||
mesecon.register_mvps_stopper("mcl_signs:standing_sign67_5" .. _name)
|
||||
end
|
||||
end
|
||||
|
||||
--- Usage: Call this with the mod's name, the wood's item string (for the planks), and with the sign's suffix.
|
||||
|
|
|
@ -90,6 +90,17 @@ local smithing_materials = {
|
|||
["mcl_nether:quartz"] = "quartz"
|
||||
}
|
||||
|
||||
local achievement_trims = {
|
||||
["mcl_armor:spire"] = true,
|
||||
["mcl_armor:snout"] = true,
|
||||
["mcl_armor:rib"] = true,
|
||||
["mcl_armor:ward"] = true,
|
||||
["mcl_armor:silence"] = true,
|
||||
["mcl_armor:vex"] = true,
|
||||
["mcl_armor:tide"] = true,
|
||||
["mcl_armor:wayfinder"] = true
|
||||
}
|
||||
|
||||
function mcl_smithing_table.upgrade_trimmed(itemstack, color_mineral, template)
|
||||
--get information required
|
||||
local material_name = color_mineral:get_name()
|
||||
|
@ -156,16 +167,19 @@ minetest.register_node("mcl_smithing_table:table", {
|
|||
end,
|
||||
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
local stackname = stack:get_name()
|
||||
local def = stack:get_definition()
|
||||
if
|
||||
listname == "upgrade_item"
|
||||
and string.find(stack:get_name(),"mcl_armor:") -- allow any armor piece to go in (in case the player wants to trim them)
|
||||
and not mcl_armor.trims.blacklisted[stack:get_name()]
|
||||
and def._mcl_armor_element -- allow any armor piece to go in (in case the player wants to trim them)
|
||||
and not mcl_armor.trims.blacklisted[stackname]
|
||||
or def._mcl_upgradable -- for diamond tools
|
||||
|
||||
or listname == "mineral"
|
||||
and mcl_smithing_table.is_smithing_mineral(stack:get_name())
|
||||
and mcl_smithing_table.is_smithing_mineral(stackname)
|
||||
|
||||
or listname == "template"
|
||||
and string.find(stack:get_name(),"mcl_armor")
|
||||
and string.find(stackname, "mcl_armor")
|
||||
then
|
||||
return stack:get_count()
|
||||
end
|
||||
|
@ -189,19 +203,43 @@ minetest.register_node("mcl_smithing_table:table", {
|
|||
end
|
||||
|
||||
if listname == "upgraded_item" then
|
||||
-- ToDo: make epic sound
|
||||
minetest.sound_play("mcl_smithing_table_upgrade", { pos = pos, max_hear_distance = 16 })
|
||||
|
||||
if stack:get_name() == "mcl_farming:hoe_netherite" then
|
||||
awards.unlock(player:get_player_name(), "mcl:seriousDedication")
|
||||
elseif mcl_armor.is_trimmed(stack) then
|
||||
local template_name = inv:get_stack("template", 1):get_name()
|
||||
local playername = player:get_player_name()
|
||||
awards.unlock(playername, "mcl:trim")
|
||||
|
||||
if not awards.players[playername].unlocked["mcl:lots_of_trimming"] and achievement_trims[template_name] then
|
||||
local meta = player:get_meta()
|
||||
local used_achievement_trims = minetest.deserialize(meta:get_string("mcl_smithing_table:achievement_trims")) or {}
|
||||
if not used_achievement_trims[template_name] then
|
||||
used_achievement_trims[template_name] = true
|
||||
end
|
||||
|
||||
local used_all = true
|
||||
for name, _ in pairs(achievement_trims) do
|
||||
if not used_achievement_trims[name] then
|
||||
used_all = false
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if used_all then
|
||||
awards.unlock(playername, "mcl:lots_of_trimming")
|
||||
else
|
||||
meta:set_string("mcl_smithing_table:achievement_trims", minetest.serialize(used_achievement_trims))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
take_item("upgrade_item")
|
||||
take_item("mineral")
|
||||
take_item("template")
|
||||
|
||||
-- ToDo: make epic sound
|
||||
minetest.sound_play("mcl_smithing_table_upgrade", { pos = pos, max_hear_distance = 16 })
|
||||
end
|
||||
if listname == "upgraded_item" then
|
||||
if stack:get_name() == "mcl_farming:hoe_netherite" then
|
||||
awards.unlock(player:get_player_name(), "mcl:seriousDedication")
|
||||
end
|
||||
end
|
||||
|
||||
reset_upgraded_item(pos)
|
||||
end,
|
||||
|
||||
|
|
|
@ -155,7 +155,7 @@ minetest.register_node("mcl_sponges:sponge_wet", {
|
|||
buildable_to = false,
|
||||
stack_max = 64,
|
||||
sounds = mcl_sounds.node_sound_dirt_defaults(),
|
||||
groups = {handy=1, hoey=1, building_block=1},
|
||||
groups = {handy=1, hoey=1, waterlogged = 1, building_block=1},
|
||||
on_place = place_wet_sponge,
|
||||
_mcl_blast_resistance = 0.6,
|
||||
_mcl_hardness = 0.6,
|
||||
|
@ -175,7 +175,7 @@ if minetest.get_modpath("mclx_core") then
|
|||
buildable_to = false,
|
||||
stack_max = 64,
|
||||
sounds = mcl_sounds.node_sound_dirt_defaults(),
|
||||
groups = {handy=1, building_block=1},
|
||||
groups = {handy=1, waterlogged = 1, building_block=1},
|
||||
on_place = place_wet_sponge,
|
||||
_mcl_blast_resistance = 0.6,
|
||||
_mcl_hardness = 0.6,
|
||||
|
|
|
@ -53,13 +53,27 @@ local function get_random_effect()
|
|||
return effects[keys[math.random(#keys)]]
|
||||
end
|
||||
|
||||
local function eat_stew(itemstack, placer, pointed_thing)
|
||||
local function eat_stew(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type == "node" then
|
||||
if user and not user:get_player_control().sneak then
|
||||
-- Use pointed node's on_rightclick function first, if present
|
||||
local node = minetest.get_node(pointed_thing.under)
|
||||
if user and not user:get_player_control().sneak then
|
||||
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
|
||||
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif pointed_thing.type == "object" then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local e = itemstack:get_meta():get_string("effect")
|
||||
local f = effects[e]
|
||||
if not f then
|
||||
f = get_random_effect()
|
||||
end
|
||||
if f(itemstack,placer,pointed_thing) then
|
||||
if f(itemstack, user, pointed_thing) then
|
||||
return "mcl_core:bowl"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -165,12 +165,36 @@ local make_grass_path = function(itemstack, placer, pointed_thing)
|
|||
end
|
||||
end
|
||||
|
||||
-- Only make grass path if tool used on side or top of target node
|
||||
-- Only make or remove grass path if tool used on side or top of target node
|
||||
if pointed_thing.above.y < pointed_thing.under.y then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
if (minetest.get_item_group(node.name, "path_creation_possible") == 1) then
|
||||
-- Remove grass paths
|
||||
if (minetest.get_item_group(node.name, "path_remove_possible") == 1) and placer:get_player_control().sneak then
|
||||
local above = table.copy(pointed_thing.under)
|
||||
above.y = above.y + 1
|
||||
if minetest.get_node(above).name == "air" then
|
||||
if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then
|
||||
minetest.record_protection_violation(pointed_thing.under, placer:get_player_name())
|
||||
return itemstack
|
||||
end
|
||||
|
||||
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
||||
-- Add wear (as if digging a shovely node)
|
||||
local toolname = itemstack:get_name()
|
||||
local wear = mcl_autogroup.get_wear(toolname, "shovely")
|
||||
if wear then
|
||||
itemstack:add_wear(wear)
|
||||
end
|
||||
end
|
||||
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above, max_hear_distance = 16}, true)
|
||||
minetest.swap_node(pointed_thing.under, {name="mcl_core:dirt"})
|
||||
end
|
||||
end
|
||||
|
||||
-- Make grass paths
|
||||
if (minetest.get_item_group(node.name, "path_creation_possible") == 1) and not placer:get_player_control().sneak then
|
||||
local above = table.copy(pointed_thing.under)
|
||||
above.y = above.y + 1
|
||||
if minetest.get_node(above).name == "air" then
|
||||
|
|
|
@ -290,6 +290,10 @@ fix_doubleplants (Mcimport double plant fixes) bool true
|
|||
# Allow players to create Minecraft-like maps.
|
||||
enable_real_maps (Enable Real Maps) bool true
|
||||
|
||||
# Enable workarounds for faulty mob navigation.
|
||||
# Hack 1: teleport golems home if they are very far from home
|
||||
mcl_mob_allow_nav_hacks (Mob navigation hacks) bool false
|
||||
|
||||
[Additional Features]
|
||||
# Enable Bookshelf inventories
|
||||
mcl_bookshelf_inventories (Enable bookshelf inventories) bool true
|
||||
|
|
Before Width: | Height: | Size: 248 B After Width: | Height: | Size: 248 B |
Before Width: | Height: | Size: 990 B After Width: | Height: | Size: 990 B |
Before Width: | Height: | Size: 854 B After Width: | Height: | Size: 854 B |
Before Width: | Height: | Size: 551 B After Width: | Height: | Size: 551 B |
After Width: | Height: | Size: 279 B |
After Width: | Height: | Size: 302 B |
After Width: | Height: | Size: 617 B |
After Width: | Height: | Size: 529 B |
After Width: | Height: | Size: 641 B |
After Width: | Height: | Size: 238 B |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 390 B |
After Width: | Height: | Size: 321 B |
After Width: | Height: | Size: 4.3 KiB |
|
@ -7,9 +7,9 @@ Source path,Source file,Target path,Target file,xs,ys,xl,yl,xt,yt,Blacklisted?
|
|||
/assets/minecraft/textures/gui,icons.png,/mods/HUD/hudbars/textures,hudbars_icon_breath.png,16,18,9,9,0,0,y
|
||||
/assets/minecraft/textures/gui,icons.png,/mods/HUD/mcl_base_textures/textures,heart.png,52,0,9,9,0,0,y
|
||||
/assets/minecraft/textures/gui,icons.png,/mods/HUD/mcl_base_textures/textures,bubble.png,16,18,9,9,0,0,y
|
||||
/assets/minecraft/textures/items,bucket_empty.png,/mods/ITEMS/mcl_buckets/textures,bucket.png,,,,,,,
|
||||
/assets/minecraft/textures/items,bucket_water.png,/mods/ITEMS/mcl_buckets/textures,bucket_water.png,,,,,,,
|
||||
/assets/minecraft/textures/items,bucket_water.png,/mods/ITEMS/mcl_buckets/textures,bucket_river_water.png,,,,,,,
|
||||
/assets/minecraft/textures/items,bucket_empty.png,/mods/ITEMS/mcl_buckets/textures,mcl_buckets_bucket.png,,,,,,,
|
||||
/assets/minecraft/textures/items,bucket_water.png,/mods/ITEMS/mcl_buckets/textures,mcl_buckets_water_bucket.png,,,,,,,
|
||||
/assets/minecraft/textures/items,bucket_water.png,/mods/ITEMS/mcl_buckets/textures,mcl_buckets_river_water_bucket.png,,,,,,,
|
||||
/assets/minecraft/textures/items,bucket_lava.png,/mods/ITEMS/mcl_buckets/textures,mcl_buckets_lava_bucket.png,,,,,,,
|
||||
/assets/minecraft/textures/items,item_frame.png,/mods/ITEMS/mcl_itemframes/textures,mcl_itemframes_item_frame.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,anvil_base.png,/mods/ITEMS/mcl_anvils/textures,mcl_anvils_anvil_base.png,,,,,,,
|
||||
|
@ -171,8 +171,8 @@ Source path,Source file,Target path,Target file,xs,ys,xl,yl,xt,yt,Blacklisted?
|
|||
/assets/minecraft/textures/blocks,log_jungle_top.png,/mods/ITEMS/mcl_core/textures,default_jungletree_top.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,planks_jungle.png,/mods/ITEMS/mcl_core/textures,default_junglewood.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,ladder.png,/mods/ITEMS/mcl_core/textures,default_ladder.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,lava_still.png,/mods/ITEMS/mcl_core/textures,default_lava_source_animated.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,lava_flow.png,/mods/ITEMS/mcl_core/textures,default_lava_flowing_animated.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,lava_still.png,/mods/ITEMS/mcl_core/textures,mcl_core_lava_source_animation.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,lava_flow.png,/mods/ITEMS/mcl_core/textures,mcl_core_lava_flow_animation.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,cobblestone_mossy.png,/mods/ITEMS/mcl_core/textures,default_mossycobble.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,obsidian.png,/mods/ITEMS/mcl_core/textures,default_obsidian.png,,,,,,,
|
||||
/assets/minecraft/textures/items,paper.png,/mods/ITEMS/mcl_core/textures,default_paper.png,,,,,,,
|
||||
|
@ -187,10 +187,8 @@ Source path,Source file,Target path,Target file,xs,ys,xl,yl,xt,yt,Blacklisted?
|
|||
/assets/minecraft/textures/blocks,stone.png,/mods/ITEMS/mcl_core/textures,default_stone.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,log_oak.png,/mods/ITEMS/mcl_core/textures,default_tree.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,log_oak_top.png,/mods/ITEMS/mcl_core/textures,default_tree_top.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,water_still.png,/mods/ITEMS/mcl_core/textures,default_water_source_animated.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,water_flow.png,/mods/ITEMS/mcl_core/textures,default_water_flowing_animated.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,water_still.png,/mods/ITEMS/mcl_core/textures,default_river_water_source_animated.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,water_flow.png,/mods/ITEMS/mcl_core/textures,default_river_water_flowing_animated.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,water_still.png,/mods/ITEMS/mcl_core/textures,mcl_core_water_source_animation.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,water_flow.png,/mods/ITEMS/mcl_core/textures,mcl_core_water_flow_animation.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,planks_oak.png,/mods/ITEMS/mcl_core/textures,default_wood.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,stone_andesite.png,/mods/ITEMS/mcl_core/textures,mcl_core_andesite.png,,,,,,,
|
||||
/assets/minecraft/textures/blocks,stone_andesite_smooth.png,/mods/ITEMS/mcl_core/textures,mcl_core_andesite_smooth.png,,,,,,,
|
||||
|
|
|