diff --git a/mods/ENTITIES/mcl_burning/api.lua b/mods/ENTITIES/mcl_burning/api.lua deleted file mode 100644 index 1d07e96f04..0000000000 --- a/mods/ENTITIES/mcl_burning/api.lua +++ /dev/null @@ -1,173 +0,0 @@ -function mcl_burning.get_storage(obj) - return obj:is_player() and mcl_burning.storage[obj] or obj:get_luaentity() -end - -function mcl_burning.is_burning(obj) - return mcl_burning.get_storage(obj).burn_time -end - -function mcl_burning.is_affected_by_rain(obj) - return mcl_weather.get_weather() == "rain" and mcl_weather.is_outdoor(obj:get_pos()) -end - -function mcl_burning.get_collisionbox(obj, smaller, storage) - local cache = storage.collisionbox_cache - if cache 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_minp = vector.add(minp, s_vec) - local s_maxp = vector.subtract(maxp, s_vec) - storage.collisionbox_cache = {{minp, maxp}, {s_minp, s_maxp}} - return minp, maxp - end -end - -local find_nodes_in_area = minetest.find_nodes_in_area - -function mcl_burning.get_touching_nodes(obj, nodenames, storage) - local pos = obj:get_pos() - local minp, maxp = mcl_burning.get_collisionbox(obj, true, storage) - local nodes = find_nodes_in_area(vector.add(pos, minp), vector.add(pos, maxp), nodenames) - return nodes -end - --- Manages the fire animation on a burning player's HUD --- --- Parameters: --- player - a valid player object; --- --- If the player already has a fire HUD, updates the burning animation. --- If the fire does not have a fire HUD, initializes the HUD. --- -function mcl_burning.update_hud(player) - local animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8 - local hud_flame_animated = "mcl_burning_hud_flame_animated.png^[opacity:180^[verticalframe:" .. animation_frames .. ":" - - local storage = mcl_burning.get_storage(player) - if not storage.fire_hud_id then - storage.animation_frame = 1 - storage.fire_hud_id = player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 0.5}, - scale = {x = -100, y = -100}, - text = hud_flame_animated .. storage.animation_frame, - z_index = 1000, - }) - else - storage.animation_frame = storage.animation_frame + 1 - if storage.animation_frame > animation_frames - 1 then - storage.animation_frame = 0 - end - player:hud_change(storage.fire_hud_id, "text", hud_flame_animated .. storage.animation_frame) - end -end - --- Sets and object state as burning and adds a fire animation to the object. --- --- Parameters: --- obj - may be a player or a lua_entity; --- burn_time - sets the object's burn duration; --- --- If obj is a player, adds a fire animation to the HUD, if obj is a --- lua_entity, adds an animated fire entity to obj. --- The effective burn duration is modified by obj's armor protection. --- If obj was already burning, its burn duration is updated if the current --- duration is less than burn_time. --- If obj is dead, fireproof or a creative player, this function does nothing. --- -function mcl_burning.set_on_fire(obj, burn_time) - if obj:get_hp() < 0 then - return - end - - local luaentity = obj:get_luaentity() - if luaentity and luaentity.fire_resistant then - return - end - - if obj:is_player() and minetest.is_creative_enabled(obj:get_player_name()) then - burn_time = 0 - else - local max_fire_prot_lvl = 0 - local inv = mcl_util.get_inventory(obj) - local armor_list = inv and inv:get_list("armor") - - if armor_list then - for _, stack in pairs(armor_list) do - local fire_prot_lvl = mcl_enchanting.get_enchantment(stack, "fire_protection") - if fire_prot_lvl > max_fire_prot_lvl then - max_fire_prot_lvl = fire_prot_lvl - end - end - end - if max_fire_prot_lvl > 0 then - burn_time = burn_time - math.floor(burn_time * max_fire_prot_lvl * 0.15) - end - end - - local storage = mcl_burning.get_storage(obj) - if storage.burn_time then - if burn_time > storage.burn_time then - storage.burn_time = burn_time - end - return - end - storage.burn_time = burn_time - storage.fire_damage_timer = 0 - - local minp, maxp = mcl_burning.get_collisionbox(obj, false, storage) - local size = vector.subtract(maxp, minp) - size = vector.multiply(size, vector.new(1.1, 1.2, 1.1)) - size = vector.divide(size, obj:get_properties().visual_size) - - local fire_entity = minetest.add_entity(obj:get_pos(), "mcl_burning:fire") - fire_entity:set_properties({visual_size = size}) - fire_entity:set_attach(obj, "", vector.new(0, size.y * 5, 0), vector.new(0, 0, 0)) - - if obj:is_player() then - mcl_burning.update_hud(obj) - end -end - -function mcl_burning.extinguish(obj) - if not obj:get_pos() then return end - if mcl_burning.is_burning(obj) then - local storage = mcl_burning.get_storage(obj) - if obj:is_player() then - if storage.fire_hud_id then - obj:hud_remove(storage.fire_hud_id) - end - mcl_burning.storage[obj] = {} - else - storage.burn_time = nil - storage.fire_damage_timer = nil - end - end -end - -function mcl_burning.tick(obj, dtime, storage) - if storage.burn_time then - storage.burn_time = storage.burn_time - dtime - - 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) - return true - else - storage.fire_damage_timer = storage.fire_damage_timer + dtime - - if storage.fire_damage_timer >= 1 then - storage.fire_damage_timer = 0 - - local luaentity = obj:get_luaentity() - - if not luaentity or not luaentity.fire_damage_resistant then - mcl_util.deal_damage(obj, 1, {type = "on_fire"}) - end - end - end - end -end diff --git a/mods/ENTITIES/mcl_burning/init.lua b/mods/ENTITIES/mcl_burning/init.lua deleted file mode 100644 index 039d295b73..0000000000 --- a/mods/ENTITIES/mcl_burning/init.lua +++ /dev/null @@ -1,131 +0,0 @@ -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -mcl_burning = { - -- the storage table holds a list of objects (players,luaentities) and tables - -- associated with these objects. These tables have the following attributes: - -- burn_time: - -- Remaining time that object will burn. - -- fire_damage_timer: - -- Timer for dealing damage every second while burning. - -- fire_hud_id: - -- HUD id of the flames animation on a burning player's HUD. - -- animation_frame: - -- The HUD's current animation frame, used by update_hud(). - -- collisionbox_cache: - -- Used by mcl_burning.get_collisionbox() to avoid recalculations. - storage = {} -} - -dofile(modpath .. "/api.lua") - -local pairs = pairs -local get_connected_players = minetest.get_connected_players -local get_item_group = minetest.get_item_group - -minetest.register_globalstep(function(dtime) - for _, player in pairs(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 get_item_group(node.name, "puts_out_fire") > 0 then - burn_time = 0 - break - end - - local value = 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 = minetest.deserialize(burn_data) or storage - end - mcl_burning.storage[player] = storage - if storage.burn_time and storage.burn_time > 0 then - mcl_burning.update_hud(player) - end -end) - -local function on_leaveplayer(player) - local storage = mcl_burning.storage[player] - if not storage then - -- For some unexplained reasons, mcl_burning.storage can be `nil` here. - -- Logging this exception to assist in finding the cause of this. - minetest.log("warning", "on_leaveplayer: missing mcl_burning.storage " - .. "for player " .. player:get_player_name()) - storage = {} - end - storage.fire_hud_id = nil - player:get_meta():set_string("mcl_burning:data", minetest.serialize(storage)) - mcl_burning.storage[player] = nil -end - -minetest.register_on_leaveplayer(function(player) - on_leaveplayer(player) -end) - -minetest.register_on_shutdown(function() - for _,player in ipairs(minetest.get_connected_players()) do - on_leaveplayer(player) - end -end) - -local animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8 - -minetest.register_entity("mcl_burning:fire", { - initial_properties = { - physical = false, - collisionbox = {0, 0, 0, 0, 0, 0}, - visual = "upright_sprite", - textures = { - "mcl_burning_entity_flame_animated.png", - "mcl_burning_entity_flame_animated.png" - }, - spritediv = {x = 1, y = animation_frames}, - pointable = false, - glow = -1, - backface_culling = false, - }, - _mcl_animation_timer = 0, - on_activate = function(self) - self.object:set_sprite({x = 0, y = 0}, animation_frames, 1.0 / animation_frames) - end, - on_step = function(self, dtime) - local parent = self.object:get_attach() - if not parent then - self.object:remove() - return - end - local storage = mcl_burning.get_storage(parent) - if not storage or not storage.burn_time then - self.object:remove() - return - end - if parent:is_player() then - self._mcl_animation_timer = self._mcl_animation_timer + dtime - if self._mcl_animation_timer >= 0.1 then - self._mcl_animation_timer = 0 - mcl_burning.update_hud(parent) - end - end - end, -}) diff --git a/mods/ENTITIES/mcl_burning/mod.conf b/mods/ENTITIES/mcl_burning/mod.conf deleted file mode 100644 index c64959cbb1..0000000000 --- a/mods/ENTITIES/mcl_burning/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_burning -description = Burning Objects for MineClone2 -author = Fleckenstein diff --git a/mods/ENVIRONMENT/lightning/API.md b/mods/ENVIRONMENT/lightning/API.md deleted file mode 100644 index ad4f0a3b47..0000000000 --- a/mods/ENVIRONMENT/lightning/API.md +++ /dev/null @@ -1,31 +0,0 @@ -# lightning -Lightning mod for MineClone2 with the following API: - -## lightning.register_on_strike(function(pos, pos2, objects)) -Custom function called when a lightning strikes. - -* `pos`: impact position -* `pos2`: rounded node position where fire is placed -* `objects`: table with ObjectRefs of all objects within a radius of 3.5 around pos2 - -## lightning.strike(pos) -Let a lightning strike. - -* `pos`: optional, if not given a random pos will be chosen -* `returns`: bool - success if a strike happened - - -### Examples: - -``` -lightning.register_on_strike(function(pos, pos2, objects) - for _, obj in pairs(objects) do - obj:remove() - end - minetest.add_entity(pos, "mobs_mc:sheep") -end) - -minetest.register_on_respawnplayer(function(player) - lightning.strike(player:get_pos()) -end) -``` \ No newline at end of file diff --git a/mods/ENVIRONMENT/lightning/README.md b/mods/ENVIRONMENT/lightning/README.md deleted file mode 100644 index 73782edbaa..0000000000 --- a/mods/ENVIRONMENT/lightning/README.md +++ /dev/null @@ -1,21 +0,0 @@ - -Lightning mod for minetest - - -Copyright (C) 2016 - Auke Kok - -"lightning" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - - -Textures: CC-BY-SA-4.0 by sofar - lightning_1.png - lightning_2.png - lightning_3.png - -Sounds: - thunder.1.ogg - CC-BY-SA - hantorio - http://www.freesound.org/people/hantorio/sounds/121945/ - thunder.2.ogg - CC-BY-SA - juskiddink - http://www.freesound.org/people/juskiddink/sounds/101948/ - thunder.3.ogg - CC-BY-SA - IllusiaProductions - http://www.freesound.org/people/IllusiaProductions/sounds/249950/ diff --git a/mods/ENVIRONMENT/lightning/init.lua b/mods/ENVIRONMENT/lightning/init.lua deleted file mode 100644 index 3579316e83..0000000000 --- a/mods/ENVIRONMENT/lightning/init.lua +++ /dev/null @@ -1,268 +0,0 @@ ---[[ - -Copyright (C) 2016 - Auke Kok -Adapted by MineClone2 contributors - -"lightning" is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation; either version 2.1 -of the license, or (at your option) any later version. - ---]] - -local S = minetest.get_translator(minetest.get_current_modname()) - -local get_connected_players = minetest.get_connected_players -local line_of_sight = minetest.line_of_sight -local get_node = minetest.get_node -local set_node = minetest.set_node -local sound_play = minetest.sound_play -local add_particlespawner = minetest.add_particlespawner -local after = minetest.after -local add_entity = minetest.add_entity -local get_objects_inside_radius = minetest.get_objects_inside_radius -local get_item_group = minetest.get_item_group - -lightning = { - interval_low = 17, - interval_high = 503, - range_h = 100, - range_v = 50, - size = 100, - -- disable this to stop lightning mod from striking - auto = true, - on_strike_functions = {}, -} - -local rng = PcgRandom(32321123312123) - -local ps = {} -local ttl = -1 - -local function revertsky(dtime) - if ttl == 0 then - return - end - ttl = ttl - dtime - if ttl > 0 then - return - end - - mcl_weather.skycolor.remove_layer("lightning") - - ps = {} -end - -minetest.register_globalstep(revertsky) - --- lightning strike API - --- See API.md ---[[ - lightning.register_on_strike(function(pos, pos2, objects) - -- code - end) -]] -function lightning.register_on_strike(func) - table.insert(lightning.on_strike_functions, func) -end - --- select a random strike point, midpoint -local function choose_pos(pos) - if not pos then - local playerlist = get_connected_players() - local playercount = table.getn(playerlist) - - -- nobody on - if playercount == 0 then - return nil, nil - end - - local r = rng:next(1, playercount) - local randomplayer = playerlist[r] - pos = randomplayer:get_pos() - - -- avoid striking underground - if pos.y < -20 then - return nil, nil - end - - pos.x = math.floor(pos.x - (lightning.range_h / 2) + rng:next(1, lightning.range_h)) - pos.y = pos.y + (lightning.range_v / 2) - pos.z = math.floor(pos.z - (lightning.range_h / 2) + rng:next(1, lightning.range_h)) - end - - local b, pos2 = line_of_sight(pos, { x = pos.x, y = pos.y - lightning.range_v, z = pos.z }, 1) - - -- nothing but air found - if b then - return nil, nil - end - - local n = get_node({ x = pos2.x, y = pos2.y - 1/2, z = pos2.z }) - if n.name == "air" or n.name == "ignore" then - return nil, nil - end - - return pos, pos2 -end - --- * pos: optional, if not given a random pos will be chosen --- * returns: bool - success if a strike happened -function lightning.strike(pos) - if lightning.auto then - after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike) - end - - local pos2 - pos, pos2 = choose_pos(pos) - - if not pos then - return false - end - local objects = get_objects_inside_radius(pos2, 3.5) - if lightning.on_strike_functions then - for _, func in pairs(lightning.on_strike_functions) do - func(pos, pos2, objects) - end - end -end - -lightning.register_on_strike(function(pos, pos2, objects) - local particle_pos = vector.offset(pos2, 0, (lightning.size / 2) + 0.5, 0) - local particle_size = lightning.size * 10 - local time = 0.2 - add_particlespawner({ - amount = 1, - time = time, - -- make it hit the top of a block exactly with the bottom - minpos = particle_pos, - maxpos = particle_pos, - minexptime = time, - maxexptime = time, - minsize = particle_size, - maxsize = particle_size, - collisiondetection = true, - vertical = true, - -- to make it appear hitting the node that will get set on fire, make sure - -- to make the texture lightning bolt hit exactly in the middle of the - -- texture (e.g. 127/128 on a 256x wide texture) - texture = "lightning_lightning_" .. rng:next(1,3) .. ".png", - glow = minetest.LIGHT_MAX, - }) - - sound_play({ name = "lightning_thunder", gain = 10 }, { pos = pos, max_hear_distance = 500 }, true) - - -- damage nearby objects, transform mobs - for _, obj in pairs(objects) do - local lua = obj:get_luaentity() - if lua and lua._on_strike then - lua._on_strike(lua, pos, pos2, objects) - end - -- remove this when mob API is done - if lua and lua.name == "mobs_mc:pig" then - mcl_util.replace_mob(obj, "mobs_mc:pigman") - elseif lua and lua.name == "mobs_mc:mooshroom" then - if lua.base_texture[1] == "mobs_mc_mooshroom.png" then - lua.base_texture = { "mobs_mc_mooshroom_brown.png", "mobs_mc_mushroom_brown.png" } - else - lua.base_texture = { "mobs_mc_mooshroom.png", "mobs_mc_mushroom_red.png" } - end - obj:set_properties({ textures = lua.base_texture }) - elseif lua and lua.name == "mobs_mc:villager" then - mcl_util.replace_mob(obj, "mobs_mc:witch") - elseif lua and lua.name == "mobs_mc:creeper" then - mcl_util.replace_mob(obj, "mobs_mc:creeper_charged") - else - mcl_util.deal_damage(obj, 5, { type = "lightning_bolt" }) - end - end - - local playerlist = get_connected_players() - for i = 1, #playerlist do - local player = playerlist[i] - local sky = {} - - sky.bgcolor, sky.type, sky.textures = player:get_sky() - - local name = player:get_player_name() - if ps[name] == nil then - ps[name] = {p = player, sky = sky} - mcl_weather.skycolor.add_layer("lightning", { { r = 255, g = 255, b = 255 } }, true) - mcl_weather.skycolor.active = true - end - end - - -- trigger revert of skybox - ttl = 0.1 - - -- Events caused by the lightning strike: Fire, damage, mob transformations, rare skeleton spawn - - pos2.y = pos2.y + 1/2 - local skeleton_lightning = false - if rng:next(1,100) <= 3 then - skeleton_lightning = true - end - if get_item_group(get_node({ x = pos2.x, y = pos2.y - 1, z = pos2.z }).name, "liquid") < 1 then - if get_node(pos2).name == "air" then - -- Low chance for a lightning to spawn skeleton horse + skeletons - if skeleton_lightning then - add_entity(pos2, "mobs_mc:skeleton_horse") - - local angle, posadd - angle = math.random(0, math.pi*2) - for i=1,3 do - posadd = { x=math.cos(angle),y=0,z=math.sin(angle) } - posadd = vector.normalize(posadd) - local mob = add_entity(vector.add(pos2, posadd), "mobs_mc:skeleton") - if mob then - mob:set_yaw(angle-math.pi/2) - end - angle = angle + (math.pi*2) / 3 - end - - -- Cause a fire - else - set_node(pos2, { name = "mcl_fire:fire" }) - end - end - end -end) - --- if other mods disable auto lightning during initialization, don't trigger the first lightning. -after(5, function(dtime) - if lightning.auto then - after(rng:next(lightning.interval_low, - lightning.interval_high), lightning.strike) - end -end) - -minetest.register_chatcommand("lightning", { - params = "[ ]", - description = S("Let lightning strike at the specified position or yourself"), - privs = { maphack = true }, - func = function(name, param) - local pos = {} - pos.x, pos.y, pos.z = string.match(param, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$") - pos.x = tonumber(pos.x) - pos.y = tonumber(pos.y) - pos.z = tonumber(pos.z) - if not (pos.x and pos.y and pos.z) then - pos = nil - end - if name == "" and pos == nil then - return false, "No position specified and unknown player" - end - if pos then - lightning.strike(pos) - else - local player = minetest.get_player_by_name(name) - if player then - lightning.strike(player:get_pos()) - else - return false, S("No position specified and unknown player") - end - end - return true - end, -}) diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.de.tr b/mods/ENVIRONMENT/lightning/locale/lightning.de.tr deleted file mode 100644 index a76c6809e5..0000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.de.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@1 wurde vom Blitz getroffen. -Let lightning strike at the specified position or yourself=Lassen Sie einen Blitz an die gegebene Position oder auf sich selbst einschlagen. -No position specified and unknown player=Keine Position angegeben und Spieler nicht bekannt diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.es.tr b/mods/ENVIRONMENT/lightning/locale/lightning.es.tr deleted file mode 100644 index 5d207a5c6f..0000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@ 1 fue alcanzado por un rayo. -Let lightning strike at the specified position or yourself=Deje que un rayo golpee en la posición especificada o sobre usted mismo. -No position specified and unknown player=Ninguna posición especificada y jugador desconocido diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.fr.tr b/mods/ENVIRONMENT/lightning/locale/lightning.fr.tr deleted file mode 100644 index 18c61d51c6..0000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.fr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@1 a été frappé par la foudre. -Let lightning strike at the specified position or yourself=Laissez la foudre frapper à la position spécifiée ou sur vous-même -No position specified and unknown player=Aucune position spécifiée et joueur inconnu diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.pl.tr b/mods/ENVIRONMENT/lightning/locale/lightning.pl.tr deleted file mode 100644 index 1b0edbd1f5..0000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.pl.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@1 została trafiona przez piorun. -Let lightning strike at the specified position or yourself=Pozwala by piorun uderzył we wskazaną pozycję lub ciebie -No position specified and unknown player=Nie wskazano pozycji i nieznany gracz diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.ru.tr b/mods/ENVIRONMENT/lightning/locale/lightning.ru.tr deleted file mode 100644 index 68bcf35558..0000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.ru.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@1 убило молнией. -Let lightning strike at the specified position or yourself=Позволяет молнии бить в заданную позицию или в вас -No position specified and unknown player=Позиция не задана и игрок неизвестен diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.zh_TW.tr b/mods/ENVIRONMENT/lightning/locale/lightning.zh_TW.tr deleted file mode 100644 index 0667e8dc80..0000000000 --- a/mods/ENVIRONMENT/lightning/locale/lightning.zh_TW.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.=@1 被閃電擊斃。 -Let lightning strike at the specified position or yourself=讓閃電擊中指定位置或自己 -No position specified and unknown player=未指定位置且玩家未知 diff --git a/mods/ENVIRONMENT/lightning/locale/template.txt b/mods/ENVIRONMENT/lightning/locale/template.txt deleted file mode 100644 index 2c07393f62..0000000000 --- a/mods/ENVIRONMENT/lightning/locale/template.txt +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: lightning -@1 was struck by lightning.= -Let lightning strike at the specified position or yourself= -No position specified and unknown player= diff --git a/mods/ENVIRONMENT/lightning/mod.conf b/mods/ENVIRONMENT/lightning/mod.conf deleted file mode 100644 index 346a4a0b9d..0000000000 --- a/mods/ENVIRONMENT/lightning/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = lightning -author = sofar -description = A mod that adds thunder and lightning effects. -depends = mcl_fire - diff --git a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.1.ogg b/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.1.ogg deleted file mode 100644 index 18e0119573..0000000000 Binary files a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.1.ogg and /dev/null differ diff --git a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.2.ogg b/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.2.ogg deleted file mode 100644 index c9e1b0d4ff..0000000000 Binary files a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.2.ogg and /dev/null differ diff --git a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.3.ogg b/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.3.ogg deleted file mode 100644 index 3690d200bc..0000000000 Binary files a/mods/ENVIRONMENT/lightning/sounds/lightning_thunder.3.ogg and /dev/null differ diff --git a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_1.png b/mods/ENVIRONMENT/lightning/textures/lightning_lightning_1.png deleted file mode 100644 index 37af59e04e..0000000000 Binary files a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_1.png and /dev/null differ diff --git a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_2.png b/mods/ENVIRONMENT/lightning/textures/lightning_lightning_2.png deleted file mode 100644 index 7bab36b746..0000000000 Binary files a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_2.png and /dev/null differ diff --git a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_3.png b/mods/ENVIRONMENT/lightning/textures/lightning_lightning_3.png deleted file mode 100644 index f090529ec2..0000000000 Binary files a/mods/ENVIRONMENT/lightning/textures/lightning_lightning_3.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/README.md b/mods/ENVIRONMENT/mcl_weather/README.md deleted file mode 100644 index 08f748dfbc..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/README.md +++ /dev/null @@ -1,47 +0,0 @@ -`mcl_weather` -======================= -Weather mod for MineClone 2. Forked from the `weather_pack` mod by xeranas. - -Weathers included ------------------------ -* rain -* snow -* thunder - -Commands ------------------------ -`weather `, requires `weather_manager` privilege. - -Dependencies ------------------------ -Thunder weather requres [lightning](https://github.com/minetest-mods/lightning) mod. - -Configuration prope, ties ------------------------ -Weather mod for indoor check depends on sunlight propogation check. Some nodes (e.g. glass block) propogates sunlight and thus weather particles will go through it. To change that set `weather_allow_override_nodes=true` in `minetest.conf` file. Be aware that just few nodes will be override and these blocks needs to be re-builded to take effect. Maybe in future other 'cheap' way to check indoor will be available. - -Weather mod mostly relies on particles generation however for some small things ABM may be used. Users which do not want it can disable ABM with property `weather_allow_abm=false`. - -License of source code: ------------------------ -LGPL 2.1+ - -Authors of media files: ------------------------ - -TeddyDesTodes: -Snowflakes licensed under CC-BY-SA 3.0 by from weather branch at https://github.com/TeddyDesTodes/minetest/tree/weather - - * `weather_pack_snow_snowflake1.png` - CC-BY-SA 3.0 - * `weather_pack_snow_snowflake2.png` - CC-BY-SA 3.0 - -xeranas: - - * `weather_pack_rain_raindrop_1.png` - CC-0 - * `weather_pack_rain_raindrop_2.png` - CC-0 - * `weather_pack_rain_raindrop_3.png` - CC-0 - -inchadney (http://freesound.org/people/inchadney/): - - * `weather_rain.ogg` - CC-BY-SA 3.0 (cut from http://freesound.org/people/inchadney/sounds/58835/) - diff --git a/mods/ENVIRONMENT/mcl_weather/init.lua b/mods/ENVIRONMENT/mcl_weather/init.lua deleted file mode 100644 index e132429963..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/init.lua +++ /dev/null @@ -1,17 +0,0 @@ -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -mcl_weather = {} - --- If not located then embeded skycolor mod version will be loaded. -if minetest.get_modpath("skycolor") == nil then - dofile(modpath.."/skycolor.lua") -end - -dofile(modpath.."/weather_core.lua") -dofile(modpath.."/snow.lua") -dofile(modpath.."/rain.lua") -dofile(modpath.."/nether_dust.lua") - -if minetest.get_modpath("lightning") then - dofile(modpath.."/thunder.lua") -end diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.de.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.de.tr deleted file mode 100644 index 0fc8330ad7..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.de.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=Fähigkeit, das Wetter zu beeinflussen -Changes the weather to the specified parameter.=Ändert das Wetter. -Error: No weather specified.=Fehler: Kein Wetter angegeben. -Error: Invalid parameters.=Fehler: Ungültige Parameter. -Error: Duration can't be less than 1 second.=Fehler: Dauer darf nicht weniger als 1 Sekunde sein. -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Fehler. Ungültiges Wetter. Benutzen Sie „clear“ (klar), „rain“ (Regen), „snow“ (Schnee) oder „thunder“ (Gewittersturm). -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Wechselt das Wetter zwischem klaren Wetter und Wetter mit Niederschlag (zufällig Regen, Gewittersturm oder Schnee) diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.es.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.es.tr deleted file mode 100644 index 396b77f07e..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=Da la capacidad de controlar el clima -Changes the weather to the specified parameter.=Cambia el clima al parámetro especificado. -Error: No weather specified.=Error: no se especificó el clima. -Error: Invalid parameters.=Error: parámetros no válidos. -Error: Duration can't be less than 1 second.=Error: la duración no puede ser inferior a 1 segundo. -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Error: tiempo especificado no válido. Utilice "clear", "rain", "snow" o "thunder". -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Alterna entre clima despejado y clima con caída (lluvia al azar, tormenta o nieve) diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.fr.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.fr.tr deleted file mode 100644 index 6fd0b4b53d..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.fr.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=Donne la capacité de contrôler la météo -Changes the weather to the specified parameter.=Modifie la météo au paramètre spécifié. -Error: No weather specified.=Erreur: Aucune météo spécifiée. -Error: Invalid parameters.=Erreur: Paramètres non valides. -Error: Duration can't be less than 1 second.=Erreur: La durée ne peut pas être inférieure à 1 seconde. -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Erreur: Météo non valide spécifiée. Utilisez "clear" (clair), "rain" (pluie), "snow" (neige) ou "thunder" (tonnerre). -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Bascule entre temps clair et temps avec chute (au hasard entre pluie, orage ou neige) diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.pl.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.pl.tr deleted file mode 100644 index fc4c72a31e..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.pl.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=Daje możliwość kontrolowania pogody -Changes the weather to the specified parameter.=Zmienia pogodę na wskazany parametr -Error: No weather specified.=Błąd: nie wskazano pogody. -Error: Invalid parameters.=Błąd: nieprawidłowy parametr. -Error: Duration can't be less than 1 second.=Błąd: Czas trwania nie może być mniejszy niż 1 sekunda. -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Błąd: wskazano nieprawidłową pogodę. Użyj "clear", "rain", "snow" lub "thunder". -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Zmienia pomiędzy czystą pogodą i pogodą z opadami (losowo deszcz, burza lub śnieg) diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.ru.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.ru.tr deleted file mode 100644 index 0c3773b7ab..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.ru.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=Предоставляет возможность управлять погодой -Changes the weather to the specified parameter.=Меняет погоду на заданное значение. -Error: No weather specified.=Ошибка: Не указана погода. -Error: Invalid parameters.=Ошибка: Недопустимые параметры. -Error: Duration can't be less than 1 second.=Ошибка: длительность не может быть менее 1 секунды. -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Ошибка: Указана неправильная погода. Возможны варианты: “clear” (ясная), “rain” (дождь), “snow” (снег) или “thunder” (гроза). -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Переключает между ясной погодой и осадками (случайно выбирается дождь, грозовой шторм или снег) - diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.zh_TW.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.zh_TW.tr deleted file mode 100644 index 42be7481b3..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.zh_TW.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather=賦予控制天氣的能力 -Changes the weather to the specified parameter.=將天氣改為指定的參數。 -Error: No weather specified.=錯誤:未指定天氣。 -Error: Invalid parameters.=錯誤:無效參數。 -Error: Duration can't be less than 1 second.=錯誤:延續時間不可以短於1秒。 -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=錯誤:不明天氣。請使用「clear」、「rain」、「snow」或「thunder」。 -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=在晴朗的天氣和降雨天氣之間切換(隨機選擇雨、雷暴或雪)。 diff --git a/mods/ENVIRONMENT/mcl_weather/locale/template.txt b/mods/ENVIRONMENT/mcl_weather/locale/template.txt deleted file mode 100644 index 03555e473e..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/locale/template.txt +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_weather -Gives ability to control weather= -Changes the weather to the specified parameter.= -Error: No weather specified.= -Error: Invalid parameters.= -Error: Duration can't be less than 1 second.= -Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.= -Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)= diff --git a/mods/ENVIRONMENT/mcl_weather/mod.conf b/mods/ENVIRONMENT/mcl_weather/mod.conf deleted file mode 100644 index 4f1102b7a7..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_weather -author = xeranas -description = Weather and sky handling: Rain, snow, thunderstorm, End and Nether ambience -depends = mcl_init, mcl_worlds -optional_depends = lightning diff --git a/mods/ENVIRONMENT/mcl_weather/nether_dust.lua b/mods/ENVIRONMENT/mcl_weather/nether_dust.lua deleted file mode 100644 index a90c8e96e0..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/nether_dust.lua +++ /dev/null @@ -1,66 +0,0 @@ -mcl_weather.nether_dust = {} -mcl_weather.nether_dust.particlespawners = {} - -local psdef= { - amount = 150, - time = 0, - minpos = vector.new(-15,-15,-15), - maxpos =vector.new(15,15,15), - minvel = vector.new(-0.3,-0.15,-1), - maxvel = vector.new(0.3,0.15,0.3), - minacc = vector.new(-1,-0.4,-1), - maxacc = vector.new(1,0.4,1), - minexptime = 1, - maxexptime = 10, - minsize = 0.2, - maxsize = 0.7, - collisiondetection = false, - collision_removal = false, - object_collision = false, - vertical = false -} - -local function check_player(player) - local name=player:get_player_name() - if mcl_worlds.has_dust(player:get_pos()) and not mcl_weather.nether_dust.particlespawners[name] then - return true - end -end - -mcl_weather.nether_dust.add_particlespawners = function(player) - local name=player:get_player_name() - mcl_weather.nether_dust.particlespawners[name]={} - psdef.playername = name - psdef.attached = player - psdef.glow = math.random(0,minetest.LIGHT_MAX) - for i=1,3 do - psdef.texture="mcl_particles_nether_dust"..i..".png" - mcl_weather.nether_dust.particlespawners[name][i]=minetest.add_particlespawner(psdef) - end -end - -mcl_weather.nether_dust.delete_particlespawners = function(player) - local name=player:get_player_name() - if mcl_weather.nether_dust.particlespawners[name] then - for i=1,3 do - minetest.delete_particlespawner(mcl_weather.nether_dust.particlespawners[name][i]) - end - mcl_weather.nether_dust.particlespawners[name]=nil - end -end - -mcl_worlds.register_on_dimension_change(function(player, dimension) - if check_player(player) then - return mcl_weather.nether_dust.add_particlespawners(player) - end - mcl_weather.nether_dust.delete_particlespawners(player) -end) - -minetest.register_on_joinplayer(function(player) - if check_player(player) then - mcl_weather.nether_dust.add_particlespawners(player) - end -end) -minetest.register_on_leaveplayer(function(player) - mcl_weather.nether_dust.delete_particlespawners(player) -end) diff --git a/mods/ENVIRONMENT/mcl_weather/rain.lua b/mods/ENVIRONMENT/mcl_weather/rain.lua deleted file mode 100644 index f0be39f6c2..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/rain.lua +++ /dev/null @@ -1,274 +0,0 @@ -local PARTICLES_COUNT_RAIN = 800 -local PARTICLES_COUNT_THUNDER = 1200 - -local get_connected_players = minetest.get_connected_players - -mcl_weather.rain = { - -- max rain particles created at time - particles_count = PARTICLES_COUNT_RAIN, - - -- flag to turn on/off extinguish fire for rain - extinguish_fire = true, - - -- flag useful when mixing weathers - raining = false, - - -- keeping last timeofday value (rounded). - -- Defaulted to non-existing value for initial comparing. - sky_last_update = -1, - - init_done = false, -} -local update_sound={} -local vel=math.random(0,3) -local falling_speed=math.random(10,15) -local size = math.random(1,3) -local psdef= { - amount = mcl_weather.rain.particles_count, - time=0, - minpos = vector.new(-15,20,-15), - maxpos = vector.new(15,25,15), - minvel = vector.new(-2,-falling_speed-2,-2), - maxvel = vector.new(2,-falling_speed+2,2), - minacc = vector.new(0,0,0), - maxacc = vector.new(0,-0.5,0), - minexptime = 15, - maxexptime = 30, - minsize = size, - maxsize= size*2, - collisiondetection = true, - collision_removal = true, - vertical = true, -} - -local textures = {"weather_pack_rain_raindrop_1.png", "weather_pack_rain_raindrop_2.png"} - -function mcl_weather.rain.sound_handler(player) - return minetest.sound_play("weather_rain", { - to_player = player:get_player_name(), - loop = true, - }) -end - --- set skybox based on time (uses skycolor api) -function mcl_weather.rain.set_sky_box() - if mcl_weather.state == "rain" then - mcl_weather.skycolor.add_layer( - "weather-pack-rain-sky", - {{r=0, g=0, b=0}, - {r=85, g=86, b=98}, - {r=135, g=135, b=151}, - {r=85, g=86, b=98}, - {r=0, g=0, b=0}}) - mcl_weather.skycolor.active = true - for _, player in pairs(get_connected_players()) do - player:set_clouds({color="#5D5D5FE8"}) - end - end -end - --- no no no NO NO f*.. no. no manual particle creatin' PLS!! this sends EVERY particle over the net. -function mcl_weather.rain.add_rain_particles(player) - mcl_weather.rain.last_rp_count = mcl_weather.rain.particles_count - for k,v in pairs(textures) do - psdef.texture=v - mcl_weather.add_spawner_player(player,"rain"..k,psdef) - end - if l then - update_sound[player:get_player_name()]=true - end -end - --- register player for rain weather. --- basically needs for origin sky reference and rain sound controls. -function mcl_weather.rain.add_player(player) - if mcl_weather.players[player:get_player_name()] == nil then - local player_meta = {} - player_meta.origin_sky = {player:get_sky()} - mcl_weather.players[player:get_player_name()] = player_meta - update_sound[player:get_player_name()]=true - end -end - --- remove player from player list effected by rain. --- be sure to remove sound before removing player otherwise soundhandler reference will be lost. -function mcl_weather.rain.remove_player(player) - local player_meta = mcl_weather.players[player:get_player_name()] - if player_meta and player_meta.origin_sky then - player:set_clouds({color="#FFF0F0E5"}) - mcl_weather.players[player:get_player_name()] = nil - update_sound[player:get_player_name()]=true - end -end - --- adds and removes rain sound depending how much rain particles around player currently exist. --- have few seconds delay before each check to avoid on/off sound too often --- when player stay on 'edge' where sound should play and stop depending from random raindrop appearance. -function mcl_weather.rain.update_sound(player) - if not update_sound[player:get_player_name()] then return end - local player_meta = mcl_weather.players[player:get_player_name()] - if player_meta then - if player_meta.sound_updated and player_meta.sound_updated + 5 > minetest.get_gametime() then - return false - end - - if player_meta.sound_handler then - if mcl_weather.rain.last_rp_count == 0 then - minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0) - player_meta.sound_handler = nil - end - elseif mcl_weather.rain.last_rp_count > 0 then - player_meta.sound_handler = mcl_weather.rain.sound_handler(player) - end - - player_meta.sound_updated = minetest.get_gametime() - end - update_sound[player:get_player_name()]=false -end - --- rain sound removed from player. -function mcl_weather.rain.remove_sound(player) - local player_meta = mcl_weather.players[player:get_player_name()] - if player_meta and player_meta.sound_handler then - minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0) - player_meta.sound_handler = nil - player_meta.sound_updated = nil - end -end - --- callback function for removing rain -function mcl_weather.rain.clear() - mcl_weather.rain.raining = false - mcl_weather.rain.sky_last_update = -1 - mcl_weather.rain.init_done = false - mcl_weather.rain.set_particles_mode("rain") - mcl_weather.skycolor.remove_layer("weather-pack-rain-sky") - for _, player in pairs(get_connected_players()) do - mcl_weather.rain.remove_sound(player) - mcl_weather.rain.remove_player(player) - mcl_weather.remove_spawners_player(player) - end -end - -minetest.register_globalstep(function(dtime) - if mcl_weather.state ~= "rain" then - return false - end - mcl_weather.rain.make_weather() -end) - -function mcl_weather.rain.make_weather() - if mcl_weather.rain.init_done == false then - mcl_weather.rain.raining = true - mcl_weather.rain.set_sky_box() - mcl_weather.rain.set_particles_mode(mcl_weather.mode) - mcl_weather.rain.init_done = true - end - - for _, player in pairs(get_connected_players()) do - local pos=player:get_pos() - if mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(pos) then - mcl_weather.rain.remove_sound(player) - mcl_weather.remove_spawners_player(player) - else - mcl_weather.rain.add_player(player) - mcl_weather.rain.add_rain_particles(player) - mcl_weather.rain.update_sound(player) - end - end -end - --- Switch the number of raindrops: "thunder" for many raindrops, otherwise for normal raindrops -function mcl_weather.rain.set_particles_mode(mode) - if mode == "thunder" then - psdef.amount=PARTICLES_COUNT_THUNDER - mcl_weather.rain.particles_count = PARTICLES_COUNT_THUNDER - else - psdef.amount=PARTICLES_COUNT_RAIN - mcl_weather.rain.particles_count = PARTICLES_COUNT_RAIN - end -end - -if mcl_weather.allow_abm then - -- ABM for extinguish fire - minetest.register_abm({ - label = "Rain extinguishes fire", - nodenames = {"mcl_fire:fire"}, - interval = 2.0, - chance = 2, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Fire is extinguished if in rain or one of 4 neighbors is in rain - if mcl_weather.rain.raining and mcl_weather.rain.extinguish_fire then - local around = { - { x = 0, y = 0, z = 0 }, - { x = -1, y = 0, z = 0 }, - { x = 1, y = 0, z = 0 }, - { x = 0, y = 0, z = -1 }, - { x = 0, y = 0, z = 1 }, - } - for a=1, #around do - local apos = vector.add(pos, around[a]) - if mcl_weather.is_outdoor(apos) then - minetest.remove_node(pos) - minetest.sound_play("fire_extinguish_flame", {pos = pos, max_hear_distance = 8, gain = 0.1}, true) - return - end - end - end - end, - }) - - -- Slowly fill up cauldrons - minetest.register_abm({ - label = "Rain fills cauldrons with water", - nodenames = {"mcl_cauldrons:cauldron", "mcl_cauldrons:cauldron_1", "mcl_cauldrons:cauldron_2"}, - interval = 56.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Rain is equivalent to a water bottle - if mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then - if node.name == "mcl_cauldrons:cauldron" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_1"}) - elseif node.name == "mcl_cauldrons:cauldron_1" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_2"}) - elseif node.name == "mcl_cauldrons:cauldron_2" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3"}) - elseif node.name == "mcl_cauldrons:cauldron_1r" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_2r"}) - elseif node.name == "mcl_cauldrons:cauldron_2r" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3r"}) - end - end - end - }) - - -- Wetten the soil - minetest.register_abm({ - label = "Rain hydrates farmland", - nodenames = {"mcl_farming:soil"}, - interval = 22.0, - chance = 3, - action = function(pos, node, active_object_count, active_object_count_wider) - if mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then - if node.name == "mcl_farming:soil" then - minetest.set_node(pos, {name="mcl_farming:soil_wet"}) - end - end - end - }) -end - -if mcl_weather.reg_weathers.rain == nil then - mcl_weather.reg_weathers.rain = { - clear = mcl_weather.rain.clear, - light_factor = 0.6, - -- 10min - 20min - min_duration = 600, - max_duration = 1200, - transitions = { - [65] = "none", - [70] = "snow", - [100] = "thunder", - } - } -end diff --git a/mods/ENVIRONMENT/mcl_weather/skycolor.lua b/mods/ENVIRONMENT/mcl_weather/skycolor.lua deleted file mode 100644 index 7b6183d447..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/skycolor.lua +++ /dev/null @@ -1,255 +0,0 @@ -local mods_loaded = false -local NIGHT_VISION_RATIO = 0.45 - -mcl_weather.skycolor = { - -- Should be activated before do any effect. - active = true, - - -- To skip update interval - force_update = true, - - -- Update interval. - update_interval = 15, - - -- Main sky colors: starts from midnight to midnight. - -- Please do not set directly. Use add_layer instead. - colors = {}, - - -- min value which will be used in color gradient, usualy its first user given color in 'pure' color. - min_val = 0, - - -- number of colors while constructing gradient of user given colors - max_val = 1000, - - -- Table for tracking layer order - layer_names = {}, - - -- To layer to colors table - add_layer = function(layer_name, layer_color, instant_update) - mcl_weather.skycolor.colors[layer_name] = layer_color - table.insert(mcl_weather.skycolor.layer_names, layer_name) - mcl_weather.skycolor.force_update = true - end, - - current_layer_name = function() - return mcl_weather.skycolor.layer_names[#mcl_weather.skycolor.layer_names] - end, - - -- Retrieve layer from colors table - retrieve_layer = function() - local last_layer = mcl_weather.skycolor.current_layer_name() - return mcl_weather.skycolor.colors[last_layer] - end, - - -- Remove layer from colors table - remove_layer = function(layer_name) - for k, name in pairs(mcl_weather.skycolor.layer_names) do - if name == layer_name then - table.remove(mcl_weather.skycolor.layer_names, k) - mcl_weather.skycolor.force_update = true - return - end - end - end, - - -- Wrapper for updating day/night ratio that respects night vision - override_day_night_ratio = function(player, ratio) - local meta = player:get_meta() - local has_night_vision = meta:get_int("night_vision") == 1 - local arg - -- Apply night vision only for dark sky - local is_dark = minetest.get_timeofday() > 0.8 or minetest.get_timeofday() < 0.2 or mcl_weather.state ~= "none" - local pos = player:get_pos() - local dim = mcl_worlds.pos_to_dimension(pos) - if has_night_vision and is_dark and dim ~= "nether" and dim ~= "end" then - if ratio == nil then - arg = NIGHT_VISION_RATIO - else - arg = math.max(ratio, NIGHT_VISION_RATIO) - end - else - arg = ratio - end - player:override_day_night_ratio(arg) - end, - - -- Update sky color. If players not specified update sky for all players. - update_sky_color = function(players) - -- Override day/night ratio as well - players = mcl_weather.skycolor.utils.get_players(players) - for _, player in ipairs(players) do - local pos = player:get_pos() - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "overworld" then - if (mcl_weather.state == "none") then - -- Clear weather - player:set_sky({ - type = "regular", - sky_color = { - day_sky = "#92B9FF", - day_horizon = "#B4D0FF", - dawn_sky = "#B4BAFA", - dawn_horizon = "#BAC1F0", - night_sky = "#006AFF", - night_horizon = "#4090FF", - }, - clouds = true, - }) - player:set_sun({visible = true, sunrise_visible = true}) - player:set_moon({visible = true}) - player:set_stars({visible = true}) - mcl_weather.skycolor.override_day_night_ratio(player, nil) - else - -- Weather skies - local day_color = mcl_weather.skycolor.get_sky_layer_color(0.5) - local dawn_color = mcl_weather.skycolor.get_sky_layer_color(0.75) - local night_color = mcl_weather.skycolor.get_sky_layer_color(0) - player:set_sky({ type = "regular", - sky_color = { - day_sky = day_color, - day_horizon = day_color, - dawn_sky = dawn_color, - dawn_horizon = dawn_color, - night_sky = night_color, - night_horizon = night_color, - }, - clouds = true, - }) - player:set_sun({visible = false, sunrise_visible = false}) - player:set_moon({visible = false}) - player:set_stars({visible = false}) - - local lf = mcl_weather.get_current_light_factor() - if mcl_weather.skycolor.current_layer_name() == "lightning" then - mcl_weather.skycolor.override_day_night_ratio(player, 1) - elseif lf then - local w = minetest.get_timeofday() - local light = (w * (lf*2)) - if light > 1 then - light = 1 - (light - 1) - end - light = (light * lf) + 0.15 - mcl_weather.skycolor.override_day_night_ratio(player, light) - else - mcl_weather.skycolor.override_day_night_ratio(player, nil) - end - end - elseif dim == "end" then - local t = "mcl_playerplus_end_sky.png" - player:set_sky({ type = "skybox", - base_color = "#000000", - textures = {t,t,t,t,t,t}, - clouds = false, - }) - player:set_sun({visible = false , sunrise_visible = false}) - player:set_moon({visible = false}) - player:set_stars({visible = false}) - mcl_weather.skycolor.override_day_night_ratio(player, 0.5) - elseif dim == "nether" then - player:set_sky({ type = "plain", - base_color = "#300808", - clouds = false, - }) - player:set_sun({visible = false , sunrise_visible = false}) - player:set_moon({visible = false}) - player:set_stars({visible = false}) - mcl_weather.skycolor.override_day_night_ratio(player, nil) - elseif dim == "void" then - player:set_sky({ type = "plain", - base_color = "#000000", - clouds = false, - }) - player:set_sun({visible = false, sunrise_visible = false}) - player:set_moon({visible = false}) - player:set_stars({visible = false}) - end - end - end, - - -- Returns current layer color in {r, g, b} format - get_sky_layer_color = function(timeofday) - if #mcl_weather.skycolor.layer_names == 0 then - return nil - end - - -- min timeofday value 0; max timeofday value 1. So sky color gradient range will be between 0 and 1 * mcl_weather.skycolor.max_val. - local rounded_time = math.floor(timeofday * mcl_weather.skycolor.max_val) - local color = mcl_weather.skycolor.utils.convert_to_rgb(mcl_weather.skycolor.min_val, mcl_weather.skycolor.max_val, rounded_time, mcl_weather.skycolor.retrieve_layer()) - return color - end, - - utils = { - convert_to_rgb = function(minval, maxval, current_val, colors) - local max_index = #colors - 1 - local val = (current_val-minval) / (maxval-minval) * max_index + 1.0 - local index1 = math.floor(val) - local index2 = math.min(math.floor(val)+1, max_index + 1) - local f = val - index1 - local c1 = colors[index1] - local c2 = colors[index2] - return {r=math.floor(c1.r + f*(c2.r - c1.r)), g=math.floor(c1.g + f*(c2.g-c1.g)), b=math.floor(c1.b + f*(c2.b - c1.b))} - end, - - -- Simply getter. Ether returns user given players list or get all connected players if none provided - get_players = function(players) - if players == nil or #players == 0 then - if mods_loaded then - players = minetest.get_connected_players() - elseif players == nil then - players = {} - end - end - return players - end, - - -- Returns first player sky color. I assume that all players are in same color layout. - get_current_bg_color = function() - local players = mcl_weather.skycolor.utils.get_players(nil) - if players[1] then - return players[1]:get_sky() - end - return nil - end - }, - -} - -local timer = 0 -minetest.register_globalstep(function(dtime) - if mcl_weather.skycolor.active ~= true or #minetest.get_connected_players() == 0 then - return - end - - if mcl_weather.skycolor.force_update then - mcl_weather.skycolor.update_sky_color() - mcl_weather.skycolor.force_update = false - return - end - - -- regular updates based on iterval - timer = timer + dtime; - if timer >= mcl_weather.skycolor.update_interval then - mcl_weather.skycolor.update_sky_color() - timer = 0 - end - -end) - -local function initsky(player) - if (mcl_weather.skycolor.active) then - mcl_weather.skycolor.force_update = true - end - - player:set_clouds(mcl_worlds:get_cloud_parameters() or {height=mcl_worlds.layer_to_y(127), speed={x=-2, z=0}, thickness=4, color="#FFF0FEF"}) -end - -minetest.register_on_joinplayer(initsky) -minetest.register_on_respawnplayer(initsky) - -mcl_worlds.register_on_dimension_change(function(player) - mcl_weather.skycolor.update_sky_color({player}) -end) - -minetest.register_on_mods_loaded(function() - mods_loaded = true -end) diff --git a/mods/ENVIRONMENT/mcl_weather/snow.lua b/mods/ENVIRONMENT/mcl_weather/snow.lua deleted file mode 100644 index a554289962..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/snow.lua +++ /dev/null @@ -1,98 +0,0 @@ -local get_connected_players = minetest.get_connected_players - -mcl_weather.snow = {} - -mcl_weather.snow.particles_count = 15 -mcl_weather.snow.init_done = false - -local psdef= { - amount = 99, - time = 0, --stay on til we turn it off - minpos = vector.new(-25,20,-25), - maxpos =vector.new(25,25,25), - minvel = vector.new(-0.2,-1,-0.2), - maxvel = vector.new(0.2,-4,0.2), - minacc = vector.new(0,-1,0), - maxacc = vector.new(0,-4,0), - minexptime = 15, - maxexptime = 30, - minsize = 0.5, - maxsize = 5, - collisiondetection = true, - collision_removal = true, - object_collision = true, - vertical = true, - glow = 1 -} - -function mcl_weather.snow.set_sky_box() - mcl_weather.skycolor.add_layer( - "weather-pack-snow-sky", - {{r=0, g=0, b=0}, - {r=85, g=86, b=86}, - {r=135, g=135, b=135}, - {r=85, g=86, b=86}, - {r=0, g=0, b=0}}) - mcl_weather.skycolor.active = true - for _, player in pairs(get_connected_players()) do - player:set_clouds({color="#ADADADE8"}) - end - mcl_weather.skycolor.active = true -end - -function mcl_weather.snow.clear() - mcl_weather.skycolor.remove_layer("weather-pack-snow-sky") - mcl_weather.snow.init_done = false - mcl_weather.remove_all_spawners() -end - --- Simple random texture getter -function mcl_weather.snow.get_texture() - return "weather_pack_snow_snowflake"..math.random(1,2)..".png" -end - -local timer = 0 -minetest.register_globalstep(function(dtime) - if mcl_weather.state ~= "snow" then - return false - end - - timer = timer + dtime; - if timer >= 0.5 then - timer = 0 - else - return - end - - if mcl_weather.snow.init_done == false then - mcl_weather.snow.set_sky_box() - mcl_weather.snow.init_done = true - end - - for _, player in pairs(get_connected_players()) do - if mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(player:get_pos()) then - mcl_weather.remove_spawners_player(player) - else - for i=1,2 do - psdef.texture="weather_pack_snow_snowflake"..i..".png" - mcl_weather.add_spawner_player(player,"snow"..i,psdef) - end - end - end -end) - --- register snow weather -if mcl_weather.reg_weathers.snow == nil then - mcl_weather.reg_weathers.snow = { - clear = mcl_weather.snow.clear, - light_factor = 0.6, - -- 10min - 20min - min_duration = 600, - max_duration = 1200, - transitions = { - [65] = "none", - [80] = "rain", - [100] = "thunder", - } - } -end diff --git a/mods/ENVIRONMENT/mcl_weather/sounds/weather_rain.ogg b/mods/ENVIRONMENT/mcl_weather/sounds/weather_rain.ogg deleted file mode 100644 index 6216875dff..0000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/sounds/weather_rain.ogg and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust1.png b/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust1.png deleted file mode 100644 index 25c71fba3b..0000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust1.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust2.png b/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust2.png deleted file mode 100644 index 73135f3bb6..0000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust2.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust3.png b/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust3.png deleted file mode 100644 index 876876d9f3..0000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/mcl_particles_nether_dust3.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_1.png b/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_1.png deleted file mode 100644 index ab18333b79..0000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_1.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_2.png b/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_2.png deleted file mode 100644 index fb37100a36..0000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_2.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_3.png b/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_3.png deleted file mode 100644 index 4432b355ee..0000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_rain_raindrop_3.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake1.png b/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake1.png deleted file mode 100644 index 8604f5dce4..0000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake1.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake2.png b/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake2.png deleted file mode 100644 index bea317ee85..0000000000 Binary files a/mods/ENVIRONMENT/mcl_weather/textures/weather_pack_snow_snowflake2.png and /dev/null differ diff --git a/mods/ENVIRONMENT/mcl_weather/thunder.lua b/mods/ENVIRONMENT/mcl_weather/thunder.lua deleted file mode 100644 index f8e5a03711..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/thunder.lua +++ /dev/null @@ -1,61 +0,0 @@ -local get_connected_players = minetest.get_connected_players - --- turn off lightning mod 'auto mode' -lightning.auto = false - -mcl_weather.thunder = { - next_strike = 0, - min_delay = 3, - max_delay = 12, - init_done = false, -} - -minetest.register_globalstep(function(dtime) - if mcl_weather.get_weather() ~= "thunder" then - return false - end - - mcl_weather.rain.set_particles_mode("thunder") - mcl_weather.rain.make_weather() - - if mcl_weather.thunder.init_done == false then - mcl_weather.skycolor.add_layer("weather-pack-thunder-sky", { - {r=0, g=0, b=0}, - {r=40, g=40, b=40}, - {r=85, g=86, b=86}, - {r=40, g=40, b=40}, - {r=0, g=0, b=0}, - }) - mcl_weather.skycolor.active = true - for _, player in pairs(get_connected_players()) do - player:set_clouds({color="#3D3D3FE8"}) - end - mcl_weather.thunder.init_done = true - end - if (mcl_weather.thunder.next_strike <= minetest.get_gametime()) then - lightning.strike() - local delay = math.random(mcl_weather.thunder.min_delay, mcl_weather.thunder.max_delay) - mcl_weather.thunder.next_strike = minetest.get_gametime() + delay - end -end) - -function mcl_weather.thunder.clear() - mcl_weather.rain.clear() - mcl_weather.skycolor.remove_layer("weather-pack-thunder-sky") - mcl_weather.skycolor.remove_layer("lightning") - mcl_weather.thunder.init_done = false -end - --- register thunderstorm weather -if mcl_weather.reg_weathers.thunder == nil then - mcl_weather.reg_weathers.thunder = { - clear = mcl_weather.thunder.clear, - light_factor = 0.33333, - -- 10min - 20min - min_duration = 600, - max_duration = 1200, - transitions = { - [100] = "rain", - }, - } -end diff --git a/mods/ENVIRONMENT/mcl_weather/weather_core.lua b/mods/ENVIRONMENT/mcl_weather/weather_core.lua deleted file mode 100644 index f7316bcfbe..0000000000 --- a/mods/ENVIRONMENT/mcl_weather/weather_core.lua +++ /dev/null @@ -1,292 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math - --- weather states, 'none' is default, other states depends from active mods -mcl_weather.state = "none" - --- player list for saving player meta info -mcl_weather.players = {} - --- default weather check interval for global step -mcl_weather.check_interval = 5 - --- weather min duration -mcl_weather.min_duration = 600 - --- weather max duration -mcl_weather.max_duration = 9000 - --- weather calculated end time -mcl_weather.end_time = nil - --- registered weathers -mcl_weather.reg_weathers = {} - --- global flag to disable/enable ABM logic. -mcl_weather.allow_abm = true - -mcl_weather.reg_weathers["none"] = { - min_duration = mcl_weather.min_duration, - max_duration = mcl_weather.max_duration, - light_factor = nil, - transitions = { - [50] = "rain", - [100] = "snow", - }, - clear = function() end, -} - -local storage = minetest.get_mod_storage() --- Save weather into mod storage, so it can be loaded after restarting the server -local function save_weather() - if not mcl_weather.end_time then return end - storage:set_string("mcl_weather_state", mcl_weather.state) - storage:set_int("mcl_weather_end_time", mcl_weather.end_time) - minetest.log("verbose", "[mcl_weather] Weather data saved: state="..mcl_weather.state.." end_time="..mcl_weather.end_time) -end -minetest.register_on_shutdown(save_weather) - -local particlespawners={} -function mcl_weather.add_spawner_player(pl,id,ps) - local name=pl:get_player_name() - if not particlespawners[name] then - particlespawners[name] = {} - end - if not particlespawners[name][id] then - ps.playername =name - ps.attached = pl - particlespawners[name][id]=minetest.add_particlespawner(ps) - return particlespawners[name][id] - end -end -function mcl_weather.remove_spawners_player(pl) - local name=pl:get_player_name() - if not particlespawners[name] then return end - for k,v in pairs(particlespawners[name]) do - minetest.delete_particlespawner(v) - end - particlespawners[name] = nil - return true -end - -function mcl_weather.remove_all_spawners() - for k,v in pairs(minetest.get_connected_players()) do - mcl_weather.remove_spawners_player(v) - end -end - -function mcl_weather.get_rand_end_time(min_duration, max_duration) - local r - if min_duration and max_duration then - r = math.random(min_duration, max_duration) - else - r = math.random(mcl_weather.min_duration, mcl_weather.max_duration) - end - return minetest.get_gametime() + r -end - -function mcl_weather.get_current_light_factor() - if mcl_weather.state == "none" then - return nil - else - return mcl_weather.reg_weathers[mcl_weather.state].light_factor - end -end - --- Returns true if pos is outdoor. --- Outdoor is defined as any node in the Overworld under open sky. --- FIXME: Nodes below glass also count as “outdoor”, this should not be the case. -function mcl_weather.is_outdoor(pos) - local cpos = {x=pos.x, y=pos.y+1, z=pos.z} - local dim = mcl_worlds.pos_to_dimension(cpos) - if minetest.get_node_light(cpos, 0.5) == 15 and dim == "overworld" then - return true - end - return false -end - --- checks if player is undewater. This is needed in order to --- turn off weather particles generation. -function mcl_weather.is_underwater(player) - local ppos = player:get_pos() - local offset = player:get_eye_offset() - local player_eye_pos = {x = ppos.x + offset.x, - y = ppos.y + offset.y + 1.5, - z = ppos.z + offset.z} - local node_level = minetest.get_node_level(player_eye_pos) - if node_level == 8 or node_level == 7 then - return true - end - return false -end - -local t, wci = 0, mcl_weather.check_interval - -minetest.register_globalstep(function(dtime) - t = t + dtime - if t < wci then return end - t = 0 - - if mcl_weather.end_time == nil then - mcl_weather.end_time = mcl_weather.get_rand_end_time() - end - -- recalculate weather - if mcl_weather.end_time <= minetest.get_gametime() then - local changeWeather = minetest.settings:get_bool("mcl_doWeatherCycle") - if changeWeather == nil then - changeWeather = true - end - if changeWeather then - mcl_weather.set_random_weather(mcl_weather.state, mcl_weather.reg_weathers[mcl_weather.state]) - else - mcl_weather.end_time = mcl_weather.get_rand_end_time() - end - end -end) - --- Sets random weather (which could be 'none' (no weather)). -function mcl_weather.set_random_weather(weather_name, weather_meta) - if weather_meta == nil then return end - local transitions = weather_meta.transitions - local random_roll = math.random(0,100) - local new_weather - for v, weather in pairs(transitions) do - if random_roll < v then - new_weather = weather - break - end - end - if new_weather then - mcl_weather.change_weather(new_weather) - end -end - --- Change weather to new_weather. --- * explicit_end_time is OPTIONAL. If specified, explicitly set the --- gametime (minetest.get_gametime) in which the weather ends. --- * changer is OPTIONAL, for logging purposes. -function mcl_weather.change_weather(new_weather, explicit_end_time, changer_name) - local changer_name = changer_name or debug.getinfo(2).name.."()" - - if (mcl_weather.reg_weathers and mcl_weather.reg_weathers[new_weather]) then - if (mcl_weather.state and mcl_weather.reg_weathers[mcl_weather.state]) then - mcl_weather.reg_weathers[mcl_weather.state].clear() - end - - local old_weather = mcl_weather.state - - mcl_weather.state = new_weather - - if old_weather == "none" then - old_weather = "clear" - end - if new_weather == "none" then - new_weather = "clear" - end - minetest.log("action", "[mcl_weather] " .. changer_name .. " changed the weather from " .. old_weather .. " to " .. new_weather) - - local weather_meta = mcl_weather.reg_weathers[mcl_weather.state] - if explicit_end_time then - mcl_weather.end_time = explicit_end_time - else - mcl_weather.end_time = mcl_weather.get_rand_end_time(weather_meta.min_duration, weather_meta.max_duration) - end - mcl_weather.skycolor.update_sky_color() - save_weather() - return true - end - return false -end - -function mcl_weather.get_weather() - return mcl_weather.state -end - -minetest.register_privilege("weather_manager", { - description = S("Gives ability to control weather"), - give_to_singleplayer = false -}) - --- Weather command definition. Set -minetest.register_chatcommand("weather", { - params = "(clear | rain | snow | thunder) []", - description = S("Changes the weather to the specified parameter."), - privs = {weather_manager = true}, - func = function(name, param) - if (param == "") then - return false, S("Error: No weather specified.") - end - local new_weather, end_time - local parse1, parse2 = string.match(param, "(%w+) ?(%d*)") - if parse1 then - if parse1 == "clear" then - new_weather = "none" - else - new_weather = parse1 - end - else - return false, S("Error: Invalid parameters.") - end - if parse2 then - if type(tonumber(parse2)) == "number" then - local duration = tonumber(parse2) - if duration < 1 then - return false, S("Error: Duration can't be less than 1 second.") - end - end_time = minetest.get_gametime() + duration - end - end - - local success = mcl_weather.change_weather(new_weather, end_time, name) - if success then - return true - else - return false, S("Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.") - end - end -}) - -minetest.register_chatcommand("toggledownfall", { - params = "", - description = S("Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)"), - privs = {weather_manager = true}, - func = function(name, param) - -- Currently rain/thunder/snow: Set weather to clear - if mcl_weather.state ~= "none" then - return mcl_weather.change_weather("none", nil, name) - - -- Currently clear: Set weather randomly to rain/thunder/snow - else - local new = { "rain", "thunder", "snow" } - local r = math.random(1, #new) - return mcl_weather.change_weather(new[r], nil, name) - end - end -}) - --- Configuration setting which allows user to disable ABM for weathers (if they use it). --- Weather mods expected to be use this flag before registering ABM. -local weather_allow_abm = minetest.settings:get_bool("weather_allow_abm") -if weather_allow_abm == false then - mcl_weather.allow_abm = false -end - - -local function load_weather() - local weather = storage:get_string("mcl_weather_state") - if weather and weather ~= "" then - mcl_weather.state = weather - mcl_weather.end_time = storage:get_int("mcl_weather_end_time") - mcl_weather.change_weather(weather, mcl_weather.end_time) - if type(mcl_weather.end_time) ~= "number" then - -- Fallback in case of corrupted end time - mcl_weather.end_time = mcl_weather.min_duration - end - minetest.log("action", "[mcl_weather] Weather restored.") - else - minetest.log("action", "[mcl_weather] No weather data found. Starting with clear weather.") - end -end - -load_weather() diff --git a/mods/HELP/mcl_craftguide/.luacheckrc b/mods/HELP/mcl_craftguide/.luacheckrc deleted file mode 100644 index 5a495c7afe..0000000000 --- a/mods/HELP/mcl_craftguide/.luacheckrc +++ /dev/null @@ -1,12 +0,0 @@ -unused_args = false -allow_defined_top = true - -read_globals = { - "minetest", - "default", - "sfinv", - "sfinv_buttons", - "vector", - "string", - "table", -} diff --git a/mods/HELP/mcl_craftguide/API.md b/mods/HELP/mcl_craftguide/API.md deleted file mode 100644 index 17b42ee7b9..0000000000 --- a/mods/HELP/mcl_craftguide/API.md +++ /dev/null @@ -1,171 +0,0 @@ -## API - -### Custom recipes - -#### Registering a custom crafting type (example) - -```Lua -mcl_craftguide.register_craft_type("digging", { - description = "Digging", - icon = "default_tool_steelpick.png", -}) -``` - -#### Registering a custom crafting recipe (example) - -```Lua -mcl_craftguide.register_craft({ - type = "digging", - width = 1, - output = "default:cobble 2", - items = {"default:stone"}, -}) -``` - ---- - -### Recipe filters - -Recipe filters can be used to filter the recipes shown to players. Progressive -mode is implemented as a recipe filter. - -#### `mcl_craftguide.add_recipe_filter(name, function(recipes, player))` - -Adds a recipe filter with the given name. The filter function should return the -recipes to be displayed, given the available recipes and an `ObjectRef` to the -user. Each recipe is a table of the form returned by -`minetest.get_craft_recipe`. - -Example function to hide recipes for items from a mod called "secretstuff": - -```lua -mcl_craftguide.add_recipe_filter("Hide secretstuff", function(recipes) - local filtered = {} - for _, recipe in ipairs(recipes) do - if recipe.output:sub(1,12) ~= "secretstuff:" then - filtered[#filtered + 1] = recipe - end - end - - return filtered -end) -``` - -#### `mcl_craftguide.remove_recipe_filter(name)` - -Removes the recipe filter with the given name. - -#### `mcl_craftguide.set_recipe_filter(name, function(recipe, player))` - -Removes all recipe filters and adds a new one. - -#### `mcl_craftguide.get_recipe_filters()` - -Returns a map of recipe filters, indexed by name. - ---- - -### Search filters - -Search filters are used to perform specific searches inside the search field. -They can be used like so: `+=,,<...>` - -Examples: - -- `+groups=cracky,crumbly`: search for groups `cracky` and `crumbly` in all items. -- `sand+groups=falling_node`: search for group `falling_node` for items which contain `sand` in their names. - -Notes: -- If `optional name` is omitted, the search filter will apply to all items, without pre-filtering. -- Filters can be combined. -- The `groups` filter is currently implemented by default. - -#### `mcl_craftguide.add_search_filter(name, function(item, values))` - -Adds a search filter with the given name. -The search function should return a boolean value (whether the given item should be listed or not). - -Example function to show items which contain at least a recipe of given width(s): - -```lua -mcl_craftguide.add_search_filter("widths", function(item, widths) - local has_width - local recipes = recipes_cache[item] - - if recipes then - for i = 1, #recipes do - local recipe_width = recipes[i].width - for j = 1, #widths do - local width = tonumber(widths[j]) - if width == recipe_width then - has_width = true - break - end - end - end - end - - return has_width -end) -``` - -#### `mcl_craftguide.remove_search_filter(name)` - -Removes the search filter with the given name. - -#### `mcl_craftguide.get_search_filters()` - -Returns a map of search filters, indexed by name. - ---- - -### Custom formspec elements - -#### `mcl_craftguide.add_formspec_element(name, def)` - -Adds a formspec element to the current formspec. -Supported types: `box`, `label`, `image`, `button`, `tooltip`, `item_image`, `image_button`, `item_image_button` - -Example: - -```lua -mcl_craftguide.add_formspec_element("export", { - type = "button", - element = function(data) - -- Should return a table of parameters according to the formspec element type. - -- Note: for all buttons, the 'name' parameter *must not* be specified! - if data.recipes then - return { - data.iX - 3.7, -- X - sfinv_only and 7.9 or 8, -- Y - 1.6, -- W - 1, -- H - ESC(S("Export")) -- label - } - end - end, - -- Optional. - action = function(player, data) - -- When the button is pressed. - print("Exported!") - end -}) -``` - -#### `mcl_craftguide.remove_formspec_element(name)` - -Removes the formspec element with the given name. - -#### `mcl_craftguide.get_formspec_elements()` - -Returns a map of formspec elements, indexed by name. - ---- - -### Miscellaneous - -#### `mcl_craftguide.show(player_name, item, show_usages)` - -Opens the Crafting Guide with the current filter applied. - - * `player_name`: string param. diff --git a/mods/HELP/mcl_craftguide/README.md b/mods/HELP/mcl_craftguide/README.md deleted file mode 100644 index f02ad34626..0000000000 --- a/mods/HELP/mcl_craftguide/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Crafting Guide (MineClone 2 edition) - -#### `mcl_craftguide` is based on, `craftguide` the most comprehensive crafting guide on Minetest. -#### Consult the [Minetest Wiki](http://wiki.minetest.net/Crafting_guide) for more details. - -This crafting guide can be accessed from the invenotory menu (book icon). - -Crafting guide starts out empty and will be filled with more recipes whenever you hold on -to a new items that you can use to new recipes. - -For developers, there's a modding API (see `API.md`). diff --git a/mods/HELP/mcl_craftguide/init.lua b/mods/HELP/mcl_craftguide/init.lua deleted file mode 100644 index 5e36860476..0000000000 --- a/mods/HELP/mcl_craftguide/init.lua +++ /dev/null @@ -1,1175 +0,0 @@ -mcl_craftguide = {} - -local M = minetest -local player_data = {} - --- Caches -local init_items = {} -local searches = {} -local recipes_cache = {} -local usages_cache = {} -local fuel_cache = {} - -local progressive_mode = M.settings:get_bool("mcl_craftguide_progressive_mode", true) -local sfinv_only = false - -local colorize = M.colorize -local reg_items = M.registered_items -local get_result = M.get_craft_result -local show_formspec = M.show_formspec -local get_player_by_name = M.get_player_by_name -local serialize, deserialize = M.serialize, M.deserialize - -local ESC = M.formspec_escape -local S = M.get_translator("mcl_craftguide") - -local maxn, sort, concat, insert, copy = - table.maxn, table.sort, table.concat, table.insert, - table.copy - -local fmt, find, gmatch, match, sub, split, lower = - string.format, string.find, string.gmatch, string.match, - string.sub, string.split, string.lower - -local min, max, floor, ceil = math.min, math.max, math.floor, math.ceil -local pairs, next, unpack = pairs, next, unpack - -local DEFAULT_SIZE = 10 -local MIN_LIMIT, MAX_LIMIT = 10, 12 -DEFAULT_SIZE = min(MAX_LIMIT, max(MIN_LIMIT, DEFAULT_SIZE)) - -local GRID_LIMIT = 5 -local POLL_FREQ = 0.25 - -local FMT = { - box = "box[%f,%f;%f,%f;%s]", - label = "label[%f,%f;%s]", - image = "image[%f,%f;%f,%f;%s]", - button = "button[%f,%f;%f,%f;%s;%s]", - tooltip = "tooltip[%s;%s]", - item_image = "item_image[%f,%f;%f,%f;%s]", - image_button = "image_button[%f,%f;%f,%f;%s;%s;%s]", - item_image_button = "item_image_button[%f,%f;%f,%f;%s;%s;%s]", -} - -local group_stereotypes = { - wood = "mcl_core:wood", - stone = "mcl_core:stone", - sand = "mcl_core:sand", - wool = "mcl_wool:white", - carpet = "mcl_wool:white_carpet", - dye = "mcl_dye:red", - water_bucket = "mcl_buckets:bucket_water", - flower = "mcl_flowers:dandelion", - mushroom = "mcl_mushrooms:mushroom_brown", - wood_slab = "mcl_stairs:slab_wood", - wood_stairs = "mcl_stairs:stairs_wood", - coal = "mcl_core:coal_lump", - shulker_box = "mcl_chests:violet_shulker_box", - quartz_block = "mcl_nether:quartz_block", - banner = "mcl_banners:banner_item_white", - mesecon_conductor_craftable = "mesecons:wire_00000000_off", - purpur_block = "mcl_end:purpur_block", - normal_sandstone = "mcl_core:sandstone", - red_sandstone = "mcl_core:redsandstone", - compass = mcl_compass.stereotype, - clock = mcl_clock.sterotype, -} - -local group_names = { - shulker_box = S("Any shulker box"), - wool = S("Any wool"), - wood = S("Any wood planks"), - tree = S("Any wood"), - sand = S("Any sand"), - normal_sandstone = S("Any normal sandstone"), - red_sandstone = S("Any red sandstone"), - carpet = S("Any carpet"), - dye = S("Any dye"), - water_bucket = S("Any water bucket"), - flower = S("Any flower"), - mushroom = S("Any mushroom"), - wood_slab = S("Any wooden slab"), - wood_stairs = S("Any wooden stairs"), - coal = S("Any coal"), - quartz_block = S("Any kind of quartz block"), - purpur_block = S("Any kind of purpur block"), - stonebrick = S("Any stone bricks"), - stick = S("Any stick"), -} - - - -local item_lists = { - "main", - "craft", - "craftpreview", -} - -local function table_merge(t, t2) - t, t2 = t or {}, t2 or {} - local c = #t - - for i = 1, #t2 do - c = c + 1 - t[c] = t2[i] - end - - return t -end - -local function table_replace(t, val, new) - for k, v in pairs(t) do - if v == val then - t[k] = new - end - end -end - -local function table_diff(t, t2) - local hash = {} - - for i = 1, #t do - local v = t[i] - hash[v] = true - end - - for i = 1, #t2 do - local v = t2[i] - hash[v] = nil - end - - local diff, c = {}, 0 - - for i = 1, #t do - local v = t[i] - if hash[v] then - c = c + 1 - diff[c] = v - end - end - - return diff -end - -local custom_crafts, craft_types = {}, {} - -function mcl_craftguide.register_craft_type(name, def) - local func = "mcl_craftguide.register_craft_type(): " - assert(name, func .. "'name' field missing") - assert(def.description, func .. "'description' field missing") - assert(def.icon, func .. "'icon' field missing") - - craft_types[name] = def -end - -function mcl_craftguide.register_craft(def) - local func = "mcl_craftguide.register_craft(): " - assert(def.type, func .. "'type' field missing") - assert(def.width, func .. "'width' field missing") - assert(def.output, func .. "'output' field missing") - assert(def.items, func .. "'items' field missing") - - custom_crafts[#custom_crafts + 1] = def -end - -local recipe_filters = {} - -function mcl_craftguide.add_recipe_filter(name, f) - local func = "mcl_craftguide.add_recipe_filter(): " - assert(name, func .. "filter name missing") - assert(f and type(f) == "function", func .. "filter function missing") - - recipe_filters[name] = f -end - -function mcl_craftguide.remove_recipe_filter(name) - recipe_filters[name] = nil -end - -function mcl_craftguide.set_recipe_filter(name, f) - local func = "mcl_craftguide.set_recipe_filter(): " - assert(name, func .. "filter name missing") - assert(f and type(f) == "function", func .. "filter function missing") - - recipe_filters = {[name] = f} -end - -function mcl_craftguide.get_recipe_filters() - return recipe_filters -end - -local function apply_recipe_filters(recipes, player) - for _, filter in pairs(recipe_filters) do - recipes = filter(recipes, player) - end - - return recipes -end - -local search_filters = {} - -function mcl_craftguide.add_search_filter(name, f) - local func = "mcl_craftguide.add_search_filter(): " - assert(name, func .. "filter name missing") - assert(f and type(f) == "function", func .. "filter function missing") - - search_filters[name] = f -end - -function mcl_craftguide.remove_search_filter(name) - search_filters[name] = nil -end - -function mcl_craftguide.get_search_filters() - return search_filters -end - -local formspec_elements = {} - -function mcl_craftguide.add_formspec_element(name, def) - local func = "mcl_craftguide.add_formspec_element(): " - assert(def.element, func .. "'element' field not defined") - assert(def.type, func .. "'type' field not defined") - assert(FMT[def.type], func .. "'" .. def.type .. "' type not supported by the API") - - formspec_elements[name] = { - type = def.type, - element = def.element, - action = def.action, - } -end - -function mcl_craftguide.remove_formspec_element(name) - formspec_elements[name] = nil -end - -function mcl_craftguide.get_formspec_elements() - return formspec_elements -end - -local function item_has_groups(item_groups, groups) - for i = 1, #groups do - local group = groups[i] - if not item_groups[group] then - return - end - end - - return true -end - -local function extract_groups(str) - return split(sub(str, 7), ",") -end - -local function item_in_recipe(item, recipe) - for _, recipe_item in pairs(recipe.items) do - if recipe_item == item then - return true - end - end -end - -local function groups_item_in_recipe(item, recipe) - local item_groups = reg_items[item].groups - for _, recipe_item in pairs(recipe.items) do - if sub(recipe_item, 1, 6) == "group:" then - local groups = extract_groups(recipe_item) - if item_has_groups(item_groups, groups) then - local usage = copy(recipe) - table_replace(usage.items, recipe_item, item) - return usage - end - end - end -end - -local function get_item_usages(item) - local usages, c = {}, 0 - - for _, recipes in pairs(recipes_cache) do - for i = 1, #recipes do - local recipe = recipes[i] - if item_in_recipe(item, recipe) then - c = c + 1 - usages[c] = recipe - else - recipe = groups_item_in_recipe(item, recipe) - if recipe then - c = c + 1 - usages[c] = recipe - end - end - end - end - - if fuel_cache[item] then - usages[#usages + 1] = {type = "fuel", width = 1, items = {item}} - end - - return usages -end - -local function get_filtered_items(player) - local items, c = {}, 0 - - for i = 1, #init_items do - local item = init_items[i] - local recipes = recipes_cache[item] - local usages = usages_cache[item] - - if recipes and #apply_recipe_filters(recipes, player) > 0 or - usages and #apply_recipe_filters(usages, player) > 0 then - c = c + 1 - items[c] = item - end - end - - return items -end - -local function cache_recipes(output) - local recipes = M.get_all_craft_recipes(output) or {} - local c = 0 - - for i = 1, #custom_crafts do - local custom_craft = custom_crafts[i] - if match(custom_craft.output, "%S*") == output then - c = c + 1 - recipes[c] = custom_craft - end - end - - if #recipes > 0 then - recipes_cache[output] = recipes - return true - end -end - -local function get_recipes(item, data, player) - local recipes = recipes_cache[item] - local usages = usages_cache[item] - - if recipes then - recipes = apply_recipe_filters(recipes, player) - end - - local no_recipes = not recipes or #recipes == 0 - if no_recipes and not usages then - return - elseif usages and no_recipes then - data.show_usages = true - end - - if data.show_usages then - recipes = apply_recipe_filters(usages_cache[item], player) - if #recipes == 0 then - return - end - end - - return recipes -end - -local function get_burntime(item) - return get_result({method = "fuel", width = 1, items = {item}}).time -end - -local function cache_fuel(item) - local burntime = get_burntime(item) - if burntime > 0 then - fuel_cache[item] = burntime - return true - end -end - -local function groups_to_item(groups) - if #groups == 1 then - local group = groups[1] - local def_gr = "mcl_core:" .. group - - if group_stereotypes[group] then - return group_stereotypes[group] - elseif reg_items[def_gr] then - return def_gr - end - end - - for name, def in pairs(reg_items) do - if item_has_groups(def.groups, groups) then - return name - end - end - - return "" -end - -local function get_tooltip(item, groups, cooktime, burntime) - local tooltip - - if groups then - local gcol = mcl_colors.LIGHT_PURPLE - if #groups == 1 then - local g = group_names[groups[1]] - local groupstr - -- Treat the groups “compass” and “clock” as fake groups - -- and just print the normal item name without special formatting - if groups[1] == "compass" or groups[1] == "clock" then - groupstr = reg_items[item].description - elseif g then - -- Use the special group name string - groupstr = minetest.colorize(gcol, g) - else - --[[ Fallback: Generic group explanation: This always - works, but the internally used group name (which - looks ugly) is exposed to the user. ]] - groupstr = minetest.colorize(gcol, groups[1]) - groupstr = S("Any item belonging to the @1 group", groupstr) - end - tooltip = groupstr - else - - local groupstr, c = {}, 0 - for i = 1, #groups do - c = c + 1 - groupstr[c] = colorize(gcol, groups[i]) - end - - groupstr = concat(groupstr, ", ") - tooltip = S("Any item belonging to the groups: @1", groupstr) - end - else - tooltip = reg_items[item].description - end - - if not groups and cooktime then - tooltip = tooltip .. "\n" .. - S("Cooking time: @1", colorize(mcl_colors.YELLOW, cooktime)) - end - - if not groups and burntime then - tooltip = tooltip .. "\n" .. - S("Burning time: @1", colorize(mcl_colors.YELLOW, burntime)) - end - - return fmt(FMT.tooltip, item, ESC(tooltip)) -end - -local function get_recipe_fs(data, iY) - local fs = {} - local recipe = data.recipes[data.rnum] - local width = recipe.width - local xoffset = data.iX / 2.15 - local cooktime, shapeless - - if recipe.type == "cooking" then - cooktime, width = width, 1 - elseif width == 0 then - shapeless = true - if #recipe.items <= 4 then - width = 2 - else - width = min(3, #recipe.items) - end - end - - local rows = ceil(maxn(recipe.items) / width) - local rightest, btn_size, s_btn_size = 0, 1.1 - - local btn_lab = data.show_usages and - ESC(S("Usage @1 of @2", data.rnum, #data.recipes)) or - ESC(S("Recipe @1 of @2", data.rnum, #data.recipes)) - - fs[#fs + 1] = fmt(FMT.button, - sfinv_only and 5.8 or data.iX - 2.6, - sfinv_only and 7.9 or iY + 3.3, - 2.2, - 1, - "alternate", - btn_lab) - - if width > GRID_LIMIT or rows > GRID_LIMIT then - fs[#fs + 1] = fmt(FMT.label, - (data.iX / 2) - 2, - iY + 2.2, - ESC(S("Recipe is too big to be displayed (@1×@2)", width, rows))) - - return concat(fs) - end - - for i, item in pairs(recipe.items) do - local X = ceil((i - 1) % width + xoffset - width) - - (sfinv_only and 0 or 0.2) - local Y = ceil(i / width + (iY + 2) - min(2, rows)) - - if width > 3 or rows > 3 then - btn_size = width > 3 and 3 / width or 3 / rows - s_btn_size = btn_size - X = btn_size * (i % width) + xoffset - 2.65 - Y = btn_size * floor((i - 1) / width) + (iY + 3) - min(2, rows) - end - - if X > rightest then - rightest = X - end - - local groups - if sub(item, 1, 6) == "group:" then - groups = extract_groups(item) - item = groups_to_item(groups) - end - - local label = "" - if groups and (#groups >= 1 and groups[1] ~= "compass" and groups[1] ~= "clock") then - label = "\nG" - end - - fs[#fs + 1] = fmt(FMT.item_image_button, - X, - Y + (sfinv_only and 0.7 or 0.2), - btn_size, - btn_size, - item, - match(item, "%S*"), - ESC(label)) - - local burntime = fuel_cache[item] - - if groups or cooktime or burntime then - fs[#fs + 1] = get_tooltip(item, groups, cooktime, burntime) - end - end - - local custom_recipe = craft_types[recipe.type] - - if custom_recipe or shapeless or recipe.type == "cooking" then - local icon = custom_recipe and custom_recipe.icon or - shapeless and "shapeless" or "furnace" - - if recipe.type == "cooking" then - icon = "craftguide_furnace.png" - elseif not custom_recipe then - icon = fmt("craftguide_%s.png", icon) - end - - fs[#fs + 1] = fmt(FMT.image, - rightest + 1.2, - sfinv_only and 6.2 or iY + 1.7, - 0.5, - 0.5, - icon) - - local tooltip = custom_recipe and custom_recipe.description or - shapeless and S("Shapeless") or S("Cooking") - - fs[#fs + 1] = fmt("tooltip[%f,%f;%f,%f;%s]", - rightest + 1.2, - sfinv_only and 6.2 or iY + 1.7, - 0.5, - 0.5, - ESC(tooltip)) - end - - local arrow_X = rightest + (s_btn_size or 1.1) - local output_X = arrow_X + 0.9 - - fs[#fs + 1] = fmt(FMT.image, - arrow_X, - sfinv_only and 6.85 or iY + 2.35, - 0.9, - 0.7, - "craftguide_arrow.png") - - if recipe.type == "fuel" then - fs[#fs + 1] = fmt(FMT.image, - output_X, - sfinv_only and 6.68 or iY + 2.18, - 1.1, - 1.1, - "mcl_craftguide_fuel.png") - else - local output_name = match(recipe.output, "%S+") - local burntime = fuel_cache[output_name] - - fs[#fs + 1] = fmt(FMT.item_image_button, - output_X, - sfinv_only and 6.7 or iY + 2.2, - 1.1, - 1.1, - recipe.output, - ESC(output_name), - "") - - if burntime then - fs[#fs + 1] = get_tooltip(output_name, nil, nil, burntime) - - fs[#fs + 1] = fmt(FMT.image, - output_X + 1, - sfinv_only and 6.83 or iY + 2.33, - 0.6, - 0.4, - "craftguide_arrow.png") - - fs[#fs + 1] = fmt(FMT.image, - output_X + 1.6, - sfinv_only and 6.68 or iY + 2.18, - 0.6, - 0.6, - "mcl_craftguide_fuel.png") - end - end - - return concat(fs) -end - -local function make_formspec(name) - local data = player_data[name] - local iY = sfinv_only and 4 or data.iX - 5 - local ipp = data.iX * iY - - data.pagemax = max(1, ceil(#data.items / ipp)) - - local fs = {} - - if not sfinv_only then - fs[#fs + 1] = fmt("size[%f,%f;]", data.iX - 0.35, iY + 4) - - fs[#fs + 1] = "background9[1,1;1,1;mcl_base_textures_background9.png;true;7]" - - fs[#fs + 1] = fmt([[ tooltip[size_inc;%s] - tooltip[size_dec;%s] ]], - ESC(S("Increase window size")), - ESC(S("Decrease window size"))) - - fs[#fs + 1] = fmt([[ - image_button[%f,0.12;0.8,0.8;craftguide_zoomin_icon.png;size_inc;] - image_button[%f,0.12;0.8,0.8;craftguide_zoomout_icon.png;size_dec;] ]], - data.iX * 0.47, - data.iX * 0.47 + 0.6) - end - - fs[#fs + 1] = [[ - image_button[2.4,0.12;0.8,0.8;craftguide_search_icon.png;search;] - image_button[3.05,0.12;0.8,0.8;craftguide_clear_icon.png;clear;] - field_close_on_enter[filter;false] - ]] - - fs[#fs + 1] = fmt([[ tooltip[search;%s] - tooltip[clear;%s] - tooltip[prev;%s] - tooltip[next;%s] ]], - ESC(S("Search")), - ESC(S("Reset")), - ESC(S("Previous page")), - ESC(S("Next page"))) - - fs[#fs + 1] = fmt("label[%f,%f;%s]", - sfinv_only and 6.3 or data.iX - 2.2, - 0.22, - ESC(colorize("#383838", fmt("%s / %u", data.pagenum, data.pagemax)))) - - fs[#fs + 1] = fmt([[ - image_button[%f,0.12;0.8,0.8;craftguide_prev_icon.png;prev;] - image_button[%f,0.12;0.8,0.8;craftguide_next_icon.png;next;] ]], - sfinv_only and 5.5 or data.iX - 3.1, - sfinv_only and 7.3 or (data.iX - 1.2) - (data.iX >= 11 and 0.08 or 0)) - - fs[#fs + 1] = fmt("field[0.3,0.32;2.5,1;filter;;%s]", ESC(data.filter)) - - if #data.items == 0 then - local no_item = S("No item to show") - local pos = (data.iX / 2) - 1 - - if next(recipe_filters) and #init_items > 0 and data.filter == "" then - no_item = S("Collect items to reveal more recipes") - pos = pos - 1 - end - - fs[#fs + 1] = fmt(FMT.label, pos, 2, ESC(no_item)) - end - - local first_item = (data.pagenum - 1) * ipp - for i = first_item, first_item + ipp - 1 do - local item = data.items[i + 1] - if not item then - break - end - - local X = i % data.iX - local Y = (i % ipp - X) / data.iX + 1 - - fs[#fs + 1] = fmt("item_image_button[%f,%f;%f,%f;%s;%s_inv;]", - X - (sfinv_only and 0 or (X * 0.05)), - Y, - 1.1, - 1.1, - item, - item) - end - - if data.recipes and #data.recipes > 0 then - fs[#fs + 1] = get_recipe_fs(data, iY) - end - - for elem_name, def in pairs(formspec_elements) do - local element = def.element(data) - if element then - if find(def.type, "button") then - insert(element, #element, elem_name) - end - - fs[#fs + 1] = fmt(FMT[def.type], unpack(element)) - end - end - - return concat(fs) -end - -local function show_fs(player, name) - if sfinv_only then - sfinv.set_player_inventory_formspec(player) - else - show_formspec(name, "mcl_craftguide", make_formspec(name)) - end -end - -mcl_craftguide.add_search_filter("groups", function(item, groups) - local itemdef = reg_items[item] - local has_groups = true - - for i = 1, #groups do - local group = groups[i] - if not itemdef.groups[group] then - has_groups = nil - break - end - end - - return has_groups -end) - -local function search(data) - local filter = data.filter - - if searches[filter] then - data.items = searches[filter] - return - end - - local filtered_list, c = {}, 0 - local extras = "^(.-)%+([%w_]+)=([%w_,]+)" - local search_filter = next(search_filters) and match(filter, extras) - local filters = {} - - if search_filter then - for filter_name, values in gmatch(filter, sub(extras, 6, -1)) do - if search_filters[filter_name] then - values = split(values, ",") - filters[filter_name] = values - end - end - end - - for i = 1, #data.items_raw do - local item = data.items_raw[i] - local def = reg_items[item] - local desc = lower(def.description) - local search_in = item .. desc - local to_add - - if search_filter then - for filter_name, values in pairs(filters) do - local func = search_filters[filter_name] - to_add = func(item, values) and (search_filter == "" or - find(search_in, search_filter, 1, true)) - end - else - to_add = find(search_in, filter, 1, true) - end - - if to_add then - c = c + 1 - filtered_list[c] = item - end - end - - if not next(recipe_filters) then - -- Cache the results only if searched 2 times - if searches[filter] == nil then - searches[filter] = false - else - searches[filter] = filtered_list - end - end - - data.items = filtered_list -end - -local function get_inv_items(player) - local inv = player:get_inventory() - local stacks = {} - - for i = 1, #item_lists do - local list = inv:get_list(item_lists[i]) - table_merge(stacks, list) - end - - local inv_items, c = {}, 0 - - for i = 1, #stacks do - local stack = stacks[i] - if not stack:is_empty() then - local name = stack:get_name() - if reg_items[name] then - c = c + 1 - inv_items[c] = name - end - end - end - - return inv_items -end - -local function init_data(name) - player_data[name] = { - filter = "", - pagenum = 1, - iX = sfinv_only and 8 or DEFAULT_SIZE, - items = init_items, - items_raw = init_items, - } -end - -local function reset_data(data) - data.filter = "" - data.pagenum = 1 - data.rnum = 1 - data.query_item = nil - data.show_usages = nil - data.recipes = nil - data.items = data.items_raw -end - -local function cache_usages() - for i = 1, #init_items do - local item = init_items[i] - usages_cache[item] = get_item_usages(item) - end -end - -local function get_init_items() - local c = 0 - for name, def in pairs(reg_items) do - local is_fuel = cache_fuel(name) - if not (def.groups.not_in_craft_guide == 1) and - def.description and def.description ~= "" and - (cache_recipes(name) or is_fuel) then - c = c + 1 - init_items[c] = name - end - end - - sort(init_items) - cache_usages() -end - -local function on_receive_fields(player, fields) - local name = player:get_player_name() - local data = player_data[name] - - for elem_name, def in pairs(formspec_elements) do - if fields[elem_name] and def.action then - return def.action(player, data) - end - end - - if fields.clear then - reset_data(data) - show_fs(player, name) - - elseif fields.alternate then - if #data.recipes == 1 then - return - end - - local num_next = data.rnum + 1 - data.rnum = data.recipes[num_next] and num_next or 1 - show_fs(player, name) - - elseif (fields.key_enter_field == "filter" or fields.search) and - fields.filter ~= "" then - local fltr = lower(fields.filter) - if data.filter == fltr then - return - end - - data.filter = fltr - data.pagenum = 1 - search(data) - show_fs(player, name) - - elseif fields.prev or fields.next then - if data.pagemax == 1 then - return - end - - data.pagenum = data.pagenum - (fields.prev and 1 or -1) - - if data.pagenum > data.pagemax then - data.pagenum = 1 - elseif data.pagenum == 0 then - data.pagenum = data.pagemax - end - - show_fs(player, name) - - elseif (fields.size_inc and data.iX < MAX_LIMIT) or - (fields.size_dec and data.iX > MIN_LIMIT) then - data.pagenum = 1 - data.iX = data.iX + (fields.size_inc and 1 or -1) - show_fs(player, name) - else - local item - for field in pairs(fields) do - if find(field, ":") then - item = field - break - end - end - - if not item then - return - elseif sub(item, -4) == "_inv" then - item = sub(item, 1, -5) - end - - if item ~= data.query_item then - data.show_usages = nil - else - data.show_usages = not data.show_usages - end - - local recipes = get_recipes(item, data, player) - if not recipes then - return - end - - data.query_item = item - data.recipes = recipes - data.rnum = 1 - - show_fs(player, name) - end -end - -M.register_on_mods_loaded(get_init_items) - --- TODO: Remove sfinv support -if sfinv_only then - sfinv.register_page("craftguide:craftguide", { - title = "Craft Guide", - - get = function(self, player, context) - local name = player:get_player_name() - local formspec = make_formspec(name) - - return sfinv.make_formspec(player, context, formspec) - end, - - on_enter = function(self, player, context) - if next(recipe_filters) then - local name = player:get_player_name() - local data = player_data[name] - - data.items_raw = get_filtered_items(player) - search(data) - end - end, - - on_player_receive_fields = function(self, player, context, fields) - on_receive_fields(player, fields) - end, - }) -else - M.register_on_player_receive_fields(function(player, formname, fields) - if formname == "mcl_craftguide" then - on_receive_fields(player, fields) - elseif fields.__mcl_craftguide then - mcl_craftguide.show(player:get_player_name()) - end - end) - - --[[local function on_use(user) - local name = user:get_player_name() - - if next(recipe_filters) then - local data = player_data[name] - data.items_raw = get_filtered_items(user) - search(data) - end - - show_formspec(name, "mcl_craftguide", make_formspec(name)) - end]] - -end - -if progressive_mode then - local function item_in_inv(item, inv_items) - local inv_items_size = #inv_items - - if sub(item, 1, 6) == "group:" then - local groups = extract_groups(item) - for i = 1, inv_items_size do - local inv_item = reg_items[inv_items[i]] - if inv_item then - local item_groups = inv_item.groups - if item_has_groups(item_groups, groups) then - return true - end - end - end - else - for i = 1, inv_items_size do - if inv_items[i] == item then - return true - end - end - end - end - - local function recipe_in_inv(recipe, inv_items) - for _, item in pairs(recipe.items) do - if not item_in_inv(item, inv_items) then - return - end - end - - return true - end - - local function progressive_filter(recipes, player) - local name = player:get_player_name() - local data = player_data[name] - - if #data.inv_items == 0 then - return {} - end - - local filtered, c = {}, 0 - for i = 1, #recipes do - local recipe = recipes[i] - if recipe_in_inv(recipe, data.inv_items) then - c = c + 1 - filtered[c] = recipe - end - end - - return filtered - end - - -- Workaround. Need an engine call to detect when the contents - -- of the player inventory changed, instead. - local function poll_new_items() - local players = M.get_connected_players() - for i = 1, #players do - local player = players[i] - local name = player:get_player_name() - local data = player_data[name] - local inv_items = get_inv_items(player) - local diff = table_diff(inv_items, data.inv_items) - - if #diff > 0 then - data.inv_items = table_merge(diff, data.inv_items) - end - end - - M.after(POLL_FREQ, poll_new_items) - end - - M.register_on_mods_loaded(function() - M.after(1, poll_new_items) - end) - - mcl_craftguide.add_recipe_filter("Default progressive filter", progressive_filter) - - M.register_on_joinplayer(function(player) - local name = player:get_player_name() - init_data(name) - local meta = player:get_meta() - local data = player_data[name] - - data.inv_items = deserialize(meta:get_string("inv_items")) or {} - end) - - local function save_meta(player) - local meta = player:get_meta() - local name = player:get_player_name() - local data = player_data[name] - - if not data then - return - end - - local inv_items = data.inv_items or {} - - meta:set_string("inv_items", serialize(inv_items)) - end - - M.register_on_leaveplayer(function(player) - save_meta(player) - local name = player:get_player_name() - player_data[name] = nil - end) - - M.register_on_shutdown(function() - local players = M.get_connected_players() - for i = 1, #players do - local player = players[i] - save_meta(player) - end - end) -else - M.register_on_joinplayer(function(player) - local name = player:get_player_name() - init_data(name) - end) - - M.register_on_leaveplayer(function(player) - local name = player:get_player_name() - player_data[name] = nil - end) -end - -function mcl_craftguide.show(name) - local player = get_player_by_name(name) - if next(recipe_filters) then - local data = player_data[name] - data.items_raw = get_filtered_items(player) - search(data) - end - show_formspec(name, "mcl_craftguide", make_formspec(name)) -end - ---[[ Custom recipes (>3x3) test code - -M.register_craftitem(":secretstuff:custom_recipe_test", { - description = "Custom Recipe Test", -}) - -local cr = {} -for x = 1, 6 do - cr[x] = {} - for i = 1, 10 - x do - cr[x][i] = {} - for j = 1, 10 - x do - cr[x][i][j] = "group:wood" - end - end - - M.register_craft({ - output = "secretstuff:custom_recipe_test", - recipe = cr[x] - }) -end -]] diff --git a/mods/HELP/mcl_craftguide/license.txt b/mods/HELP/mcl_craftguide/license.txt deleted file mode 100644 index 57174d4d66..0000000000 --- a/mods/HELP/mcl_craftguide/license.txt +++ /dev/null @@ -1,58 +0,0 @@ -License of source code ----------------------- - -The MIT License (MIT) - -Copyright (c) 2015-2019 Jean-Patrick Guerrero and contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -Licenses of media (textures) ----------------------------- - -Copyright © Diego Martínez (kaeza): craftguide_*_icon.png (CC BY-SA 3.0) - -You are free to: -Share — copy and redistribute the material in any medium or format. -Adapt — remix, transform, and build upon the material for any purpose, even commercially. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -ShareAlike — If you remix, transform, or build upon the material, you must distribute -your contributions under the same license as the original. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.de.tr b/mods/HELP/mcl_craftguide/locale/mcl_craftguide.de.tr deleted file mode 100644 index 5d8ea21b14..0000000000 --- a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.de.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_craftguide -Any shulker box=Beliebige Schulkerkiste -Any wool=Beliebige Wolle -Any wood planks=Beliebige Holzplanken -Any wood=Beliebiges Holz -Any sand=Beliebiger Sand -Any normal sandstone=Beliebiger normaler Sandstein -Any red sandstone=Beliebiger roter Sandstein -Any carpet=Beliebiger Teppich -Any dye=Beliebiger Farbstoff -Any water bucket=Beliebiger Wassereimer -Any flower=Beliebige Blume -Any mushroom=Beliebiger Pilz -Any wooden slab=Beliebige Holzplatte -Any wooden stairs=Beliebgie Holztreppe -Any coal=Beliebige Kohle -Any kind of quartz block=Beliebiger Quarzblock -Any kind of purpur block=Beliebiger Purpurblock -Any stone bricks=Beliebige Steinziegel -Any stick=Beliebiger Stock -Any item belonging to the @1 group=Beliebiger Gegenstand aus Gruppe: @1 -Any item belonging to the groups: @1=Beliebiger Gegenstand aus den Gruppen: @1 -Search=Suche -Reset=Zurücksetzen -Previous page=Vorherige Seite -Next page=Nächste Seite -Usage @1 of @2=Verwendung @1 von @2 -Recipe @1 of @2=Rezept @1 von @2 -Burning time: @1=Brennzeit: @1 -Cooking time: @1=Kochzeit: @1 -Recipe is too big to be displayed (@1×@2)=Rezept ist zu groß für die Anzeige (@1×@2) -Shapeless=Formlos -Cooking=Kochen -Increase window size=Fenster vergrößern -Decrease window size=Fenster verkleinern -No item to show=Nichts anzuzeigen -Collect items to reveal more recipes=Gegenstände aufsammeln, um mehr Rezepte aufzudecken diff --git a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.fr.tr b/mods/HELP/mcl_craftguide/locale/mcl_craftguide.fr.tr deleted file mode 100644 index cf35d788b5..0000000000 --- a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.fr.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_craftguide -Any shulker box=Toutes boîtes shulker -Any wool=Toutes laines -Any wood planks=Toutes planches de bois -Any wood=Tout bois -Any sand=Tout sable -Any normal sandstone=Tout grès normal -Any red sandstone=Tout grès rouge -Any carpet=Tout tapis -Any dye=Tout colorant -Any water bucket=Tout seau d'eau -Any flower=Toute fleur -Any mushroom=Tout Champignon -Any wooden slab=Toute dalle de bois -Any wooden stairs=Tout escalier de bois -Any coal=Tout charbon -Any kind of quartz block=Toute sorte de bloc de quartz -Any kind of purpur block=Toute sorte de bloc de purpur -Any stone bricks=Tout brique de pierre -Any stick=Tout bâton -Any item belonging to the @1 group=Tout élément appartenant au groupe @1 -Any item belonging to the groups: @1=Tout élément appartenant aux groupes: @1 -Search=Rechercher -Reset=Réinitialiser -Previous page=Page précédente -Next page=Page suivante -Usage @1 of @2=Usage @1 de @2 -Recipe @1 of @2=Recette @1 de @2 -Burning time: @1=Temps de combustion : @1 -Cooking time: @1=Temps de cuisson : @1 -Recipe is too big to be displayed (@1×@2)=La recette est trop grande pour être affichée (@1x@2) -Shapeless=Sans forme -Cooking=Cuisson -Increase window size=Agrandir la fenêtre -Decrease window size=Réduire la fenêtre -No item to show=Aucun item à afficher -Collect items to reveal more recipes=Collecte des items pour révéler plus de recettes diff --git a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.pl.tr b/mods/HELP/mcl_craftguide/locale/mcl_craftguide.pl.tr deleted file mode 100644 index 064fd90d33..0000000000 --- a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.pl.tr +++ /dev/null @@ -1,38 +0,0 @@ -# textdomain: mcl_craftguide -Any shulker box=Dowolna skrzynia shulkerowa -Any wool=Dowolna wełna -Any wood planks=Dowolne deski -Any wood=Dowolne drewno -Any sand=Dowolny piasek -Any normal sandstone=Dowolny zwykły piaskowiec -Any red sandstone=Dowolny czerwony piaskowiec -Any carpet=Dowolny dywan -Any dye=Dowolna farba -Any water bucket=Dowolne wiadro wody -Any flower=Dowolny kwiat -Any mushroom=Dowolny grzyb -Any wooden slab=Dowolny drewniana płyta -Any wooden stairs=Dowolne drewniane schody -Any coal=Dowolny węgiel -Any kind of quartz block=Dowolny typ bloku kwarcu -Any kind of purpur block=Dowolny typ bloku purpury -Any stone bricks=Dowolne kamienne cegły -Any stick=Dowolny patyk -Any item belonging to the @1 group=Dowolny przedmiot z grupy @1 -Any item belonging to the groups: @1=Dowolny przedmiot należący do grup: @1 -Search=Wyszukaj -Reset=Zresetuj -Previous page=Poprzednia strona -Next page=Następna strona -Usage @1 of @2=Użycie @1 z @2 -Recipe @1 of @2=Receptura @1 z @2 -Burning time: @1=Czas wypalenia: @1 -Cooking time: @1=Czas pieczenia: @1 -Recipe is too big to be displayed (@1×@2)=Receptura jest zbyt długa do wyświetlenia (@1×@2) -Shapeless=Bezkształtne -Cooking=Pieczenie -Increase window size=Zwiększ rozmiar okna -Decrease window size=Zmniejsz rozmiar okna -No item to show=Brak przedmiotów do pokazania -Collect items to reveal more recipes=Zbierz przedmioty by odkryć więcej receptur - diff --git a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.ru.tr b/mods/HELP/mcl_craftguide/locale/mcl_craftguide.ru.tr deleted file mode 100644 index ae2f28a9c9..0000000000 --- a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.ru.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_craftguide -Any shulker box=Любой ящик шалкера -Any wool=Любая шерсть -Any wood planks=Любые доски -Any wood=Любое дерево -Any sand=Любой песок -Any normal sandstone=Любой обычный песчаник -Any red sandstone=Любой красный песчаник -Any carpet=Любое покрытие -Any dye=Любой краситель -Any water bucket=Любое ведро воды -Any flower=Любой цветок -Any mushroom=Любой гриб -Any wooden slab=Любая деревянная плита -Any wooden stairs=Любые деревянные ступеньки -Any coal=Любой уголь -Any kind of quartz block=Любой кварцевый блок -Any kind of purpur block=Любой фиолетовый блок -Any stone bricks=Любые каменные блоки -Any stick=Любая палка -Any item belonging to the @1 group=Любой предмет, относящийся к группе @1 -Any item belonging to the groups: @1=Любой предмет, относящийся к группам: @1 -Search=Поиск -Reset=Сброс -Previous page=Предыдущая страница -Next page=Следующая страница -Usage @1 of @2=Использование @1 из @2 -Recipe @1 of @2=Рецепт @1 из @2 -Burning time: @1=Время горения: @1 -Cooking time: @1=Время приготовления: @1 -Recipe is too big to be displayed (@1×@2)=Рецепт слишком большой для отображения (@1×@2) -Shapeless=Бесформенный -Cooking=Приготовление -Increase window size=Увеличить окно -Decrease window size=Уменьшить окно -No item to show=Нет элемента для показа -Collect items to reveal more recipes=Для рецептов нужны предметы diff --git a/mods/HELP/mcl_craftguide/locale/template.txt b/mods/HELP/mcl_craftguide/locale/template.txt deleted file mode 100644 index 66c5adcac3..0000000000 --- a/mods/HELP/mcl_craftguide/locale/template.txt +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: craftguide -Any shulker box= -Any wool= -Any wood planks= -Any wood= -Any sand= -Any normal sandstone= -Any red sandstone= -Any carpet= -Any dye= -Any water bucket= -Any flower= -Any mushroom= -Any wooden slab= -Any wooden stairs= -Any coal= -Any kind of quartz block= -Any kind of purpur block= -Any stone bricks= -Any stick= -Any item belonging to the @1 group= -Any item belonging to the groups: @1= -Search= -Reset= -Previous page= -Next page= -Usage @1 of @2= -Recipe @1 of @2= -Burning time: @1= -Cooking time: @1= -Recipe is too big to be displayed (@1×@2)= -Shapeless= -Cooking= -Increase window size= -Decrease window size= -No item to show= -Collect items to reveal more recipes= diff --git a/mods/HELP/mcl_craftguide/mod.conf b/mods/HELP/mcl_craftguide/mod.conf deleted file mode 100644 index ce99c0e32e..0000000000 --- a/mods/HELP/mcl_craftguide/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_craftguide -author = kilbith -description = The most comprehensive Crafting Guide on Minetest. -depends = mcl_core, mcl_compass, mcl_clock, doc, mcl_colors -optional_depends = sfinv, sfinv_buttons diff --git a/mods/HELP/mcl_craftguide/settingtypes.txt b/mods/HELP/mcl_craftguide/settingtypes.txt deleted file mode 100644 index dd3a5915e9..0000000000 --- a/mods/HELP/mcl_craftguide/settingtypes.txt +++ /dev/null @@ -1,4 +0,0 @@ -# If enabled, the recipe book will progressively be filled with new recipes that can be crafted from all items you ever have had in your inventory. -# Recommended for new players and for a spoiler-free gameplay experience. -# If disabled, all recipes will be shown. -mcl_craftguide_progressive_mode (Learn crafting recipes progressively) bool true diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_arrow.png b/mods/HELP/mcl_craftguide/textures/craftguide_arrow.png deleted file mode 100644 index cde70b1ce7..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_arrow.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_book.png b/mods/HELP/mcl_craftguide/textures/craftguide_book.png deleted file mode 100644 index 509f2350ab..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_book.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_clear_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_clear_icon.png deleted file mode 100644 index 9244264adc..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_clear_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_furnace.png b/mods/HELP/mcl_craftguide/textures/craftguide_furnace.png deleted file mode 100644 index c425604d25..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_furnace.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_next_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_next_icon.png deleted file mode 100644 index 82cf3d3616..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_next_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_prev_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_prev_icon.png deleted file mode 100644 index b26cd157f9..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_prev_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_search_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_search_icon.png deleted file mode 100644 index aace8044ac..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_search_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_shapeless.png b/mods/HELP/mcl_craftguide/textures/craftguide_shapeless.png deleted file mode 100644 index 2b4edc4c13..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_shapeless.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_zoomin_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_zoomin_icon.png deleted file mode 100644 index 5b8ecc2cbd..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_zoomin_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/craftguide_zoomout_icon.png b/mods/HELP/mcl_craftguide/textures/craftguide_zoomout_icon.png deleted file mode 100644 index 7db747fdac..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/craftguide_zoomout_icon.png and /dev/null differ diff --git a/mods/HELP/mcl_craftguide/textures/mcl_craftguide_fuel.png b/mods/HELP/mcl_craftguide/textures/mcl_craftguide_fuel.png deleted file mode 100644 index 2e3cc8f471..0000000000 Binary files a/mods/HELP/mcl_craftguide/textures/mcl_craftguide_fuel.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/README b/mods/ITEMS/REDSTONE/README deleted file mode 100644 index 779cfa4160..0000000000 --- a/mods/ITEMS/REDSTONE/README +++ /dev/null @@ -1,28 +0,0 @@ --- |\ /| ____ ____ ____ _____ ____ _____ --- | \ / | | | | | | | |\ | | --- | \/ | |___ ____ |___ | | | | \ | |____ --- | | | | | | | | | \ | | --- | | |___ ____| |___ |____ |____| | \| ____| --- by Jeija and contributors - -Credits: -Jeija: main developer -VanessaE: Awesome textures & design, coding -sfan5: coding, textures -temperest: coding, textures -Jordach: Sounds for the noteblock -minerd247: Some textures -suzenako: Piston sounds -...other contributors - -This is a mod for minetest-c55. -Copy the minetest-mod-mesecons directory into you game's mod folder -(e.g. games/minetest_game/mods/minetest-mod-mesecons) - -You can remove modules of this mod by deleting the mesecons_* -folders in the minetest-mod-mesecons directory. - -Mod dependencies: none - -Code license: LGPLv3 or later -Media license: CC BY-SA 3.0 diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/init.lua b/mods/ITEMS/REDSTONE/mcl_comparators/init.lua deleted file mode 100644 index 01b42c3403..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/init.lua +++ /dev/null @@ -1,365 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Functions that get the input/output rules of the comparator - -local function comparator_get_output_rules(node) - local rules = {{x = -1, y = 0, z = 0, spread=true}} - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - - -local function comparator_get_input_rules(node) - local rules = { - -- we rely on this order in update_self below - {x = 1, y = 0, z = 0}, -- back - {x = 0, y = 0, z = -1}, -- side - {x = 0, y = 0, z = 1}, -- side - } - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - - --- Functions that are called after the delay time - -local function comparator_turnon(params) - local rules = comparator_get_output_rules(params.node) - mesecon.receptor_on(params.pos, rules) -end - - -local function comparator_turnoff(params) - local rules = comparator_get_output_rules(params.node) - mesecon.receptor_off(params.pos, rules) -end - - --- Functions that set the correct node type an schedule a turnon/off - -local function comparator_activate(pos, node) - local def = minetest.registered_nodes[node.name] - local onstate = def.comparator_onstate - if onstate then - minetest.swap_node(pos, { name = onstate, param2 = node.param2 }) - end - minetest.after(0.1, comparator_turnon , {pos = pos, node = node}) -end - - -local function comparator_deactivate(pos, node) - local def = minetest.registered_nodes[node.name] - local offstate = def.comparator_offstate - if offstate then - minetest.swap_node(pos, { name = offstate, param2 = node.param2 }) - end - minetest.after(0.1, comparator_turnoff, {pos = pos, node = node}) -end - - --- weather pos has an inventory that contains at least one item -local function container_inventory_nonempty(pos) - local invnode = minetest.get_node(pos) - local invnodedef = minetest.registered_nodes[invnode.name] - -- Ignore stale nodes - if not invnodedef then return false end - - -- Only accept containers. When a container is dug, it's inventory - -- seems to stay. and we don't want to accept the inventory of an air - -- block - if not invnodedef.groups.container then return false end - - local inv = minetest.get_inventory({type="node", pos=pos}) - if not inv then return false end - - for listname, _ in pairs(inv:get_lists()) do - if not inv:is_empty(listname) then return true end - end - - return false -end - --- weather pos has an constant signal output for the comparator -local function static_signal_output(pos) - local node = minetest.get_node(pos) - local g = minetest.get_item_group(node.name, "comparator_signal") - return g > 0 -end - --- whether the comparator should be on according to its inputs -local function comparator_desired_on(pos, node) - local my_input_rules = comparator_get_input_rules(node); - local back_rule = my_input_rules[1] - local state - if back_rule then - local back_pos = vector.add(pos, back_rule) - state = mesecon.is_power_on(back_pos) or container_inventory_nonempty(back_pos) or static_signal_output(back_pos) - end - - -- if back input if off, we don't need to check side inputs - if not state then return false end - - -- without power levels, side inputs have no influence on output in compare - -- mode - local mode = minetest.registered_nodes[node.name].comparator_mode - if mode == "comp" then return state end - - -- subtract mode, subtract max(side_inputs) from back input - local side_state = false - for ri = 2,3 do - if my_input_rules[ri] then - side_state = mesecon.is_power_on(vector.add(pos, my_input_rules[ri])) - end - if side_state then break end - end - -- state is known to be true - return not side_state -end - - --- update comparator state, if needed -local function update_self(pos, node) - node = node or minetest.get_node(pos) - local old_state = mesecon.is_receptor_on(node.name) - local new_state = comparator_desired_on(pos, node) - if new_state ~= old_state then - if new_state then - comparator_activate(pos, node) - else - comparator_deactivate(pos, node) - end - end -end - - --- compute tile depending on state and mode -local function get_tiles(state, mode) - local top = "mcl_comparators_"..state..".png^".. - "mcl_comparators_"..mode..".png" - local sides = "mcl_comparators_sides_"..state..".png^".. - "mcl_comparators_sides_"..mode..".png" - local ends = "mcl_comparators_ends_"..state..".png^".. - "mcl_comparators_ends_"..mode..".png" - return { - top, "mcl_stairs_stone_slab_top.png", - sides, sides.."^[transformFX", - ends, ends, - } -end - --- Given one mode, get the other mode -local function flipmode(mode) - if mode == "comp" then return "sub" - elseif mode == "sub" then return "comp" - end -end - -local function make_rightclick_handler(state, mode) - local newnodename = - "mcl_comparators:comparator_"..state.."_"..flipmode(mode) - return function (pos, node, clicker) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - minetest.swap_node(pos, {name = newnodename, param2 = node.param2 }) - end -end - - --- Register the 2 (states) x 2 (modes) comparators - -local icon = "mcl_comparators_item.png" - -local node_boxes = { - comp = { - { -8/16, -8/16, -8/16, - 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, - 1/16, -4/16, 4/16 }, -- front torch - { -4/16, -6/16, -5/16, - -2/16, -1/16, -3/16 }, -- left back torch - { 2/16, -6/16, -5/16, - 4/16, -1/16, -3/16 }, -- right back torch - }, - sub = { - { -8/16, -8/16, -8/16, - 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, - 1/16, -3/16, 4/16 }, -- front torch (active) - { -4/16, -6/16, -5/16, - -2/16, -1/16, -3/16 }, -- left back torch - { 2/16, -6/16, -5/16, - 4/16, -1/16, -3/16 }, -- right back torch - }, -} - -local collision_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -} - -local state_strs = { - [ mesecon.state.on ] = "on", - [ mesecon.state.off ] = "off", -} - -local groups = { - dig_immediate = 3, - dig_by_water = 1, - destroy_by_lava_flow = 1, - dig_by_piston = 1, - attached_node = 1, -} - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.disallow -end - -for _, mode in pairs{"comp", "sub"} do - for _, state in pairs{mesecon.state.on, mesecon.state.off} do - local state_str = state_strs[state] - local nodename = - "mcl_comparators:comparator_"..state_str.."_"..mode - - -- Help - local longdesc, usagehelp, use_help - if state_str == "off" and mode == "comp" then - longdesc = S("Redstone comparators are multi-purpose redstone components.").."\n".. - S("They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.") - - usagehelp = S("A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.").."\n".. - S("The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.").."\n".. - S("The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.").."\n\n".. - S("Transmission mode:\nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.").."\n".. - S("Subtraction mode:\nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.") - else - use_help = false - end - - local nodedef = { - description = S("Redstone Comparator"), - inventory_image = icon, - wield_image = icon, - _doc_items_create_entry = use_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - drawtype = "nodebox", - tiles = get_tiles(state_str, mode), - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - --wield_image = "mcl_comparators_off.png", - walkable = true, - selection_box = collision_box, - collision_box = collision_box, - node_box = { - type = "fixed", - fixed = node_boxes[mode], - }, - groups = groups, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = false, - is_ground_content = false, - drop = "mcl_comparators:comparator_off_comp", - on_construct = update_self, - on_rightclick = - make_rightclick_handler(state_str, mode), - comparator_mode = mode, - comparator_onstate = "mcl_comparators:comparator_on_"..mode, - comparator_offstate = "mcl_comparators:comparator_off_"..mode, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - receptor = { - state = state, - rules = comparator_get_output_rules, - }, - effector = { - rules = comparator_get_input_rules, - action_change = update_self, - } - }, - on_rotate = on_rotate, - } - - if mode == "comp" and state == mesecon.state.off then - -- This is the prototype - nodedef._doc_items_create_entry = true - else - nodedef.groups = table.copy(nodedef.groups) - nodedef.groups.not_in_creative_inventory = 1 - --local extra_desc = {} - if mode == "sub" or state == mesecon.state.on then - nodedef.inventory_image = nil - end - local desc = nodedef.description - if mode ~= "sub" and state == mesecon.state.on then - desc = S("Redstone Comparator (Powered)") - elseif mode == "sub" and state ~= mesecon.state.on then - desc = S("Redstone Comparator (Subtract)") - elseif mode == "sub" and state == mesecon.state.on then - desc = S("Redstone Comparator (Subtract, Powered)") - end - nodedef.description = desc - end - - minetest.register_node(nodename, nodedef) - mcl_wip.register_wip_item(nodename) - end -end - --- Register recipies -local rstorch = "mesecons_torch:mesecon_torch_on" -local quartz = "mcl_nether:quartz" -local stone = "mcl_core:stone" - -minetest.register_craft({ - output = "mcl_comparators:comparator_off_comp", - recipe = { - { "", rstorch, "" }, - { rstorch, quartz, rstorch }, - { stone, stone, stone }, - } -}) - --- Register active block handlers -minetest.register_abm({ - label = "Comparator signal input check (comparator is off)", - nodenames = { - "mcl_comparators:comparator_off_comp", - "mcl_comparators:comparator_off_sub", - }, - neighbors = {"group:container", "group:comparator_signal"}, - interval = 1, - chance = 1, - action = update_self, -}) - -minetest.register_abm({ - label = "Comparator signal input check (comparator is on)", - nodenames = { - "mcl_comparators:comparator_on_comp", - "mcl_comparators:comparator_on_sub", - }, - -- needs to run regardless of neighbors to make sure we detect when a - -- container is dug - interval = 1, - chance = 1, - action = update_self, -}) - - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_comparators:comparator_off_comp", - "nodes", "mcl_comparators:comparator_off_sub") - doc.add_entry_alias("nodes", "mcl_comparators:comparator_off_comp", - "nodes", "mcl_comparators:comparator_on_comp") - doc.add_entry_alias("nodes", "mcl_comparators:comparator_off_comp", - "nodes", "mcl_comparators:comparator_on_sub") -end diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.de.tr b/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.de.tr deleted file mode 100644 index d9f6eb4635..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.de.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.=Redstonekomparatoren sind Redstonekomponenten mit vielen Verwendungszwecken. -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.=Sie können ein Redstonesignal übertragen, erkennen, ob ein Block Gegenstände enthält und mehrere Signale vergleichen. -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.=Ein Redstonekomparator hat 1 Haupteingang, 2 Seiteneingänge und 1 Ausgang. Der Ausgang ist in Pfeilrichtung, der Haupteingang ist in der gegenüberliegenden Richtung. Die anderen 2 Seiten sind die Seiteneingänge. -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.=Der Haupteingang kann auf 2 Weisen versorgt werden: Erstens, kann er direkt von Redstoneenergie wie bei jeder anderen Komponente versorgt werden. Zweitens wird er versorgt, wenn, und nur wenn ein Behälter (wie eine Truhe) vor dem Komporator platziert wurde und der Behälter mindestens einen Gegenstand enthält. -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.=Die Seiteneingänge akzeptieren nur normale Redstoneenergie. Der Redstonekomparator kann in zwei Modi agieren: Übertragungsmodus und Subtraktionsmodus. Er fängt im Übertragungsmodus an. Der Modus wird beim Benutzen des Blocks geändert. -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.=Übertragungsmodus:@nDie vordere Fackel ist eingefahren und leuchtet nicht auf. Die Ausgabe gibt ein Signal, wenn, nur nur wenn der Haupteingang bestromt wird. Die zwei Seiteneingänge werden ignoriert. -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.=Subtraktionsmodus:@nDie vordere Fackel leuchtet auf. Die Ausgabe gibt ein Signal wenn, nur nur wenn der Haupteingang versorgt wird und keiner der Seiteneingänge bestromt ist. -Redstone Comparator=Redstonekomparator -Redstone Comparator (Subtract)=Redstonekomparator (subtrahieren) -Redstone Comparator (Powered)=Redstonekomparator (bestromt) -Redstone Comparator (Subtract, Powered)=Redstonekomparator (subtrahieren, bestromt) diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.es.tr b/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.es.tr deleted file mode 100644 index 581c0ab143..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.es.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.=Los comparadores de Redstone son componentes multipropósito de redstone. -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.=Pueden transmitir una señal de redstone, detectar si un bloque contiene algún elemento y comparar múltiples señales. -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.=Un comparador redstone tiene 1 entrada principal, 2 entradas laterales y 1 salida. La salida está en la dirección de la flecha, la entrada principal está en la dirección opuesta. Los otros 2 lados son las entradas laterales. -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.=La entrada principal puede alimentarse de 2 maneras: en primer lugar, puede alimentarse directamente mediante redstone como cualquier otro componente. En segundo lugar, se alimenta si, y solo si se coloca un contenedor (como un cofre) frente a él y el contenedor contiene al menos un elemento. -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.=Las entradas laterales solo están alimentadas por la alimentación normal de redstone. El comparador de redstone puede funcionar en dos modos: modo de transmisión y modo de resta. Comienza en modo de transmisión y el modo se puede cambiar usando el bloque. -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.=Modo de transmisión: @nLa antorcha delantera está apagada y baja. La salida se alimenta solo si se alimenta la entrada principal. Las dos entradas laterales se ignoran. -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.=Modo de resta: @nLa antorcha delantera está encendida. La salida se alimenta si, y solo si la entrada principal está alimentada y ninguna de las entradas laterales está alimentada. -Redstone Comparator=Comparador de redstone -Redstone Comparator (Subtract)=Comparador de redstone (Negativo) -Redstone Comparator (Powered)=Comparador de redstone (Motorizado) -Redstone Comparator (Subtract, Powered)=Redstonekomparator (Negativo, Motorizado) diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.fr.tr b/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.fr.tr deleted file mode 100644 index 38a03d3114..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.fr.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.=Les comparateurs Redstone sont des composants Redstone polyvalents. -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.=Ils peuvent transmettre un signal redstone, détecter si un bloc contient des éléments et comparer plusieurs signaux. -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.=Un comparateur redstone a 1 entrée principale, 2 entrées latérales et 1 sortie. La sortie est dans le sens de la flèche, l'entrée principale est dans le sens opposé. Les 2 autres côtés sont les entrées latérales. -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.=L'entrée principale peut être alimentée de 2 manières: Premièrement, elle peut être alimentée directement par une alimentation redstone comme n'importe quel autre composant. Deuxièmement, il est alimenté si et seulement si un conteneur (comme un coffre) est placé devant lui et que le conteneur contient au moins un article. -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.=Les entrées latérales sont uniquement alimentées par une alimentation Redstone normale. Le comparateur redstone peut fonctionner en deux modes: le mode de transmission et le mode de soustraction. Il démarre en mode transmission et le mode peut être changé en utilisant le bloc. -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.=Mode de transmission: @nLa torche avant est éteinte et abaissée. La sortie est alimentée si et seulement si l'entrée principale est alimentée. Les deux entrées latérales sont ignorées. -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.=Mode de soustraction: @nLa torche avant est allumée. La sortie est alimentée si et seulement si l'entrée principale est alimentée et qu'aucune des entrées latérales n'est alimentée. -Redstone Comparator=Comparateur Redstone -Redstone Comparator (Subtract)=Comparateur Redstone (Soustraction) -Redstone Comparator (Powered)=Comparateur Redstone (Alimenté) -Redstone Comparator (Subtract, Powered)=Comparateur Redstone (Soustraction, Alimenté) diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.pl.tr b/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.pl.tr deleted file mode 100644 index e20d253c8a..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.pl.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.=Komparatory są wielofunkcyjnymi mechanizmami czerwienitowymi. -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.=Mogą one przesyłać sygnał czerwienitowy, wykrywać czy blok zawiera przedmioty i porównywać wiele sygnałów. -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.=Komparator ma jedno główne wejście, 2 wejścia poboczne i jedno wyjście. Wyjście jest wskazywane przez strzałkę, wejście jest na przeciwko. Pozostałe dwa wejścia są poboczne. -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.=Główny wejście można zasilać na 2 sposoby: Może być zasilany bezpośrednio energią czerwienitową jak każdy inny komponent, lub gdy przed nim postawiony jest kontener zawierający przynajmniej jeden przedmiot. -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.=Wejścia poboczne są aktywowane przez zwykłą energię czerwienitową. Komparator może działać w dwóch trybach: tryb przekazywania oraz tryb odejmowania. Początkowo jest w trybie przekazywania, a tryb może być zmienione przez użycie go. -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.=Tryb przekazywania:@nPrzednia pochodnia jest niezaświecona i obniżona. Wyjście jest zasilane wtedy i tylko wtedy gdy wejście główne jest zasilane. Wejścia boczne są ignorowane. -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.=Tryb odejmowania:@nPrzednia pochodnia jest zaświecona. Wyjście jest zasilane wtedy i tylko gdy zasilane jest główne wejście, a wejścia boczne nie są. -Redstone Comparator=Komparator -Redstone Comparator (Subtract)=Komparator (odejmowanie) -Redstone Comparator (Powered)=Komparator (zasilony) -Redstone Comparator (Subtract, Powered)=Komparator (odejmowanie, zasilony) - diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.ru.tr b/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.ru.tr deleted file mode 100644 index 39a845d6e8..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.ru.tr +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.=Компаратор это многофункциональный элемент редстоуна. -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.=Он может передавать сигнал редстоуна, определять, содержит ли блок какой-либо предмет, и сравнивать сигналы. -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.=Компаратор имеет 1 основной вход, 2 боковых входа и 1 выход. Выход расположен по направлению стрелки, основной вход в противоположном направлении. Оставшиеся 2 стороны это боковые входы. -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.=Основной вход можно подключать 2 способами: 1) напрямую к энергии редстоуна, как и любой другой компонент; 2) перед компаратором можно установить контейнер (например, сундук), тогда сигнал будет поступать, если в нём содержится хотя бы один предмет. -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.=К боковым входам можно подводить только обычную энергию редстоуна. Компаратор может работать в двух режимах: ПЕРЕДАЧА и ВЫЧИТАНИЕ. Он изначально находится в режиме передачи; режим меняется при [Использовании] данного блока. -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.=Режим ПЕРЕДАЧИ:@nПередний индикатор погашен. На выходе появляется энергия редстоуна, только если она подаётся на основной вход. Состояние боковых входов при этом игнорируются. -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.=Режим ВЫЧИТАНИЯ:@nПередний индикатор светится. На выходе есть сигнал только в том случае, если сигнал есть на основной входе, но при этом его нет ни на одном из боковых входов. -Redstone Comparator=Компаратор -Redstone Comparator (Subtract)=Компаратор (ВЫЧИТАНИЕ) -Redstone Comparator (Powered)=Компаратор (ВКЛЮЧЁН) -Redstone Comparator (Subtract, Powered)=Компаратор (ВЫЧИТАНИЕ, ВКЛЮЧЁН) diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/locale/template.txt b/mods/ITEMS/REDSTONE/mcl_comparators/locale/template.txt deleted file mode 100644 index d22d01765c..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/locale/template.txt +++ /dev/null @@ -1,12 +0,0 @@ -# textdomain: mcl_comparators -Redstone comparators are multi-purpose redstone components.= -They can transmit a redstone signal, detect whether a block contains any items and compare multiple signals.= -A redstone comparator has 1 main input, 2 side inputs and 1 output. The output is in arrow direction, the main input is in the opposite direction. The other 2 sides are the side inputs.= -The main input can powered in 2 ways: First, it can be powered directly by redstone power like any other component. Second, it is powered if, and only if a container (like a chest) is placed in front of it and the container contains at least one item.= -The side inputs are only powered by normal redstone power. The redstone comparator can operate in two modes: Transmission mode and subtraction mode. It starts in transmission mode and the mode can be changed by using the block.= -Transmission mode:@nThe front torch is unlit and lowered. The output is powered if, and only if the main input is powered. The two side inputs are ignored.= -Subtraction mode:@nThe front torch is lit. The output is powered if, and only if the main input is powered and none of the side inputs is powered.= -Redstone Comparator= -Redstone Comparator (Subtract)= -Redstone Comparator (Powered)= -Redstone Comparator (Subtract, Powered)= diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/mod.conf b/mods/ITEMS/REDSTONE/mcl_comparators/mod.conf deleted file mode 100644 index 100e42814f..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_comparators/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_comparators -depends = mcl_wip, mesecons, mcl_sounds -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_comp.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_comp.png deleted file mode 100644 index 9967cf5c15..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_comp.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_comp.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_comp.png deleted file mode 100644 index 3b8e7477bd..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_comp.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_off.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_off.png deleted file mode 100644 index 02ccb50aea..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_on.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_on.png deleted file mode 100644 index 33505b3830..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_sub.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_sub.png deleted file mode 100644 index f0697465df..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_ends_sub.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_item.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_item.png deleted file mode 100644 index 7febe579c1..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_item.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_off.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_off.png deleted file mode 100644 index b7affc2eaf..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_on.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_on.png deleted file mode 100644 index c2e250d50c..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_comp.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_comp.png deleted file mode 100644 index 536d61bf93..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_comp.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_off.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_off.png deleted file mode 100644 index ba70c3efe9..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_on.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_on.png deleted file mode 100644 index bb683c933f..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_sub.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_sub.png deleted file mode 100644 index 76d9187d3f..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sides_sub.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sub.png b/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sub.png deleted file mode 100644 index a62e6c7f66..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_comparators/textures/mcl_comparators_sub.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/init.lua b/mods/ITEMS/REDSTONE/mcl_droppers/init.lua deleted file mode 100644 index abb3510913..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/init.lua +++ /dev/null @@ -1,221 +0,0 @@ ---[[ This mod registers 3 nodes: -- One node for the horizontal-facing dropper (mcl_droppers:dropper) -- One node for the upwards-facing droppers (mcl_droppers:dropper_up) -- One node for the downwards-facing droppers (mcl_droppers:dropper_down) - -3 node definitions are needed because of the way the textures are defined. -All node definitions share a lot of code, so this is the reason why there -are so many weird tables below. -]] - -local S = minetest.get_translator(minetest.get_current_modname()) - --- For after_place_node -local function setup_dropper(pos) - -- Set formspec and inventory - local form = "size[9,8.75]".. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", 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).. - "label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dropper"))).."]".. - "list[context;main;3,0.5;3,3;]".. - mcl_formspec.get_itemslot_bg(3,0.5,3,3).. - "listring[context;main]".. - "listring[current_player;main]" - local meta = minetest.get_meta(pos) - meta:set_string("formspec", form) - local inv = meta:get_inventory() - inv:set_size("main", 9) -end - -local function orientate_dropper(pos, placer) - -- Not placed by player - if not placer then return end - - -- Pitch in degrees - local pitch = placer:get_look_vertical() * (180 / math.pi) - - if pitch > 55 then - minetest.swap_node(pos, {name="mcl_droppers:dropper_up"}) - elseif pitch < -55 then - minetest.swap_node(pos, {name="mcl_droppers:dropper_down"}) - end -end - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple -end - --- Shared core definition table -local dropperdef = { - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta:to_table() - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for i=1, inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2) - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - mesecons = {effector = { - -- Drop random item when triggered - action_on = function(pos, node) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local droppos - if node.name == "mcl_droppers:dropper" then - droppos = vector.subtract(pos, minetest.facedir_to_dir(node.param2)) - elseif node.name == "mcl_droppers:dropper_up" then - droppos = {x=pos.x, y=pos.y+1, z=pos.z} - elseif node.name == "mcl_droppers:dropper_down" then - droppos = {x=pos.x, y=pos.y-1, z=pos.z} - end - local dropnode = minetest.get_node(droppos) - -- Do not drop into solid nodes, unless they are containers - local dropnodedef = minetest.registered_nodes[dropnode.name] - if dropnodedef.walkable and not dropnodedef.groups.container then - return - end - local stacks = {} - for i=1,inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - table.insert(stacks, {stack = stack, stackpos = i}) - end - end - if #stacks >= 1 then - local r = math.random(1, #stacks) - local stack = stacks[r].stack - local dropitem = ItemStack(stack) - dropitem:set_count(1) - local stack_id = stacks[r].stackpos - - -- If it's a container, attempt to put it into the container - local dropped = mcl_util.move_item_container(pos, droppos, nil, stack_id) - -- No container? - if not dropped and not dropnodedef.groups.container then - -- Drop item normally - minetest.add_item(droppos, dropitem) - stack:take_item() - inv:set_stack("main", stack_id, stack) - end - end - end, - rules = mesecon.rules.alldirs, - }}, - on_rotate = on_rotate, -} - --- Horizontal dropper - -local horizontal_def = table.copy(dropperdef) -horizontal_def.description = S("Dropper") -horizontal_def._tt_help = S("9 inventory slots").."\n"..S("Drops item when powered by redstone power") -horizontal_def._doc_items_longdesc = S("A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.") -horizontal_def._doc_items_usagehelp = S("Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.") -function horizontal_def.after_place_node(pos, placer, itemstack, pointed_thing) - setup_dropper(pos) - orientate_dropper(pos, placer) -end -horizontal_def.tiles = { - "default_furnace_top.png", "default_furnace_bottom.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "mcl_droppers_dropper_front_horizontal.png" -} -horizontal_def.paramtype2 = "facedir" -horizontal_def.groups = {pickaxey=1, container=2, material_stone=1} - -minetest.register_node("mcl_droppers:dropper", horizontal_def) - --- Down dropper -local down_def = table.copy(dropperdef) -down_def.description = S("Downwards-Facing Dropper") -down_def.after_place_node = setup_dropper -down_def.tiles = { - "default_furnace_top.png", "mcl_droppers_dropper_front_vertical.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_side.png" -} -down_def.groups = {pickaxey=1, container=2,not_in_creative_inventory=1, material_stone=1} -down_def._doc_items_create_entry = false -down_def.drop = "mcl_droppers:dropper" -minetest.register_node("mcl_droppers:dropper_down", down_def) - --- Up dropper --- The up dropper is almost identical to the down dropper, it only differs in textures -local up_def = table.copy(down_def) -up_def.description = S("Upwards-Facing Dropper") -up_def.tiles = { - "mcl_droppers_dropper_front_vertical.png", "default_furnace_bottom.png", - "default_furnace_side.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_side.png" -} -minetest.register_node("mcl_droppers:dropper_up", up_def) - - - --- Ladies and gentlemen, I present to you: the crafting recipe! -minetest.register_craft({ - output = "mcl_droppers:dropper", - recipe = { - {"mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble",}, - {"mcl_core:cobble", "", "mcl_core:cobble",}, - {"mcl_core:cobble", "mesecons:redstone", "mcl_core:cobble",}, - } -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_droppers:dropper", "nodes", "mcl_droppers:dropper_down") - doc.add_entry_alias("nodes", "mcl_droppers:dropper", "nodes", "mcl_droppers:dropper_up") -end - --- Legacy -minetest.register_lbm({ - label = "Update dropper formspecs (0.60.0)", - name = "mcl_droppers:update_formspecs_0_60_0", - nodenames = { "mcl_droppers:dropper", "mcl_droppers:dropper_down", "mcl_droppers:dropper_up" }, - action = function(pos, node) - setup_dropper(pos) - minetest.log("action", "[mcl_droppers] Node formspec updated at "..minetest.pos_to_string(pos)) - end, -}) diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.de.tr b/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.de.tr deleted file mode 100644 index a4eb2eb088..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.de.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_droppers -Dropper=Spender -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.=Ein Spender ist eine Redstonekomponente und ein Behälter mit 9 Inventarplätzen. Er wird, wenn mit Redstoneenergie versorgt, einen Gegenstand abwerfen oder in einen Behälter, auf den er zeigt, ablegen. -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.=Spender können in 6 mögliche Richtungen platziert werden, Gegenstände fallen aus dem Loch hinaus. Benutzen Sie den Spender, um auf sein Inventar zuzugreifen. Versorgen Sie ihn mit Redstoneenergie, um den Spender einen Gegenstand abwerfen oder in einen Behälter ablegen zu lassen. -Downwards-Facing Dropper=Nach unten zeigender Spender -Upwards-Facing Dropper=Nach oben zeigender Spender -Inventory=Inventar -9 inventory slots=9 Inventarplätze -Drops item when powered by redstone power=Gibt einen Gegenstand aus, wenn mit Redstoneenergie versorgt diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.es.tr b/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.es.tr deleted file mode 100644 index 8fd8104a6d..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.es.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_droppers -Dropper=Soltador -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.=Un Soltador es un componente de redstone y un contenedor con 9 ranuras de inventario que, cuando se suministra con redstone power, deja caer un artículo o lo coloca en un contenedor frente a él. -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.=Los soltadores se pueden colocar en 6 direcciones posibles, los artículos se sacarán del agujero. Usa el cuentagotas para acceder a su inventario. Proporcione energía de redstone una vez para hacer que el soltador caiga o transfiera un elemento aleatorio. -Downwards-Facing Dropper=Soltador orientado hacia abajo -Upwards-Facing Dropper=Soltador orientado hacia arriba -Inventory=Inventario diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.fr.tr b/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.fr.tr deleted file mode 100644 index 137400d31e..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.fr.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_droppers -Dropper=Dropper -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.=Un dropper est un composant redstone et un conteneur avec 9 emplacements d'inventaire qui, lorsqu'ils sont alimentés en puissance redstone, déposent un objet ou le placent dans un conteneur en face de lui. -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.=Les droppers peuvent être placés dans 6 directions possibles, les objets seront déposés hors du trou. Utilisez le dropper pour accéder à son inventaire. Fournissez-lui de l'énergie redstone pour faire tomber un élement ou transférer un élément aléatoire. -Downwards-Facing Dropper=Dropper orienté vers le bas -Upwards-Facing Dropper=Dropper orienté vers le haut -Inventory=Inventaire -9 inventory slots=9 emplacements d'inventaire -Drops item when powered by redstone power=Obtient un objet lorsqu'il est alimenté par la puissance Redstone diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.pl.tr b/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.pl.tr deleted file mode 100644 index 7b0fd3c0df..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.pl.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_droppers -Dropper=Podajnik -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.=Podajnik jest urządzeniem czerwienitowym i pojemnikiem z 9 miejscami, który po dostarczeniu energii czerwienitowej wyrzuca przedmiot lub umieszcza go w pojemniku przed nim. -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.=Podajniki mogą być skierowane w 6 możliwych kierunkach, przedmioty będą wyrzucane z dziury. Użyj podajnika aby zyskać dostęp do jego ekwipunku. Dostarcz do niego energii czerwienitowej aby sprawić by wyrzucił lub przeniósł losowy przedmiot. -Downwards-Facing Dropper=Podajnik skierowany w dół -Upwards-Facing Dropper=Podajnik skierowany w górę -Inventory=Ekwipunek -9 inventory slots=9 miejsc ekwipunku -Drops item when powered by redstone power=Wyrzuca przedmiot gdy zasilony czerwienitem diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.ru.tr b/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.ru.tr deleted file mode 100644 index 22358678a7..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.ru.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_droppers -Dropper=Выбрасыватель -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.=Выбрасыватель это элемент редстоуна и контейнер с 9 отсеками инвентаря, срабатывающий по сигналу редстоуна и выбрасывающий предмет, либо выталкивающий его в контейнер, стоящий перед ним. -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.=Выбрасыватель может быть установлен в 6 возможных направлениях, предметы будут выбрасываться в соответствующем направлении из отверстия. [Используйте] выбрасыватель для доступа к его инвентарю. Подайте на него энергию редстоуна однократно, чтобы заставить его выбросить либо предать один случайный предмет. -Downwards-Facing Dropper=Выбрасыватель, смотрящий вниз -Upwards-Facing Dropper=Выбрасыватель, смотрящий вверх -Inventory=Инвентарь -9 inventory slots=9 отсеков инвентаря -Drops item when powered by redstone power=Выбрасывает предмет при подаче энергии редстоуна diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/locale/template.txt b/mods/ITEMS/REDSTONE/mcl_droppers/locale/template.txt deleted file mode 100644 index 24b2bc1093..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/locale/template.txt +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_droppers -Dropper= -A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.= -Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.= -Downwards-Facing Dropper= -Upwards-Facing Dropper= -Inventory= -9 inventory slots= -Drops item when powered by redstone power= diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/mod.conf b/mods/ITEMS/REDSTONE/mcl_droppers/mod.conf deleted file mode 100644 index bbb1c19f24..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_droppers/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_droppers -depends = mcl_init, mcl_formspec, mesecons, mcl_util -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_horizontal.png b/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_horizontal.png deleted file mode 100644 index e247e92c82..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_horizontal.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_vertical.png b/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_vertical.png deleted file mode 100644 index 37bc9fa20c..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_droppers/textures/mcl_droppers_dropper_front_vertical.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_observers/init.lua b/mods/ITEMS/REDSTONE/mcl_observers/init.lua deleted file mode 100644 index 6045b56775..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/init.lua +++ /dev/null @@ -1,470 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_observers = {} - -local string = string - -local get_node = minetest.get_node - --- Warning! TODO: Remove this message. --- 'realtime' is experimental feature! It can slow down the everything! --- Please set it to false and restart the game if something's wrong: -local realtime = true ---local realtime = false - -local rules_flat = { - { x = 0, y = 0, z = -1, spread = true }, -} -local function get_rules_flat(node) - local rules = rules_flat - for i=1, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - -local rules_down = {{ x = 0, y = 1, z = 0, spread = true }} -local rules_up = {{ x = 0, y = -1, z = 0, spread = true }} - -function mcl_observers.observer_activate(pos) - minetest.after(mcl_vars.redstone_tick, function(pos) - local node = get_node(pos) - if not node then - return - end - local nn = node.name - if nn == "mcl_observers:observer_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_on", param2 = node.param2}) - mesecon.receptor_on(pos, get_rules_flat(node)) - elseif nn == "mcl_observers:observer_down_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_down_on"}) - mesecon.receptor_on(pos, rules_down) - elseif nn == "mcl_observers:observer_up_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_up_on"}) - mesecon.receptor_on(pos, rules_up) - end - end, {x=pos.x, y=pos.y, z=pos.z}) -end - --- Scan the node in front of the observer --- and update the observer state if needed. --- TODO: Also scan metadata changes. --- TODO: Ignore some node changes. -local function observer_scan(pos, initialize) - local node = get_node(pos) - local front - if node.name == "mcl_observers:observer_up_off" or node.name == "mcl_observers:observer_up_on" then - front = vector.add(pos, {x=0, y=1, z=0}) - elseif node.name == "mcl_observers:observer_down_off" or node.name == "mcl_observers:observer_down_on" then - front = vector.add(pos, {x=0, y=-1, z=0}) - else - front = vector.add(pos, minetest.facedir_to_dir(node.param2)) - end - local frontnode = get_node(front) - local meta = minetest.get_meta(pos) - local oldnode = meta:get_string("node_name") - local oldparam2 = meta:get_string("node_param2") - local meta_needs_updating = false - if oldnode ~= "" and not initialize then - if not (frontnode.name == oldnode and tostring(frontnode.param2) == oldparam2) then - -- Node state changed! Activate observer - if node.name == "mcl_observers:observer_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_on", param2 = node.param2}) - mesecon.receptor_on(pos, get_rules_flat(node)) - elseif node.name == "mcl_observers:observer_down_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_down_on"}) - mesecon.receptor_on(pos, rules_down) - elseif node.name == "mcl_observers:observer_up_off" then - minetest.set_node(pos, {name = "mcl_observers:observer_up_on"}) - mesecon.receptor_on(pos, rules_up) - end - meta_needs_updating = true - end - else - meta_needs_updating = true - end - if meta_needs_updating then - meta:set_string("node_name", frontnode.name) - meta:set_string("node_param2", tostring(frontnode.param2)) - end - return frontnode -end - --- Vertical orientation (CURRENTLY DISABLED) -local function observer_orientate(pos, placer) - -- Not placed by player - if not placer then return end - - -- Placer pitch in degrees - local pitch = placer:get_look_vertical() * (180 / math.pi) - - --local node = get_node(pos) - if pitch > 55 then -- player looking upwards - -- Observer looking downwards - minetest.set_node(pos, {name="mcl_observers:observer_down_off"}) - elseif pitch < -55 then -- player looking downwards - -- Observer looking upwards - minetest.set_node(pos, {name="mcl_observers:observer_up_off"}) - end -end - -mesecon.register_node("mcl_observers:observer", { - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - paramtype2 = "facedir", - on_rotate = false, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - }, { - description = S("Observer"), - _tt_help = S("Emits redstone pulse when block in front changes"), - _doc_items_longdesc = S("An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes."), - _doc_items_usagehelp = S("Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here."), - - groups = {pickaxey=1, material_stone=1, not_opaque=1, }, - tiles = { - "mcl_observers_observer_top.png^[transformR180", "default_furnace_bottom.png", - "mcl_observers_observer_side.png", "mcl_observers_observer_side.png", - "mcl_observers_observer_front.png", "mcl_observers_observer_back.png", - }, - mesecons = { - receptor = { - state = mesecon.state.off, - rules = get_rules_flat, - }, - }, - on_construct = function(pos) - if not realtime then - observer_scan(pos, true) - end - end, - after_place_node = observer_orientate, - }, { - _doc_items_create_entry = false, - groups = {pickaxey=1, material_stone=1, not_opaque=1, not_in_creative_inventory=1 }, - tiles = { - "mcl_observers_observer_top.png^[transformR180", "default_furnace_bottom.png", - "mcl_observers_observer_side.png", "mcl_observers_observer_side.png", - "mcl_observers_observer_front.png", "mcl_observers_observer_back_lit.png", - }, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = get_rules_flat, - } - }, - - -- VERY quickly disable observer after construction - on_construct = function(pos) - local timer = minetest.get_node_timer(pos) - timer:start(mcl_vars.redstone_tick) - end, - on_timer = function(pos, elapsed) - local node = get_node(pos) - minetest.set_node(pos, {name = "mcl_observers:observer_off", param2 = node.param2}) - mesecon.receptor_off(pos, get_rules_flat(node)) - end, - } -) - -mesecon.register_node("mcl_observers:observer_down", { - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - groups = {pickaxey=1, material_stone=1, not_opaque=1, not_in_creative_inventory=1 }, - on_rotate = false, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - drop = "mcl_observers:observer_off", - }, { - tiles = { - "mcl_observers_observer_back.png", "mcl_observers_observer_front.png", - "mcl_observers_observer_side.png^[transformR90", "mcl_observers_observer_side.png^[transformR90", - "mcl_observers_observer_top.png", "mcl_observers_observer_top.png", - }, - mesecons = { - receptor = { - state = mesecon.state.off, - rules = rules_down, - }, - }, - on_construct = function(pos) - if not realtime then - observer_scan(pos, true) - end - end, - }, { - _doc_items_create_entry = false, - tiles = { - "mcl_observers_observer_back_lit.png", "mcl_observers_observer_front.png", - "mcl_observers_observer_side.png^[transformR90", "mcl_observers_observer_side.png^[transformR90", - "mcl_observers_observer_top.png", "mcl_observers_observer_top.png", - }, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = rules_down, - }, - }, - - -- VERY quickly disable observer after construction - on_construct = function(pos) - local timer = minetest.get_node_timer(pos) - timer:start(mcl_vars.redstone_tick) - end, - on_timer = function(pos, elapsed) - local node = get_node(pos) - minetest.set_node(pos, {name = "mcl_observers:observer_down_off", param2 = node.param2}) - mesecon.receptor_off(pos, rules_down) - end, - } -) - -mesecon.register_node("mcl_observers:observer_up", { - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - groups = {pickaxey=1, material_stone=1, not_opaque=1, not_in_creative_inventory=1 }, - on_rotate = false, - _mcl_blast_resistance = 3.5, - _mcl_hardness = 3.5, - drop = "mcl_observers:observer_off", - }, { - tiles = { - "mcl_observers_observer_front.png", "mcl_observers_observer_back.png", - "mcl_observers_observer_side.png^[transformR270", "mcl_observers_observer_side.png^[transformR270", - "mcl_observers_observer_top.png^[transformR180", "mcl_observers_observer_top.png^[transformR180", - }, - mesecons = { - receptor = { - state = mesecon.state.off, - rules = rules_up, - }, - }, - on_construct = function(pos) - if not realtime then - observer_scan(pos, true) - end - end, - }, { - _doc_items_create_entry = false, - tiles = { - "mcl_observers_observer_front.png", "mcl_observers_observer_back_lit.png", - "mcl_observers_observer_side.png^[transformR270", "mcl_observers_observer_side.png^[transformR270", - "mcl_observers_observer_top.png^[transformR180", "mcl_observers_observer_top.png^[transformR180", - }, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = rules_up, - }, - }, - - -- VERY quickly disable observer after construction - on_construct = function(pos) - local timer = minetest.get_node_timer(pos) - timer:start(mcl_vars.redstone_tick) - end, - on_timer = function(pos, elapsed) - minetest.set_node(pos, {name = "mcl_observers:observer_up_off"}) - mesecon.receptor_off(pos, rules_up) - end, - } -) - -minetest.register_craft({ - output = "mcl_observers:observer_off", - recipe = { - { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble" }, - { "mcl_nether:quartz", "mesecons:redstone", "mesecons:redstone" }, - { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble" }, - }, -}) -minetest.register_craft({ - output = "mcl_observers:observer_off", - recipe = { - { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble" }, - { "mesecons:redstone", "mesecons:redstone", "mcl_nether:quartz" }, - { "mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble" }, - }, -}) - -if realtime then - -- Override basic functions for observing: - mcl_observers.add_node = minetest.add_node - mcl_observers.set_node = minetest.set_node - mcl_observers.swap_node = minetest.swap_node - mcl_observers.remove_node = minetest.remove_node - mcl_observers.bulk_set_node = minetest.bulk_set_node - - function minetest.add_node(pos,node) - mcl_observers.add_node(pos,node) - local n = get_node({x=pos.x+1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then - mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x-1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then - mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z+1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z-1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1}) - end - n = get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then - mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then - mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - function minetest.set_node(pos,node) - mcl_observers.set_node(pos,node) - local n = get_node({x=pos.x+1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then - mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x-1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then - mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z+1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z-1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1}) - end - n = get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then - mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then - mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - function minetest.swap_node(pos,node) - mcl_observers.swap_node(pos,node) - local n = get_node({x=pos.x+1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then - mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x-1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then - mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z+1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z-1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1}) - end - n = get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then - mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then - mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - function minetest.remove_node(pos) - mcl_observers.remove_node(pos) - local n = get_node({x=pos.x+1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then - mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x-1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then - mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z+1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z-1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1}) - end - n = get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then - mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then - mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - function minetest.bulk_set_node(lst, node) - mcl_observers.bulk_set_node(lst, node) - for _, pos in pairs(lst) do - local n = get_node({x=pos.x+1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then - mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x-1,y=pos.y,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then - mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z+1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1}) - end - n = get_node({x=pos.x,y=pos.y,z=pos.z-1}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then - mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1}) - end - n = get_node({x=pos.x,y=pos.y-1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then - mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z}) - end - n = get_node({x=pos.x,y=pos.y+1,z=pos.z}) - if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then - mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z}) - end - end - end - -else -- if realtime then ^^^ else: - minetest.register_abm({ - label = "Observer node check", - nodenames = {"mcl_observers:observer_off", "mcl_observers:observer_down_off", "mcl_observers:observer_up_off"}, - interval = 1, - chance = 1, - action = function(pos, node) - observer_scan(pos) - end, - }) -end ---[[ - With the following code the observer will detect loading of areas where it is placed. - We need to restore signal generated by it before the area was unloaded. - - Observer movement and atomic clock (one observer watches another) fails without this often. - - But it WILL cause wrong single signal for all other cases, and I hope it's nothing. - After all, why it can't detect the loading of areas, if we haven't a better solution... -]] -minetest.register_lbm({ - name = "mcl_observers:activate_lbm", - nodenames = { - "mcl_observers:observer_off", - "mcl_observers:observer_down_off", - "mcl_observers:observer_up_off", - "mcl_observers:observer_on", - "mcl_observers:observer_down_on", - "mcl_observers:observer_up_on", - }, - run_at_every_load = true, - action = function(pos) - minetest.after(1, mcl_observers.observer_activate, {x=pos.x, y=pos.y, z=pos.z}) - end, -}) diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.de.tr b/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.de.tr deleted file mode 100644 index 3ce085ad72..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_observers -Observer=Wächter -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.=Ein Wächter ist eine Redstonekomponente, die den Block vor ihm beobachtet und einen sehr kurzen Redstoneimpuls sendet, wenn sich dieser Block ändert. -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.=Platzieren Sie den Wächter direkt vor dem Block, den Sie beobachten wollen, so dass das „Gesicht“ zum Block schaut. Der Pfeil zeigt auf die Seite des Signalausgangs, der sich gegenüber vom „Gesicht“ befindet. Hier können Sie Ihren Restonestaub oder eine beliebige andere Komponente platzieren. -Emits redstone pulse when block in front changes=Macht einen Redstonepuls, wenn der Block vor ihm sich ändert diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.es.tr b/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.es.tr deleted file mode 100644 index 146b72b81a..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_observers -Observer=Observador -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.=Un observador es un componente de redstone que observa el bloque frente a él y envía un pulso muy corto de redstone cada vez que este bloque cambia. -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.=Coloque el observador directamente en frente del bloque que desea observar con la "cara" mirando el bloque. La flecha apunta al lado de la salida, que está en el lado opuesto de la "cara". Puede colocar su polvo de redstone o cualquier otro componente aquí. diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.fr.tr b/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.fr.tr deleted file mode 100644 index 3295335a28..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_observers -Observer=Observateur -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.=Un observateur est un composant de redstone qui observe le bloc en face de lui et envoie une impulsion de redstone très courte chaque fois que ce bloc change. -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.=Placez l'observateur directement devant le bloc que vous souhaitez observer avec le "visage" regardant le bloc. La flèche pointe vers le côté de la sortie, qui est du côté opposé du "visage". Vous pouvez placer votre poussière de redstone ou tout autre composant ici. -Emits redstone pulse when block in front changes=Émet une impulsion de redstone lorsque le bloc à l'avant change diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.pl.tr b/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.pl.tr deleted file mode 100644 index 9c789be004..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.pl.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_observers -Observer=Detektor -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.=Detektor jest mechanizmem czerwienitowym, który obserwuje blok przed sobą i wysyła krótki puls energii czerwienitowej gdy blok ten się zmienia. -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.=Postaw detektor przed blokiem, który chcesz obserwować z "twarzą" wskazującą na ten blok. Strzałka wskazuje na stronę z wyjściem, która jest po przeciwnej stronie do "twarzy". Możesz postawić tutaj czerwienit lub dowolny inny komponent. -Emits redstone pulse when block in front changes=Wysyła sygnał czerwienitowy gdy blok przed nim się zmienia - diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.ru.tr b/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.ru.tr deleted file mode 100644 index ac8c658c3a..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_observers -Observer=Наблюдатель -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.=Наблюдатель это элемент редстоуна, который следит за блоком перед собой и посылает короткий импульс редстоуна, если этот блок меняется. -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.=Поместите наблюдателя прямо перед блоком, за которым хотите наблюдать, так, чтобы “лицо” смотрело на этот блок. Стрелка показывает выходную сторону, находящуюся на противоположной стороне от “лица”. Вы можете разместить там пыль редстоуна или любой другой компонент. -Emits redstone pulse when block in front changes=Генерирует импульс редстоуна при смене блока, находящегося перед ним diff --git a/mods/ITEMS/REDSTONE/mcl_observers/locale/template.txt b/mods/ITEMS/REDSTONE/mcl_observers/locale/template.txt deleted file mode 100644 index 7f59915011..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_observers -Observer= -An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes.= -Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here.= -Emits redstone pulse when block in front changes= diff --git a/mods/ITEMS/REDSTONE/mcl_observers/mod.conf b/mods/ITEMS/REDSTONE/mcl_observers/mod.conf deleted file mode 100644 index fce00191af..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_observers/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_observers -depends = mesecons, mcl_util diff --git a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back.png b/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back.png deleted file mode 100644 index 5ecef7dadb..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back_lit.png b/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back_lit.png deleted file mode 100644 index da70498f7e..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_back_lit.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_front.png b/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_front.png deleted file mode 100644 index 115f5cacd5..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_front.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_side.png b/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_side.png deleted file mode 100644 index 84cd4065d2..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_side.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_top.png b/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_top.png deleted file mode 100644 index 73dab21be1..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_observers/textures/mcl_observers_observer_top.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_target/init.lua b/mods/ITEMS/REDSTONE/mcl_target/init.lua deleted file mode 100644 index 268c6ebe3f..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_target/init.lua +++ /dev/null @@ -1,70 +0,0 @@ -local S = minetest.get_translator("mcl_target") - -local mod_farming = minetest.get_modpath("mcl_farming") - -mcl_target = {} - -function mcl_target.hit(pos, time) - minetest.set_node(pos, {name="mcl_target:target_on"}) - mesecon.receptor_on(pos, mesecon.rules.alldirs) - - local timer = minetest.get_node_timer(pos) - timer:start(time) -end - -minetest.register_node("mcl_target:target_off", { - description = S("Target"), - _doc_items_longdesc = S("A target is a block that provides a temporary redstone charge when hit by a projectile."), - _doc_items_usagehelp = S("Throw a projectile on the target to activate it."), - tiles = {"mcl_target_target_top.png", "mcl_target_target_top.png", "mcl_target_target_side.png"}, - groups = {hoey = 1}, - sounds = mcl_sounds.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.1}, - }), - mesecons = { - receptor = { - state = mesecon.state.off, - rules = mesecon.rules.alldirs, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -minetest.register_node("mcl_target:target_on", { - description = S("Target"), - _doc_items_create_entry = false, - tiles = {"mcl_target_target_top.png", "mcl_target_target_top.png", "mcl_target_target_side.png"}, - groups = {hoey = 1, not_in_creative_inventory = 1}, - drop = "mcl_target:target_off", - sounds = mcl_sounds.node_sound_dirt_defaults({ - footstep = {name="default_grass_footstep", gain=0.1}, - }), - on_timer = function(pos, elapsed) - local node = minetest.get_node(pos) - if node.name == "mcl_target:target_on" then --has not been dug - minetest.set_node(pos, {name="mcl_target:target_off"}) - mesecon.receptor_off(pos, mesecon.rules.alldirs) - end - end, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = mesecon.rules.alldirs, - }, - }, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - - -if mod_farming then - minetest.register_craft({ - output = "mcl_target:target_off", - recipe = { - {"", "mesecons:redstone", ""}, - {"mesecons:redstone", "mcl_farming:hay_block", "mesecons:redstone"}, - {"", "mesecons:redstone", ""}, - }, - }) -end \ No newline at end of file diff --git a/mods/ITEMS/REDSTONE/mcl_target/locale/mcl_target.fr.tr b/mods/ITEMS/REDSTONE/mcl_target/locale/mcl_target.fr.tr deleted file mode 100644 index 6c558683d6..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_target/locale/mcl_target.fr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_target -Target=Cible -A target is a block that provides a temporary redstone charge when hit by a projectile.=La cible est un bloc qui se comporte comme une source d'énergie temporaire quand elle est frappée par un projectile. -Throw a projectile on the target to activate it.=Lancer un projectile sur la cible pour l'activer. \ No newline at end of file diff --git a/mods/ITEMS/REDSTONE/mcl_target/locale/template.txt b/mods/ITEMS/REDSTONE/mcl_target/locale/template.txt deleted file mode 100644 index 18bc7708c3..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_target/locale/template.txt +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_target -Target= -A target is a block that provides a temporary redstone charge when hit by a projectile.= -Throw a projectile on the target to activate it.= \ No newline at end of file diff --git a/mods/ITEMS/REDSTONE/mcl_target/mod.conf b/mods/ITEMS/REDSTONE/mcl_target/mod.conf deleted file mode 100644 index 16f70ed128..0000000000 --- a/mods/ITEMS/REDSTONE/mcl_target/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_target -author = AFCMS -depends = mesecons, mcl_sounds \ No newline at end of file diff --git a/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_side.png b/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_side.png deleted file mode 100755 index 286f7767ed..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_side.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_top.png b/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_top.png deleted file mode 100755 index b55ef3ec8a..0000000000 Binary files a/mods/ITEMS/REDSTONE/mcl_target/textures/mcl_target_target_top.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons/actionqueue.lua b/mods/ITEMS/REDSTONE/mesecons/actionqueue.lua deleted file mode 100644 index 489a81b4a1..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons/actionqueue.lua +++ /dev/null @@ -1,107 +0,0 @@ -local table = table - -mesecon.queue.actions={} -- contains all ActionQueue actions - -function mesecon.queue:add_function(name, func) - mesecon.queue.funcs[name] = func -end - --- If add_action with twice the same overwritecheck and same position are called, the first one is overwritten --- use overwritecheck nil to never overwrite, but just add the event to the queue --- priority specifies the order actions are executed within one globalstep, highest first --- should be between 0 and 1 -function mesecon.queue:add_action(pos, func, params, time, overwritecheck, priority) - -- Create Action Table: - time = time or 0 -- time <= 0 --> execute, time > 0 --> wait time until execution - priority = priority or 1 - local action = { pos=mesecon.tablecopy(pos), - func=func, - params=mesecon.tablecopy(params or {}), - time=time, - owcheck=(overwritecheck and mesecon.tablecopy(overwritecheck)) or nil, - priority=priority} - - local toremove = nil - -- Otherwise, add the action to the queue - if overwritecheck then -- check if old action has to be overwritten / removed: - for i, ac in pairs(mesecon.queue.actions) do - if(vector.equals(pos, ac.pos) - and mesecon.cmpAny(overwritecheck, ac.owcheck)) then - toremove = i - break - end - end - end - - if toremove then - table.remove(mesecon.queue.actions, toremove) - end - - table.insert(mesecon.queue.actions, action) -end - --- execute the stored functions on a globalstep --- if however, the pos of a function is not loaded (get_node_or_nil == nil), do NOT execute the function --- this makes sure that resuming mesecons circuits when restarting minetest works fine --- However, even that does not work in some cases, that's why we delay the time the globalsteps --- start to be execute by 5 seconds -local function get_highest_priority(actions) - local highestp = -1 - local highesti - for i, ac in ipairs(actions) do - if ac.priority > highestp then - highestp = ac.priority - highesti = i - end - end - - return highesti -end - -local m_time = 0 -local resumetime = mesecon.setting("resumetime", 4) -minetest.register_globalstep(function (dtime) - m_time = m_time + dtime - -- don't even try if server has not been running for XY seconds; resumetime = time to wait - -- after starting the server before processing the ActionQueue, don't set this too low - if (m_time < resumetime) then return end - local actions = mesecon.tablecopy(mesecon.queue.actions) - local actions_now={} - - mesecon.queue.actions = {} - - -- sort actions into two categories: - -- those toexecute now (actions_now) and those to execute later (mesecon.queue.actions) - for i, ac in ipairs(actions) do - if ac.time > 0 then - ac.time = ac.time - dtime -- executed later - table.insert(mesecon.queue.actions, ac) - else - table.insert(actions_now, ac) - end - end - - while(#actions_now > 0) do -- execute highest priorities first, until all are executed - local hp = get_highest_priority(actions_now) - mesecon.queue:execute(actions_now[hp]) - table.remove(actions_now, hp) - end -end) - -function mesecon.queue:execute(action) - -- ignore if action queue function name doesn't exist, - -- (e.g. in case the action queue savegame was written by an old mesecons version) - if mesecon.queue.funcs[action.func] then - mesecon.queue.funcs[action.func](action.pos, unpack(action.params)) - end -end - - --- Store and read the ActionQueue to / from a file --- so that upcoming actions are remembered when the game --- is restarted -mesecon.queue.actions = mesecon.file2table("mesecon_actionqueue") - -minetest.register_on_shutdown(function() - mesecon.table2file("mesecon_actionqueue", mesecon.queue.actions) -end) diff --git a/mods/ITEMS/REDSTONE/mesecons/init.lua b/mods/ITEMS/REDSTONE/mesecons/init.lua deleted file mode 100644 index 18965287ec..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons/init.lua +++ /dev/null @@ -1,121 +0,0 @@ --- |\ /| ____ ____ ____ _____ ____ _____ --- | \ / | | | | | | | |\ | | --- | \/ | |___ ____ |___ | | | | \ | |____ --- | | | | | | | | | \ | | --- | | |___ ____| |___ |____ |____| | \| ____| --- by Jeija, Uberi (Temperest), sfan5, VanessaE, Hawk777 and contributors --- --- --- --- This mod adds mesecons[=minecraft redstone] and different receptors/effectors to minetest. --- See the documentation on the forum for additional information, especially about crafting --- --- --- For basic development resources, see http://mesecons.net/developers.html --- --- --- ---Quick draft for the mesecons array in the node's definition ---mesecons = ---{ --- receptor = --- { --- state = mesecon.state.on/off --- rules = rules/get_rules --- }, --- effector = --- { --- action_on = function --- action_off = function --- action_change = function --- rules = rules/get_rules --- }, --- conductor = --- { --- state = mesecon.state.on/off --- offstate = opposite state (for state = on only) --- onstate = opposite state (for state = off only) --- rules = rules/get_rules --- } ---} - --- PUBLIC VARIABLES -mesecon={} -- contains all functions and all global variables -mesecon.queue={} -- contains the ActionQueue -mesecon.queue.funcs={} -- contains all ActionQueue functions - --- Settings -dofile(minetest.get_modpath("mesecons").."/settings.lua") - --- Utilities like comparing positions, --- adding positions and rules, --- mostly things that make the source look cleaner -dofile(minetest.get_modpath("mesecons").."/util.lua"); - --- Presets (eg default rules) -dofile(minetest.get_modpath("mesecons").."/presets.lua"); - --- The ActionQueue --- Saves all the actions that have to be execute in the future -dofile(minetest.get_modpath("mesecons").."/actionqueue.lua"); - --- Internal stuff --- This is the most important file --- it handles signal transmission and basically everything else --- It is also responsible for managing the nodedef things, --- like calling action_on/off/change -dofile(minetest.get_modpath("mesecons").."/internal.lua"); - --- API --- these are the only functions you need to remember - -mesecon.queue:add_function("receptor_on", function (pos, rules) - mesecon.vm_begin() - - rules = rules or mesecon.rules.default - - -- Call turnon on all linking positions - for _, rule in pairs(mesecon.flattenrules(rules)) do - local np = vector.add(pos, rule) - local rulenames = mesecon.rules_link_rule_all(pos, rule) - for _, rulename in pairs(rulenames) do - mesecon.turnon(np, rulename) - end - end - - mesecon.vm_commit() -end) - -function mesecon.receptor_on(pos, rules) - mesecon.queue:add_action(pos, "receptor_on", {rules}, nil, rules) -end - -mesecon.queue:add_function("receptor_off", function (pos, rules) - rules = rules or mesecon.rules.default - - -- Call turnoff on all linking positions - for _, rule in ipairs(mesecon.flattenrules(rules)) do - local np = vector.add(pos, rule) - local rulenames = mesecon.rules_link_rule_all(pos, rule) - for _, rulename in ipairs(rulenames) do - mesecon.vm_begin() - mesecon.changesignal(np, minetest.get_node(np), rulename, mesecon.state.off, 2) - - -- Turnoff returns true if turnoff process was successful, no onstate receptor - -- was found along the way. Commit changes that were made in voxelmanip. If turnoff - -- returns true, an onstate receptor was found, abort voxelmanip transaction. - if (mesecon.turnoff(np, rulename)) then - mesecon.vm_commit() - else - mesecon.vm_abort() - end - end - end -end) - -function mesecon.receptor_off(pos, rules) - mesecon.queue:add_action(pos, "receptor_off", {rules}, nil, rules) -end - ---Services like turnoff receptor on dignode and so on -dofile(minetest.get_modpath("mesecons").."/services.lua"); diff --git a/mods/ITEMS/REDSTONE/mesecons/internal.lua b/mods/ITEMS/REDSTONE/mesecons/internal.lua deleted file mode 100644 index dbe3ebe12d..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons/internal.lua +++ /dev/null @@ -1,641 +0,0 @@ --- Internal.lua - The core of mesecons --- --- For more practical developer resources see http://mesecons.net/developers.php --- --- Function overview --- mesecon.get_effector(nodename) --> Returns the mesecons.effector -specifictation in the nodedef by the nodename --- mesecon.get_receptor(nodename) --> Returns the mesecons.receptor -specifictation in the nodedef by the nodename --- mesecon.get_conductor(nodename) --> Returns the mesecons.conductor-specifictation in the nodedef by the nodename --- mesecon.get_any_inputrules (node) --> Returns the rules of a node if it is a conductor or an effector --- mesecon.get_any_outputrules (node) --> Returns the rules of a node if it is a conductor or a receptor - --- RECEPTORS --- mesecon.is_receptor(nodename) --> Returns true if nodename is a receptor --- mesecon.is_receptor_on(nodename --> Returns true if nodename is an receptor with state = mesecon.state.on --- mesecon.is_receptor_off(nodename) --> Returns true if nodename is an receptor with state = mesecon.state.off --- mesecon.receptor_get_rules(node) --> Returns the rules of the receptor (mesecon.rules.default if none specified) - --- EFFECTORS --- mesecon.is_effector(nodename) --> Returns true if nodename is an effector --- mesecon.is_effector_on(nodename) --> Returns true if nodename is an effector with nodedef.mesecons.effector.action_off --- mesecon.is_effector_off(nodename) --> Returns true if nodename is an effector with nodedef.mesecons.effector.action_on --- mesecon.effector_get_rules(node) --> Returns the input rules of the effector (mesecon.rules.default if none specified) - --- SIGNALS --- mesecon.activate(pos, node, depth) --> Activates the effector node at the specific pos (calls nodedef.mesecons.effector.action_on), higher depths are executed later --- mesecon.deactivate(pos, node, depth) --> Deactivates the effector node at the specific pos (calls nodedef.mesecons.effector.action_off), higher depths are executed later --- mesecon.changesignal(pos, node, rulename, newstate, depth) --> Changes the effector node at the specific pos (calls nodedef.mesecons.effector.action_change), higher depths are executed later - --- CONDUCTORS --- mesecon.is_conductor(nodename) --> Returns true if nodename is a conductor --- mesecon.is_conductor_on(node --> Returns true if node is a conductor with state = mesecon.state.on --- mesecon.is_conductor_off(node) --> Returns true if node is a conductor with state = mesecon.state.off --- mesecon.get_conductor_on(node_off) --> Returns the onstate nodename of the conductor --- mesecon.get_conductor_off(node_on) --> Returns the offstate nodename of the conductor --- mesecon.conductor_get_rules(node) --> Returns the input+output rules of a conductor (mesecon.rules.default if none specified) - --- HIGH-LEVEL Internals --- mesecon.is_power_on(pos) --> Returns true if pos emits power in any way --- mesecon.is_power_off(pos) --> Returns true if pos does not emit power in any way --- mesecon.is_powered(pos) --> Returns bool, spread. bool is true if pos is powered by a receptor, a conductor or an opaque block. - -- spread is true if it is powered AND also transmits its power one block further. - --- RULES ROTATION helpers --- mesecon.rotate_rules_right(rules) --- mesecon.rotate_rules_left(rules) --- mesecon.rotate_rules_up(rules) --- mesecon.rotate_rules_down(rules) --- These functions return rules that have been rotated in the specific direction - -local equals = vector.equals -local get_node_force = mesecon.get_node_force -local invertRule = mesecon.invertRule -local copy, insert = table.copy, table.insert -local registered_nodes = minetest.registered_nodes - --- General -function mesecon.get_effector(nodename) - if registered_nodes[nodename] - and registered_nodes[nodename].mesecons - and registered_nodes[nodename].mesecons.effector then - return registered_nodes[nodename].mesecons.effector - end -end - -function mesecon.get_receptor(nodename) - if registered_nodes[nodename] - and registered_nodes[nodename].mesecons - and registered_nodes[nodename].mesecons.receptor then - return registered_nodes[nodename].mesecons.receptor - end -end - -function mesecon.get_conductor(nodename) - if registered_nodes[nodename] - and registered_nodes[nodename].mesecons - and registered_nodes[nodename].mesecons.conductor then - return registered_nodes[nodename].mesecons.conductor - end -end - -function mesecon.get_any_outputrules(node) - if not node then return nil end - - if mesecon.is_conductor(node.name) then - return mesecon.conductor_get_rules(node) - elseif mesecon.is_receptor(node.name) then - return mesecon.receptor_get_rules(node) - elseif minetest.get_item_group(node.name, "opaque") == 1 then - return mesecon.rules.alldirs - end -end - -function mesecon.get_any_inputrules(node) - if not node then return nil end - - if mesecon.is_conductor(node.name) then - return mesecon.conductor_get_rules(node) - elseif mesecon.is_effector(node.name) then - return mesecon.effector_get_rules(node) - elseif minetest.get_item_group(node.name, "opaque") == 1 then - return mesecon.rules.alldirs - end -end - -function mesecon.get_any_rules(node) - return mesecon.mergetable(mesecon.get_any_inputrules(node) or {}, - mesecon.get_any_outputrules(node) or {}) -end - --- Receptors --- Nodes that can power mesecons -local function is_receptor_on(nodename) - local receptor = mesecon.get_receptor(nodename) - if receptor and receptor.state == mesecon.state.on then - return true - end - return false -end -mesecon.is_receptor_on = is_receptor_on - -function mesecon.is_receptor_off(nodename) - local receptor = mesecon.get_receptor(nodename) - if receptor and receptor.state == mesecon.state.off then - return true - end - return false -end - -function mesecon.is_receptor(nodename) - local receptor = mesecon.get_receptor(nodename) - if receptor then - return true - end - return false -end - -local function receptor_get_rules(node) - local receptor = mesecon.get_receptor(node.name) - if receptor then - local rules = receptor.rules - if type(rules) == "function" then - return rules(node) - elseif rules then - return rules - end - end - - return mesecon.rules.default -end -mesecon.receptor_get_rules = receptor_get_rules - --- Effectors --- Nodes that can be powered by mesecons -function mesecon.is_effector_on(nodename) - local effector = mesecon.get_effector(nodename) - if effector and effector.action_off then - return true - end - return false -end - -function mesecon.is_effector_off(nodename) - local effector = mesecon.get_effector(nodename) - if effector and effector.action_on then - return true - end - return false -end - -function mesecon.is_effector(nodename) - local effector = mesecon.get_effector(nodename) - if effector then - return true - end - return false -end - -function mesecon.effector_get_rules(node) - local effector = mesecon.get_effector(node.name) - if effector then - local rules = effector.rules - if type(rules) == "function" then - return rules(node) - elseif rules then - return rules - end - end - return mesecon.rules.default -end - --- ####################### --- # Signals (effectors) # --- ####################### - --- Activation: -mesecon.queue:add_function("activate", function (pos, rulename) - local node = get_node_force(pos) - if not node then return end - - local effector = mesecon.get_effector(node.name) - - if effector and effector.action_on then - effector.action_on(pos, node, rulename) - end -end) - -function mesecon.activate(pos, node, rulename, depth) - if rulename == nil then - for _,rule in pairs(mesecon.effector_get_rules(node)) do - mesecon.activate(pos, node, rule, depth + 1) - end - return - end - mesecon.queue:add_action(pos, "activate", {rulename}, nil, rulename, 1 / depth) -end - - --- Deactivation -mesecon.queue:add_function("deactivate", function (pos, rulename) - local node = get_node_force(pos) - if not node then return end - - local effector = mesecon.get_effector(node.name) - - if effector and effector.action_off then - effector.action_off(pos, node, rulename) - end -end) - -function mesecon.deactivate(pos, node, rulename, depth) - if rulename == nil then - for _,rule in pairs(mesecon.effector_get_rules(node)) do - mesecon.deactivate(pos, node, rule, depth + 1) - end - return - end - mesecon.queue:add_action(pos, "deactivate", {rulename}, nil, rulename, 1 / depth) -end - - --- Change -mesecon.queue:add_function("change", function (pos, rulename, changetype) - local node = get_node_force(pos) - if not node then return end - - local effector = mesecon.get_effector(node.name) - - if effector and effector.action_change then - effector.action_change(pos, node, rulename, changetype) - end -end) - -function mesecon.changesignal(pos, node, rulename, newstate, depth) - if rulename == nil then - for _,rule in pairs(mesecon.effector_get_rules(node)) do - mesecon.changesignal(pos, node, rule, newstate, depth + 1) - end - return - end - - -- Include "change" in overwritecheck so that it cannot be overwritten - -- by "active" / "deactivate" that will be called upon the node at the same time. - local overwritecheck = {"change", rulename} - mesecon.queue:add_action(pos, "change", {rulename, newstate}, nil, overwritecheck, 1 / depth) -end - --- Conductors - -function mesecon.is_conductor_on(node, rulename) - if not node then return false end - - local conductor = mesecon.get_conductor(node.name) - if conductor then - if conductor.state then - return conductor.state == mesecon.state.on - end - if conductor.states then - if not rulename then - return mesecon.getstate(node.name, conductor.states) ~= 1 - end - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node)) - local binstate = mesecon.getbinstate(node.name, conductor.states) - return mesecon.get_bit(binstate, bit) - end - end - - return false -end - -function mesecon.is_conductor_off(node, rulename) - if not node then return false end - - local conductor = mesecon.get_conductor(node.name) - if conductor then - if conductor.state then - return conductor.state == mesecon.state.off - end - if conductor.states then - if not rulename then - return mesecon.getstate(node.name, conductor.states) == 1 - end - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node)) - local binstate = mesecon.getbinstate(node.name, conductor.states) - return not mesecon.get_bit(binstate, bit) - end - end - - return false -end - -function mesecon.is_conductor(nodename) - local conductor = mesecon.get_conductor(nodename) - if conductor then - return true - end - return false -end - -function mesecon.get_conductor_on(node_off, rulename) - local conductor = mesecon.get_conductor(node_off.name) - if conductor then - if conductor.onstate then - return conductor.onstate - end - if conductor.states then - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node_off)) - local binstate = mesecon.getbinstate(node_off.name, conductor.states) - binstate = mesecon.set_bit(binstate, bit, "1") - return conductor.states[tonumber(binstate,2)+1] - end - end - return conductor.offstate -end - -function mesecon.get_conductor_off(node_on, rulename) - local conductor = mesecon.get_conductor(node_on.name) - if conductor then - if conductor.offstate then - return conductor.offstate - end - if conductor.states then - local bit = mesecon.rule2bit(rulename, mesecon.conductor_get_rules(node_on)) - local binstate = mesecon.getbinstate(node_on.name, conductor.states) - binstate = mesecon.set_bit(binstate, bit, "0") - return conductor.states[tonumber(binstate,2)+1] - end - end - return conductor.onstate -end - -function mesecon.conductor_get_rules(node) - local conductor = mesecon.get_conductor(node.name) - if conductor then - local rules = conductor.rules - if type(rules) == "function" then - return rules(node) - elseif rules then - return rules - end - end - return mesecon.rules.default -end - --- some more general high-level stuff - -function mesecon.is_power_on(pos, rulename) - local node = get_node_force(pos) - if node and (mesecon.is_conductor_on(node, rulename) or is_receptor_on(node.name)) then - return true - end - return false -end - -function mesecon.is_power_off(pos, rulename) - local node = get_node_force(pos) - if node and (mesecon.is_conductor_off(node, rulename) or mesecon.is_receptor_off(node.name)) then - return true - end - return false -end - --- Turn off an equipotential section starting at `pos`, which outputs in the direction of `link`. --- Breadth-first search. Map is abstracted away in a voxelmanip. --- Follow all all conductor paths replacing conductors that were already --- looked at, activating / changing all effectors along the way. -function mesecon.turnon(pos, link) - local frontiers = {{pos = pos, link = link}} - - local depth = 1 - while frontiers[1] do - local f = table.remove(frontiers, 1) - local node = get_node_force(f.pos) - - if node and mesecon.is_conductor_off(node, f.link) then - local rules = mesecon.conductor_get_rules(node) - - -- Call turnon on neighbors - for _, r in pairs(mesecon.rule2meta(f.link, rules)) do - local np = vector.add(f.pos, r) - for _, l in pairs(mesecon.rules_link_rule_all(f.pos, r)) do - insert(frontiers, {pos = np, link = l}) - end - end - - mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link)) - elseif mesecon.is_effector(node.name) then - mesecon.changesignal(f.pos, node, f.link, mesecon.state.on, depth) - if mesecon.is_effector_off(node.name) then - mesecon.activate(f.pos, node, f.link, depth) - end - end - if node and f.link.spread and minetest.get_item_group(node.name, "opaque") == 1 then - -- Call turnon on neighbors - -- Warning: A LOT of nodes need to be looked at for this to work - for _, r in pairs(mesecon.rule2meta(f.link, mesecon.rules.mcl_alldirs_spread)) do - local np = vector.add(f.pos, r) - for _, l in pairs(mesecon.rules_link_rule_all(f.pos, r)) do - local nlink = copy(l) - nlink.spread = false - insert(frontiers, {pos = np, link = nlink}) - end - end - end - - depth = depth + 1 - end -end - --- Turn off an equipotential section starting at `pos`, which outputs in the direction of `link`. --- Breadth-first search. Map is abstracted away in a voxelmanip. --- Follow all all conductor paths replacing conductors that were already --- looked at, deactivating / changing all effectors along the way. --- In case an onstate receptor is discovered, abort the process by returning false, which will --- cause `receptor_off` to discard all changes made in the voxelmanip. --- Contrary to turnon, turnoff has to cache all change and deactivate signals so that they will only --- be called in the very end when we can be sure that no conductor was found along the path. --- --- Signal table entry structure: --- { --- pos = position of effector, --- node = node descriptor (name, param1 and param2), --- link = link the effector is connected to, --- depth = indicates order in which signals wire fired, higher is later --- } -function mesecon.turnoff(pos, link) - local frontiers = {{pos = pos, link = link}} - local signals = {} - - local depth = 1 - while frontiers[1] do - local f = table.remove(frontiers, 1) - local node = get_node_force(f.pos) - - if node and mesecon.is_conductor_on(node, f.link) then - local rules = mesecon.conductor_get_rules(node) - for _, r in pairs(mesecon.rule2meta(f.link, rules)) do - local np = vector.add(f.pos, r) - - -- Check if an onstate receptor is connected. If that is the case, - -- abort this turnoff process by returning false. `receptor_off` will - -- discard all the changes that we made in the voxelmanip: - for _, l in pairs(mesecon.rules_link_rule_all_inverted(f.pos, r)) do - if is_receptor_on(get_node_force(np).name) then - return false - end - end - - -- Call turnoff on neighbors - for _, l in pairs(mesecon.rules_link_rule_all(f.pos, r)) do - insert(frontiers, {pos = np, link = l}) - end - end - - mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link)) - elseif mesecon.is_effector(node.name) then - insert(signals, { - pos = f.pos, - node = node, - link = f.link, - depth = depth - }) - end - - if node and f.link.spread and minetest.get_item_group(node.name, "opaque") == 1 then - -- Call turnoff on neighbors - -- Warning: A LOT of nodes need to be looked at for this to work - local fpos = f.pos - for _, r in pairs(mesecon.rule2meta(f.link, mesecon.rules.mcl_alldirs_spread)) do - local np = {x=fpos.x+r.x, y=fpos.y+r.y, z=fpos.z+r.z} - local n = get_node_force(np) - if n and is_receptor_on(n.name) then - local receptorrules = receptor_get_rules(n) - for _, rr in pairs(receptorrules) do - if rr.spread and equals(invertRule(rr), r) then - return false - end - end - end - for _, l in pairs(mesecon.rules_link_rule_all(fpos, r)) do - local nlink = copy(l) - nlink.spread = false - insert(frontiers, {pos = np, link = nlink}) - end - end - end - - depth = depth + 1 - end - - for _, sig in pairs(signals) do - mesecon.changesignal(sig.pos, sig.node, sig.link, mesecon.state.off, sig.depth) - if mesecon.is_effector_on(sig.node.name) and not mesecon.is_powered(sig.pos) then - mesecon.deactivate(sig.pos, sig.node, sig.link, sig.depth) - end - end - - return true -end - --- Get all linking inputrules of inputnode (effector or conductor) that is connected to --- outputnode (receptor or conductor) at position `output` and has an output in direction `rule` -function mesecon.rules_link_rule_all(output, rule) - local input = vector.add(output, rule) - local inputnode = get_node_force(input) - local inputrules = mesecon.get_any_inputrules(inputnode) - if not inputrules then - return {} - end - local rules = {} - - for _, inputrule in pairs(mesecon.flattenrules(inputrules)) do - -- Check if input accepts from output - if equals(vector.add(input, inputrule), output) then - local newrule = copy(inputrule) - newrule.spread = rule.spread - insert(rules, newrule) - end - end - - return rules -end - --- Get all linking outputnodes of outputnode (receptor or conductor) that is connected to --- inputnode (effector or conductor) at position `input` and has an input in direction `rule` -function mesecon.rules_link_rule_all_inverted(input, rule) - local output = vector.add(input, rule) - local outputnode = get_node_force(output) - local outputrules = mesecon.get_any_outputrules(outputnode) - if not outputrules then - return {} - end - local rules = {} - - for _, outputrule in pairs(mesecon.flattenrules(outputrules)) do - if equals(vector.add(output, outputrule), input) then - local newrule = copy(outputrule) - newrule = invertRule(newrule) - newrule.spread = rule.spread - insert(rules, newrule) - end - end - return rules -end - -function mesecon.is_powered(pos, rule, depth, sourcepos, home_pos) - if depth == nil then depth = 0 end - if depth > 1 then - return false, false - end - local node = get_node_force(pos) - local rules = mesecon.get_any_inputrules(node) - if not rules then - return false, false - end - if not home_pos then - home_pos = pos - end - - -- List of nodes that send out power to pos - if sourcepos == nil then - sourcepos = {} - end - - local function power_walk(pos, home_pos, sourcepos, rulenames, rule, depth) - local spread = false - for _, rname in pairs(rulenames) do - local np = vector.add(pos, rname) - local nn = get_node_force(np) - if (mesecon.is_conductor_on (nn, invertRule(rname)) - or is_receptor_on (nn.name)) then - if not equals(home_pos, np) then - local rulez = mesecon.get_any_outputrules(nn) - local spread_tmp = false - for r=1, #rulez do - if equals(invertRule(rname), rulez[r]) then - if rulez[r].spread then - spread_tmp = true - end - end - end - if depth == 0 or spread_tmp then - insert(sourcepos, np) - if spread_tmp then - spread = true - end - end - end - elseif depth == 0 and minetest.get_item_group(nn.name, "opaque") == 1 then - local more_sourcepos = mesecon.is_powered(np, nil, depth + 1, sourcepos, home_pos) - if more_sourcepos and #more_sourcepos > 0 then - mesecon.mergetable(sourcepos, more_sourcepos) - end - end - end - return sourcepos, spread - end - - local spread = false - if not rule then - for _, rule in pairs(mesecon.flattenrules(rules)) do - local spread_temp - local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule) - sourcepos, spread_temp = power_walk(pos, home_pos, sourcepos, rulenames, rule, depth) - if spread_temp then - spread = true - end - end - else - local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule) - sourcepos, spread = power_walk(pos, home_pos, sourcepos, rulenames, rule, depth) - end - - -- Return FALSE if not powered, return list of sources if is powered - - if (#sourcepos == 0) then - return false, false - else - return sourcepos, spread - end -end - diff --git a/mods/ITEMS/REDSTONE/mesecons/mod.conf b/mods/ITEMS/REDSTONE/mesecons/mod.conf deleted file mode 100644 index 94be765096..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons -depends = mcl_sounds, mcl_core -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons/presets.lua b/mods/ITEMS/REDSTONE/mesecons/presets.lua deleted file mode 100644 index d9d8418d80..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons/presets.lua +++ /dev/null @@ -1,110 +0,0 @@ -mesecon.rules = {} -mesecon.state = {} - -mesecon.rules.default = -{{x=0, y=0, z=-1}, - {x=1, y=0, z=0}, - {x=-1, y=0, z=0}, - {x=0, y=0, z=1}, - {x=0, y=1, z=0}, - {x=0, y=-1, z=0}, - - {x=1, y=1, z=0}, - {x=1, y=-1, z=0}, - {x=-1, y=1, z=0}, - {x=-1, y=-1, z=0}, - {x=0, y=1, z=1}, - {x=0, y=-1, z=1}, - {x=0, y=1, z=-1}, - {x=0, y=-1, z=-1}} - -mesecon.rules.alldirs = -{{x= 1, y= 0, z= 0}, - {x=-1, y= 0, z= 0}, - {x= 0, y= 1, z= 0}, - {x= 0, y=-1, z= 0}, - {x= 0, y= 0, z= 1}, - {x= 0, y= 0, z=-1}} - -mesecon.rules.pplate = -{{x = 1, y = 0, z = 0}, - {x =-1, y = 0, z = 0}, - {x = 0, y = 1, z = 0}, - {x = 0, y =-1, z = 0, spread = true}, - {x = 0, y = 0, z = 1}, - {x = 0, y = 0, z =-1}} - -mesecon.rules.buttonlike = -{{x = 0, y = 0, z =-1}, - {x = 0, y = 0, z = 1}, - {x = 0, y =-1, z = 0}, - {x = 0, y = 1, z = 0}, - {x =-1, y = 0, z = 0}, - {x = 1, y = 0, z = 0, spread = true}} - -mesecon.rules.floor = -{{x = 1, y = 0, z = 0}, - {x =-1, y = 0, z = 0}, - {x = 0, y = 1, z = 0}, - {x = 0, y =-1, z = 0, spread = true}, - {x = 0, y = 0, z = 1}, - {x = 0, y = 0, z =-1}} - -mesecon.rules.flat = -{{x = 1, y = 0, z = 0}, - {x =-1, y = 0, z = 0}, - {x = 0, y = 0, z = 1}, - {x = 0, y = 0, z =-1}} - - - --- NOT IN ORIGNAL MESECONS -mesecon.rules.mcl_alldirs_spread = -{{x= 1, y= 0, z= 0, spread = true}, - {x=-1, y= 0, z= 0, spread = true}, - {x= 0, y= 1, z= 0, spread = true}, - {x= 0, y=-1, z= 0, spread = true}, - {x= 0, y= 0, z= 1, spread = true}, - {x= 0, y= 0, z=-1, spread = true}} - --- END OF UNOFFICIAL RULES - -local rules_buttonlike = { - xp = mesecon.rules.buttonlike, - xn = mesecon.rotate_rules_right(mesecon.rotate_rules_right(mesecon.rules.buttonlike)), - yp = mesecon.rotate_rules_down(mesecon.rules.buttonlike), - yn = mesecon.rotate_rules_up(mesecon.rules.buttonlike), - zp = mesecon.rotate_rules_right(mesecon.rules.buttonlike), - zn = mesecon.rotate_rules_left(mesecon.rules.buttonlike), -} - -local rules_wallmounted = { - xp = mesecon.rotate_rules_down(mesecon.rules.floor), - xn = mesecon.rotate_rules_up(mesecon.rules.floor), - yp = mesecon.rotate_rules_up(mesecon.rotate_rules_up(mesecon.rules.floor)), - yn = mesecon.rules.floor, - zp = mesecon.rotate_rules_left(mesecon.rotate_rules_up(mesecon.rules.floor)), - zn = mesecon.rotate_rules_right(mesecon.rotate_rules_up(mesecon.rules.floor)), -} - -local function rules_from_dir(ruleset, dir) - if dir.x == 1 then return ruleset.xp end - if dir.y == 1 then return ruleset.yp end - if dir.z == 1 then return ruleset.zp end - if dir.x == -1 then return ruleset.xn end - if dir.y == -1 then return ruleset.yn end - if dir.z == -1 then return ruleset.zn end -end - -function mesecon.rules.buttonlike_get(node) - local dir = minetest.facedir_to_dir(node.param2) - return rules_from_dir(rules_buttonlike, dir) -end - -function mesecon.rules.wallmounted_get(node) - local dir = minetest.wallmounted_to_dir(node.param2) - return rules_from_dir(rules_wallmounted, dir) -end - -mesecon.state.on = "on" -mesecon.state.off = "off" diff --git a/mods/ITEMS/REDSTONE/mesecons/services.lua b/mods/ITEMS/REDSTONE/mesecons/services.lua deleted file mode 100644 index 7d1fce2d8c..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons/services.lua +++ /dev/null @@ -1,168 +0,0 @@ --- Dig and place services - -function mesecon.on_placenode(pos, node) - mesecon.execute_autoconnect_hooks_now(pos, node) - - -- Receptors: Send on signal when active - if mesecon.is_receptor_on(node.name) then - mesecon.receptor_on(pos, mesecon.receptor_get_rules(node)) - end - - -- Conductors: Send turnon signal when powered or replace by respective offstate conductor - -- if placed conductor is an onstate one - if mesecon.is_conductor(node.name) then - local sources = mesecon.is_powered(pos) - if sources then - -- also call receptor_on if itself is powered already, so that neighboring - -- conductors will be activated (when pushing an on-conductor with a piston) - for _, s in ipairs(sources) do - local rule = vector.subtract(pos, s) - mesecon.turnon(pos, rule) - end - mesecon.receptor_on (pos, mesecon.conductor_get_rules(node)) - elseif mesecon.is_conductor_on(node) then - minetest.swap_node(pos, {name = mesecon.get_conductor_off(node)}) - end - end - - -- Effectors: Send changesignal and activate or deactivate - if mesecon.is_effector(node.name) then - local powered_rules = {} - local unpowered_rules = {} - - -- for each input rule, check if powered - for _, r in ipairs(mesecon.effector_get_rules(node)) do - local powered = mesecon.is_powered(pos, r) - if powered then table.insert(powered_rules, r) - else table.insert(unpowered_rules, r) end - - local state = powered and mesecon.state.on or mesecon.state.off - mesecon.changesignal(pos, node, r, state, 1) - end - - if (#powered_rules > 0) then - for _, r in ipairs(powered_rules) do - mesecon.activate(pos, node, r, 1) - end - else - for _, r in ipairs(unpowered_rules) do - mesecon.deactivate(pos, node, r, 1) - end - end - end - - if minetest.get_item_group(node.name, "opaque") == 1 then - local neighbors = mesecon.mcl_get_neighbors(pos) - local is_powered, direct_source = mesecon.is_powered(pos) - if is_powered and direct_source then - for n=1, #neighbors do - local npos = neighbors[n].pos - local nnode = minetest.get_node(npos) - if mesecon.is_conductor_off(nnode) then - mesecon.receptor_on(npos, mesecon.conductor_get_rules(nnode)) - -- Redstone torch is a special case and must be ignored - elseif mesecon.is_effector_on(nnode.name) and minetest.get_item_group(nnode.name, "redstone_torch") == 0 then - mesecon.changesignal(npos, nnode, neighbors[n].link, mesecon.state.on, 1) - mesecon.activate(npos, nnode, neighbors[n].link, 1) - end - end - end - end -end - -function mesecon.on_dignode(pos, node) - if mesecon.is_conductor_on(node) then - mesecon.receptor_off(pos, mesecon.conductor_get_rules(node)) - elseif mesecon.is_receptor_on(node.name) then - mesecon.receptor_off(pos, mesecon.receptor_get_rules(node)) - end - if minetest.get_item_group(node.name, "opaque") == 1 then - --local sources = mesecon.is_powered(pos) - local neighbors = mesecon.mcl_get_neighbors(pos) - for n=1, #neighbors do - local npos = neighbors[n].pos - local nlink = neighbors[n].link - local nnode = minetest.get_node(npos) - if mesecon.is_conductor_on(nnode) then - mesecon.receptor_off(npos, mesecon.conductor_get_rules(nnode)) - -- Disable neighbor effectors unless they are in a special ignore group - elseif mesecon.is_effector_on(nnode.name) and mesecon.is_powered(npos) == false and minetest.get_item_group(nnode.name, "mesecon_ignore_opaque_dig") == 0 then - mesecon.changesignal(npos, nnode, nlink, mesecon.state.off, 1) - mesecon.deactivate(npos, nnode, nlink, 1) - end - end - end - mesecon.execute_autoconnect_hooks_queue(pos, node) -end - -function mesecon.on_blastnode(pos, node) - local node = minetest.get_node(pos) - minetest.remove_node(pos) - mesecon.on_dignode(pos, node) - return minetest.get_node_drops(node.name, "") -end - -minetest.register_on_placenode(mesecon.on_placenode) -minetest.register_on_dignode(mesecon.on_dignode) - --- Overheating service for fast circuits -local OVERHEAT_MAX = mesecon.setting("overheat_max", 8) -local COOLDOWN_TIME = mesecon.setting("cooldown_time", 3.0) -local COOLDOWN_STEP = mesecon.setting("cooldown_granularity", 0.5) -local COOLDOWN_MULTIPLIER = OVERHEAT_MAX / COOLDOWN_TIME -local cooldown_timer = 0.0 -local object_heat = {} - --- returns true if heat is too high -function mesecon.do_overheat(pos) - local id = minetest.hash_node_position(pos) - local heat = (object_heat[id] or 0) + 1 - object_heat[id] = heat - if heat >= OVERHEAT_MAX then - minetest.log("action", "Node overheats at " .. minetest.pos_to_string(pos)) - object_heat[id] = nil - return true - end - return false -end - -function mesecon.do_cooldown(pos) - local id = minetest.hash_node_position(pos) - object_heat[id] = nil -end - -function mesecon.get_heat(pos) - local id = minetest.hash_node_position(pos) - return object_heat[id] or 0 -end - -function mesecon.move_hot_nodes(moved_nodes) - local new_heat = {} - for _, n in ipairs(moved_nodes) do - local old_id = minetest.hash_node_position(n.oldpos) - local new_id = minetest.hash_node_position(n.pos) - new_heat[new_id] = object_heat[old_id] - object_heat[old_id] = nil - end - for id, heat in pairs(new_heat) do - object_heat[id] = heat - end -end - -local function global_cooldown(dtime) - cooldown_timer = cooldown_timer + dtime - if cooldown_timer < COOLDOWN_STEP then - return -- don't overload the CPU - end - local cooldown = COOLDOWN_MULTIPLIER * cooldown_timer - cooldown_timer = 0 - for id, heat in pairs(object_heat) do - heat = heat - cooldown - if heat <= 0 then - object_heat[id] = nil -- free some RAM - else - object_heat[id] = heat - end - end -end -minetest.register_globalstep(global_cooldown) diff --git a/mods/ITEMS/REDSTONE/mesecons/settings.lua b/mods/ITEMS/REDSTONE/mesecons/settings.lua deleted file mode 100644 index 02207073c5..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons/settings.lua +++ /dev/null @@ -1,15 +0,0 @@ --- SETTINGS -function mesecon.setting(setting, default) - if type(default) == "boolean" then - local read = minetest.settings:get_bool("mesecon."..setting) - if read == nil then - return default - else - return read - end - elseif type(default) == "string" then - return minetest.settings:get("mesecon."..setting) or default - elseif type(default) == "number" then - return tonumber(minetest.settings:get("mesecon."..setting) or default) - end -end diff --git a/mods/ITEMS/REDSTONE/mesecons/util.lua b/mods/ITEMS/REDSTONE/mesecons/util.lua deleted file mode 100644 index b6602526ab..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons/util.lua +++ /dev/null @@ -1,461 +0,0 @@ -function mesecon.move_node(pos, newpos) - local node = minetest.get_node(pos) - local meta = minetest.get_meta(pos):to_table() - minetest.remove_node(pos) - minetest.set_node(newpos, node) - minetest.get_meta(pos):from_table(meta) -end - ---Rules rotation Functions: -function mesecon.rotate_rules_right(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = -rule.z, - y = rule.y, - z = rule.x, - name = rule.name, - spread = rule.spread,}) - end - return nr -end - -function mesecon.rotate_rules_left(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = rule.z, - y = rule.y, - z = -rule.x, - name = rule.name, - spread = rule.spread,}) - end - return nr -end - -function mesecon.rotate_rules_down(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = -rule.y, - y = rule.x, - z = rule.z, - name = rule.name, - spread = rule.spread,}) - end - return nr -end - -function mesecon.rotate_rules_up(rules) - local nr = {} - for i, rule in ipairs(rules) do - table.insert(nr, { - x = rule.y, - y = -rule.x, - z = rule.z, - name = rule.name, - spread = rule.spread,}) - end - return nr -end - -function mesecon.flattenrules(allrules) ---[[ - { - { - {xyz}, - {xyz}, - }, - { - {xyz}, - {xyz}, - }, - } ---]] - if allrules[1] and - allrules[1].x then - return allrules - end - - local shallowrules = {} - for _, metarule in ipairs( allrules) do - for _, rule in ipairs(metarule ) do - table.insert(shallowrules, rule) - end - end - return shallowrules ---[[ - { - {xyz}, - {xyz}, - {xyz}, - {xyz}, - } ---]] -end - -function mesecon.rule2bit(findrule, allrules) - --get the bit of the metarule the rule is in, or bit 1 - if (allrules[1] and - allrules[1].x) or - not findrule then - return 1 - end - for m,metarule in ipairs( allrules) do - for _, rule in ipairs(metarule ) do - if vector.equals(findrule, rule) then - return m - end - end - end -end - -function mesecon.rule2metaindex(findrule, allrules) - --get the metarule the rule is in, or allrules - if allrules[1].x then - return nil - end - - if not(findrule) then - return mesecon.flattenrules(allrules) - end - - for m, metarule in ipairs( allrules) do - for _, rule in ipairs(metarule ) do - if vector.equals(findrule, rule) then - return m - end - end - end -end - -function mesecon.rule2meta(findrule, allrules) - if #allrules == 0 then return {} end - - local index = mesecon.rule2metaindex(findrule, allrules) - if index == nil then - if allrules[1].x then - return allrules - else - return {} - end - end - return allrules[index] -end - --- Returns the 6 immediate neighbors of pos --- (nodes which touch the sides of pos). --- NOT PART OF ORIGINAL MESECONS! -function mesecon.mcl_get_neighbors(pos) - local r = mesecon.rules.alldirs - local e = {} - for i=1, #r do - table.insert(e, { pos = vector.add(pos, r[i]), link = r[i] }) - end - return e -end - -function mesecon.dec2bin(n) - local x, y = math.floor(n / 2), n % 2 - if (n > 1) then - return mesecon.dec2bin(x)..y - else - return ""..y - end -end - -function mesecon.getstate(nodename, states) - for state, name in ipairs(states) do - if name == nodename then - return state - end - end - error(nodename.." doesn't mention itself in "..dump(states)) -end - -function mesecon.getbinstate(nodename, states) - return mesecon.dec2bin(mesecon.getstate(nodename, states)-1) -end - -function mesecon.get_bit(binary,bit) - bit = bit or 1 - local c = binary:len()-(bit-1) - return binary:sub(c,c) == "1" -end - -function mesecon.set_bit(binary,bit,value) - if value == "1" then - if not mesecon.get_bit(binary,bit) then - return mesecon.dec2bin(tonumber(binary,2)+math.pow(2,bit-1)) - end - elseif value == "0" then - if mesecon.get_bit(binary,bit) then - return mesecon.dec2bin(tonumber(binary,2)-math.pow(2,bit-1)) - end - end - return binary - -end - -function mesecon.invertRule(r) - local spread = r.spread - r = vector.multiply(r, -1) - if spread then - r.spread = true - end - return r -end - -function mesecon.tablecopy(table) -- deep table copy - if type(table) ~= "table" then return table end -- no need to copy - local newtable = {} - - for idx, item in pairs(table) do - if type(item) == "table" then - newtable[idx] = mesecon.tablecopy(item) - else - newtable[idx] = item - end - end - - return newtable -end - -function mesecon.cmpAny(t1, t2) - if type(t1) ~= type(t2) then return false end - if type(t1) ~= "table" and type(t2) ~= "table" then return t1 == t2 end - - for i, e in pairs(t1) do - if not mesecon.cmpAny(e, t2[i]) then return false end - end - - return true -end - --- does not overwrite values; number keys (ipairs) are appended, not overwritten -function mesecon.mergetable(source, dest) - local rval = mesecon.tablecopy(dest) - - for k, v in pairs(source) do - rval[k] = dest[k] or mesecon.tablecopy(v) - end - for i, v in ipairs(source) 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 - spec_common.__mesecon_basename = name - spec_on.__mesecon_state = "on" - spec_off.__mesecon_state = "off" - - spec_on = mesecon.mergetable(spec_common, spec_on); - spec_off = mesecon.mergetable(spec_common, spec_off); - - minetest.register_node(name .. "_on", spec_on) - minetest.register_node(name .. "_off", spec_off) -end - --- swap onstate and offstate nodes, returns new state -function mesecon.flipstate(pos, node) - local nodedef = minetest.registered_nodes[node.name] - local newstate - if (nodedef.__mesecon_state == "on") then newstate = "off" end - if (nodedef.__mesecon_state == "off") then newstate = "on" end - - minetest.swap_node(pos, {name = nodedef.__mesecon_basename .. "_" .. newstate, - param2 = node.param2}) - - return newstate -end - --- File writing / reading utilities -local wpath = minetest.get_worldpath() -function mesecon.file2table(filename) - local f = io.open(wpath..DIR_DELIM..filename, "r") - if f == nil then return {} end - local t = f:read("*all") - f:close() - if t == "" or t == nil then return {} end - return minetest.deserialize(t) -end - -function mesecon.table2file(filename, table) - local f = io.open(wpath..DIR_DELIM..filename, "w") - f:write(minetest.serialize(table)) - f:close() -end - --- Block position "hashing" (convert to integer) functions for voxelmanip cache -local BLOCKSIZE = 16 - --- convert node position --> block hash -local function hash_blockpos(pos) - return minetest.hash_node_position({ - x = math.floor(pos.x/BLOCKSIZE), - y = math.floor(pos.y/BLOCKSIZE), - z = math.floor(pos.z/BLOCKSIZE) - }) -end - --- Maps from a hashed mapblock position (as returned by hash_blockpos) to a --- table. --- --- Contents of the table are: --- “vm” → the VoxelManipulator --- “va” → the VoxelArea --- “data” → the data array --- “param1” → the param1 array --- “param2” → the param2 array --- “dirty” → true if data has been modified --- --- Nil if no VM-based transaction is in progress. -local vm_cache = nil - --- Starts a VoxelManipulator-based transaction. --- --- During a VM transaction, calls to vm_get_node and vm_swap_node operate on a --- cached copy of the world loaded via VoxelManipulators. That cache can later --- be committed to the real map by means of vm_commit or discarded by means of --- vm_abort. -function mesecon.vm_begin() - vm_cache = {} -end - --- Finishes a VoxelManipulator-based transaction, freeing the VMs and map data --- and writing back any modified areas. -function mesecon.vm_commit() - for hash, tbl in pairs(vm_cache) do - if tbl.dirty then - local vm = tbl.vm - vm:set_data(tbl.data) - vm:write_to_map() - vm:update_map() - end - end - vm_cache = nil -end - --- Finishes a VoxelManipulator-based transaction, freeing the VMs and throwing --- away any modified areas. -function mesecon.vm_abort() - vm_cache = nil -end - --- Gets the cache entry covering a position, populating it if necessary. -local function vm_get_or_create_entry(pos) - local hash = hash_blockpos(pos) - local tbl = vm_cache[hash] - if not tbl then - local vm = minetest.get_voxel_manip(pos, pos) - local min_pos, max_pos = vm:get_emerged_area() - local va = VoxelArea:new{MinEdge = min_pos, MaxEdge = max_pos} - tbl = {vm = vm, va = va, data = vm:get_data(), param1 = vm:get_light_data(), param2 = vm:get_param2_data(), dirty = false} - vm_cache[hash] = tbl - end - return tbl -end - --- Gets the node at a given position during a VoxelManipulator-based --- transaction. -function mesecon.vm_get_node(pos) - local tbl = vm_get_or_create_entry(pos) - local index = tbl.va:indexp(pos) - local node_value = tbl.data[index] - if node_value == minetest.CONTENT_IGNORE then - return nil - else - local node_param1 = tbl.param1[index] - local node_param2 = tbl.param2[index] - return {name = minetest.get_name_from_content_id(node_value), param1 = node_param1, param2 = node_param2} - end -end - --- Sets a node’s name during a VoxelManipulator-based transaction. --- --- Existing param1, param2, and metadata are left alone. -function mesecon.vm_swap_node(pos, name) - local tbl = vm_get_or_create_entry(pos) - local index = tbl.va:indexp(pos) - tbl.data[index] = minetest.get_content_id(name) - tbl.dirty = true -end - --- Gets the node at a given position, regardless of whether it is loaded or --- not, respecting a transaction if one is in progress. --- --- Outside a VM transaction, if the mapblock is not loaded, it is pulled into --- the server’s main map data cache and then accessed from there. --- --- Inside a VM transaction, the transaction’s VM cache is used. -function mesecon.get_node_force(pos) - if vm_cache then - return mesecon.vm_get_node(pos) - else - local node = minetest.get_node_or_nil(pos) - if node == nil then - -- Node is not currently loaded; use a VoxelManipulator to prime - -- the mapblock cache and try again. - minetest.get_voxel_manip(pos, pos) - node = minetest.get_node_or_nil(pos) - end - return node - end -end - --- Swaps the node at a given position, regardless of whether it is loaded or --- not, respecting a transaction if one is in progress. --- --- Outside a VM transaction, if the mapblock is not loaded, it is pulled into --- the server’s main map data cache and then accessed from there. --- --- Inside a VM transaction, the transaction’s VM cache is used. --- --- This function can only be used to change the node’s name, not its parameters --- or metadata. -function mesecon.swap_node_force(pos, name) - if vm_cache then - return mesecon.vm_swap_node(pos, name) - else - -- This serves to both ensure the mapblock is loaded and also hand us - -- the old node table so we can preserve param2. - local node = mesecon.get_node_force(pos) - node.name = name - minetest.swap_node(pos, node) - end -end - --- Autoconnect Hooks --- Nodes like conductors may change their appearance and their connection rules --- right after being placed or after being dug, e.g. the default wires use this --- to automatically connect to linking nodes after placement. --- After placement, the update function will be executed immediately so that the --- possibly changed rules can be taken into account when recalculating the circuit. --- After digging, the update function will be queued and executed after --- recalculating the circuit. The update function must take care of updating the --- node at the given position itself, but also all of the other nodes the given --- position may have (had) a linking connection to. -mesecon.autoconnect_hooks = {} - --- name: A unique name for the hook, e.g. "foowire". Used to name the actionqueue function. --- fct: The update function with parameters function(pos, node) -function mesecon.register_autoconnect_hook(name, fct) - mesecon.autoconnect_hooks[name] = fct - mesecon.queue:add_function("autoconnect_hook_"..name, fct) -end - -function mesecon.execute_autoconnect_hooks_now(pos, node) - for _, fct in pairs(mesecon.autoconnect_hooks) do - fct(pos, node) - end -end - -function mesecon.execute_autoconnect_hooks_queue(pos, node) - for name in pairs(mesecon.autoconnect_hooks) do - mesecon.queue:add_action(pos, "autoconnect_hook_"..name, {node}) - end -end diff --git a/mods/ITEMS/REDSTONE/mesecons_alias/init.lua b/mods/ITEMS/REDSTONE/mesecons_alias/init.lua deleted file mode 100644 index 111a4b1c9a..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_alias/init.lua +++ /dev/null @@ -1,37 +0,0 @@ --- This file registers aliases for the /give /giveme commands. - -minetest.register_alias("mesecons:mesecon", "mesecons:wire_00000000_off") -minetest.register_alias("mesecons:object_detector", "mesecons_detector:object_detector_off") -minetest.register_alias("mesecons:wireless_inverter", "mesecons_wireless:wireless_inverter_on") -minetest.register_alias("mesecons:wireless_receiver", "mesecons_wireless:wireless_receiver_off") -minetest.register_alias("mesecons:wireless_transmitter", "mesecons_wireless:wireless_transmitter_off") -minetest.register_alias("mesecons:switch", "mesecons_switch:mesecon_switch_off") -minetest.register_alias("mesecons:button", "mesecons_button:button_off") -minetest.register_alias("mesecons:piston", "mesecons_pistons:piston_normal_off") -minetest.register_alias("mesecons:mesecon_torch", "mesecons_torch:mesecon_torch_on") -minetest.register_alias("mesecons:torch", "mesecons_torch:mesecon_torch_on") -minetest.register_alias("mesecons:pressure_plate_stone", "mesecons_pressureplates:pressure_plate_stone_off") -minetest.register_alias("mesecons:pressure_plate_wood", "mesecons_pressureplates:pressure_plate_wood_off") -minetest.register_alias("mesecons:pressure_plate_birchwood", "mesecons_pressureplates:pressure_plate_birchwood_off") -minetest.register_alias("mesecons:pressure_plate_acaciawood", "mesecons_pressureplates:pressure_plate_acaciawood_off") -minetest.register_alias("mesecons:pressure_plate_darkwood", "mesecons_pressureplates:pressure_plate_darkwood_off") -minetest.register_alias("mesecons:pressure_plate_sprucewood", "mesecons_pressureplates:pressure_plate_sprucewood_off") -minetest.register_alias("mesecons:pressure_plate_junglewood", "mesecons_pressureplates:pressure_plate_junglewood_off") -minetest.register_alias("mesecons:mesecon_socket", "mesecons_temperest:mesecon_socket_off") -minetest.register_alias("mesecons:mesecon_inverter", "mesecons_temperest:mesecon_inverter_on") -minetest.register_alias("mesecons:noteblock", "mesecons_noteblock:noteblock") -minetest.register_alias("mesecons:delayer", "mesecons_delayer:delayer_off_1") -minetest.register_alias("mesecons:solarpanel", "mesecons_solarpanel:solar_panel_off") - - ---Backwards compatibility -minetest.register_alias("mesecons:mesecon_off", "mesecons:wire_00000000_off") -minetest.register_alias("mesecons_pistons:piston_sticky", "mesecons_pistons:piston_sticky_on") -minetest.register_alias("mesecons_pistons:piston_normal", "mesecons_pistons:piston_normal_on") -minetest.register_alias("mesecons_pistons:piston_up_normal", "mesecons_pistons:piston_up_normal_on") -minetest.register_alias("mesecons_pistons:piston_down_normal", "mesecons_pistons:piston_down_normal_on") -minetest.register_alias("mesecons_pistons:piston_up_sticky", "mesecons_pistons:piston_up_sticky_on") -minetest.register_alias("mesecons_pistons:piston_down_sticky", "mesecons_pistons:piston_down_sticky_on") - ---MineClone 2 specials -minetest.register_alias("mesecons_materials:glue", "mcl_mobitems:slimeball") diff --git a/mods/ITEMS/REDSTONE/mesecons_alias/mod.conf b/mods/ITEMS/REDSTONE/mesecons_alias/mod.conf deleted file mode 100644 index 533d54c808..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_alias/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mesecons_alias -depends = mesecons diff --git a/mods/ITEMS/REDSTONE/mesecons_button/README.md b/mods/ITEMS/REDSTONE/mesecons_button/README.md deleted file mode 100644 index 31a1fa9de8..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/README.md +++ /dev/null @@ -1,16 +0,0 @@ -Mesecons button mod. -This mod adds the buttons for MineClone 2. - -MEDIA FILE CREDITS: - -`mesecons_button_push.ogg` - * Author: junggle - * License: CC BY 3.0 - * Original name: `btn121.ogg`, created on January 16th, 2007 - * Source: -`mesecons_button_push_wood.ogg` - * Author: junggle - * License: (CC BY 3.0 - * Original name: `btn314.ogg`, created on January 16th, 2007 - * Sound file was modified - * Source: diff --git a/mods/ITEMS/REDSTONE/mesecons_button/init.lua b/mods/ITEMS/REDSTONE/mesecons_button/init.lua deleted file mode 100644 index 2812b27582..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/init.lua +++ /dev/null @@ -1,252 +0,0 @@ --- WALL BUTTON --- A button that when pressed emits power for a short moment and then turns off again - -local S = minetest.get_translator(minetest.get_current_modname()) - -local button_sounds = {} -- remember button push sounds - -local button_get_output_rules = mesecon.rules.wallmounted_get - -local boxes_off = { - type = "wallmounted", - wall_side = { -8/16, -2/16, -4/16, -6/16, 2/16, 4/16 }, - wall_bottom = { -4/16, -8/16, -2/16, 4/16, -6/16, 2/16 }, - wall_top = { -4/16, 6/16, -2/16, 4/16, 8/16, 2/16 }, -} -local boxes_on = { - type = "wallmounted", - wall_side = { -8/16, -2/16, -4/16, -7/16, 2/16, 4/16 }, - wall_bottom = { -4/16, -8/16, -2/16, 4/16, -7/16, 2/16 }, - wall_top = { -4/16, 7/16, -2/16, 4/16, 8/16, 2/16 }, -} - --- Push the button -function mesecon.push_button(pos, node) - -- No-op if button is already pushed - if mesecon.is_receptor_on(node) then - return - end - local def = minetest.registered_nodes[node.name] - minetest.set_node(pos, {name="mesecons_button:button_"..def._mcl_button_basename.."_on", param2=node.param2}) - mesecon.receptor_on(pos, button_get_output_rules(node)) - local sfx = button_sounds[node.name] - if sfx then - minetest.sound_play(sfx, {pos=pos}, true) - end - local timer = minetest.get_node_timer(pos) - timer:start(def._mcl_button_timer) -end - -local function on_button_place(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities - return itemstack - end - - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then return end - local groups = def.groups - - -- Check special rightclick action of pointed node - if def and def.on_rightclick then - if not placer:get_player_control().sneak then - return def.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack, false - end - end - - -- If the pointed node is buildable, let's look at the node *behind* that node - if def.buildable_to then - local dir = vector.subtract(pointed_thing.above, pointed_thing.under) - local actual = vector.subtract(under, dir) - local actualnode = minetest.get_node(actual) - def = minetest.registered_nodes[actualnode.name] - groups = def.groups - end - - -- Only allow placement on full-cube solid opaque nodes - if (not groups) or (not groups.solid) or (not groups.opaque) or (def.node_box and def.node_box.type ~= "regular") then - return itemstack - end - - local above = pointed_thing.above - - local idef = itemstack:get_definition() - local itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing) - - if success then - if idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true) - end - end - return itemstack -end - -local buttonuse = S("Use the button to push it.") - -function mesecon.register_button(basename, description, texture, recipeitem, sounds, plusgroups, button_timer, push_by_arrow, longdesc, button_sound) - local groups_off = table.copy(plusgroups) - groups_off.attached_node=1 - groups_off.dig_by_water=1 - groups_off.destroy_by_lava_flow=1 - groups_off.dig_by_piston=1 - groups_off.button=1 -- button (off) - - local groups_on = table.copy(groups_off) - groups_on.not_in_creative_inventory=1 - groups_on.button=2 -- button (on) - - if not button_sound then - button_sound = "mesecons_button_push" - end - button_sounds["mesecons_button:button_"..basename.."_off"] = button_sound - - if push_by_arrow then - groups_off.button_push_by_arrow = 1 - groups_on.button_push_by_arrow = 1 - end - local tt = S("Provides redstone power when pushed") - tt = tt .. "\n" .. S("Push duration: @1s", string.format("%.1f", button_timer)) - if push_by_arrow then - tt = tt .. "\n" .. S("Pushable by arrow") - end - minetest.register_node("mesecons_button:button_"..basename.."_off", { - drawtype = "nodebox", - tiles = {texture}, - wield_image = "mesecons_button_wield_mask.png^"..texture.."^mesecons_button_wield_mask.png^[makealpha:255,126,126", - -- FIXME: Use proper 3D inventory image - inventory_image = "mesecons_button_wield_mask.png^"..texture.."^mesecons_button_wield_mask.png^[makealpha:255,126,126", - wield_scale = { x=1, y=1, z=1}, - paramtype = "light", - paramtype2 = "wallmounted", - is_ground_content = false, - walkable = false, - sunlight_propagates = true, - node_box = boxes_off, - groups = groups_off, - description = description, - _tt_help = tt, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = buttonuse, - on_place = on_button_place, - node_placement_prediction = "", - on_rightclick = function(pos, node) - mesecon.push_button(pos, node) - end, - sounds = sounds, - mesecons = {receptor = { - state = mesecon.state.off, - rules = button_get_output_rules, - }}, - _mcl_button_basename = basename, - _mcl_button_timer = button_timer, - - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - }) - - minetest.register_node("mesecons_button:button_"..basename.."_on", { - drawtype = "nodebox", - tiles = {texture}, - wield_image = "mesecons_button_wield_mask.png^"..texture.."^mesecons_button_wield_mask.png^[makealpha:255,126,126", - wield_scale = { x=1, y=1, z=0.5}, - paramtype = "light", - paramtype2 = "wallmounted", - is_ground_content = false, - walkable = false, - sunlight_propagates = true, - node_box = boxes_on, - groups = groups_on, - drop = "mesecons_button:button_"..basename.."_off", - _doc_items_create_entry = false, - node_placement_prediction = "", - sounds = sounds, - mesecons = {receptor = { - state = mesecon.state.on, - rules = button_get_output_rules - }}, - _mcl_button_basename = basename, - _mcl_button_timer = button_timer, - on_timer = function(pos, elapsed) - local node = minetest.get_node(pos) - if node.name=="mesecons_button:button_"..basename.."_on" then --has not been dug - -- Is button pushable by arrow? - if push_by_arrow then - -- If there's an arrow stuck in the button, keep it pressed and check - -- it again later. - local objs = minetest.get_objects_inside_radius(pos, 1) - for o=1, #objs do - local entity = objs[o]:get_luaentity() - if entity and entity.name == "mcl_bows:arrow_entity" then - local timer = minetest.get_node_timer(pos) - timer:start(button_timer) - return - end - end - end - - -- Normal operation: Un-press the button - minetest.set_node(pos, {name="mesecons_button:button_"..basename.."_off",param2=node.param2}) - minetest.sound_play(button_sound, {pos=pos, pitch=0.9}, true) - mesecon.receptor_off(pos, button_get_output_rules(node)) - end - end, - - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - }) - - minetest.register_craft({ - output = "mesecons_button:button_"..basename.."_off", - recipe = {{ recipeitem }}, - }) -end - -mesecon.register_button( - "stone", - S("Stone Button"), - "default_stone.png", - "mcl_core:stone", - mcl_sounds.node_sound_stone_defaults(), - {material_stone=1,handy=1,pickaxey=1}, - 1, - false, - S("A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second."), - "mesecons_button_push") - -local woods = { - { "wood", "mcl_core:wood", "default_wood.png", S("Oak Button") }, - { "acaciawood", "mcl_core:acaciawood", "default_acacia_wood.png", S("Acacia Button") }, - { "birchwood", "mcl_core:birchwood", "mcl_core_planks_birch.png", S("Birch Button") }, - { "darkwood", "mcl_core:darkwood", "mcl_core_planks_big_oak.png", S("Dark Oak Button") }, - { "sprucewood", "mcl_core:sprucewood", "mcl_core_planks_spruce.png", S("Spruce Button") }, - { "junglewood", "mcl_core:junglewood", "default_junglewood.png", S("Jungle Button") }, -} - -for w=1, #woods do - mesecon.register_button( - woods[w][1], - woods[w][4], - woods[w][3], - woods[w][2], - mcl_sounds.node_sound_wood_defaults(), - {material_wood=1,handy=1,axey=1}, - 1.5, - true, - S("A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows."), - "mesecons_button_push_wood") - - minetest.register_craft({ - type = "fuel", - recipe = "mesecons_button:button_"..woods[w][1].."_off", - burntime = 5, - }) -end - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_button:button_wood_off", "nodes", "mesecons_button:button_wood_on") - doc.add_entry_alias("nodes", "mesecons_button:button_stone_off", "nodes", "mesecons_button:button_stone_on") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.de.tr b/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.de.tr deleted file mode 100644 index 9b311b9a83..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.de.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.=Benutzen Sie den Knopf, um ihn zu drücken. -Stone Button=Steinknopf -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Ein Steinknopf ist eine Redstonekomponente aus Stein. Er kann gedrückt werden, um ein Redstonesignal zu senden. Im gedrückten Zustand versorgt er benachbarte Redstonekomponenten für 1 Sekunde mit Redstoneenergie. -Oak Button=Eichenknopf -Acacia Button=Akazienknopf -Birch Button=Birkenknopf -Dark Oak Button=Schwarzeichenknopf -Spruce Button=Fichtenknopf -Jungle Button=Dschungelknopf -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.=Ein Holzknopf ist eine Redstonekomponente aus Holz. Er kann gedrückt werden, um ein Redstonesignal zu senden. Im gedrückten Zustand versorgt er benachbarte Redstonekomponenten für 1,5 Sekunden mit Redstoneenergie. Holzknöpfe können auch von Pfeilen gedrückt werden. -Provides redstone power when pushed=Gibt Redstoneenergie, wenn gedrückt -Push duration: @1s=Druckdauer: @1s -Pushable by arrow=Drückbar von Pfeilen diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.es.tr b/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.es.tr deleted file mode 100644 index d793b7a99e..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.es.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.=Usa el botón para pulsarlo. -Stone Button=Botón de piedra -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Un botón de piedra es un componente de redstone hecho de piedra que se puede presionar para proporcionar energía de redstone. Cuando se empuja, alimenta los componentes adyacentes de redstone durante 1 segundo. -Oak Button=Botón de roble -Acacia Button=Botón de acacia -Birch Button=Botón de abedul -Dark Oak Button=Botón de roble oscuro -Spruce Button=Botón de abeto -Jungle Button=Botón de jungla -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.=Ein Holzknopf ist eine Redstonekomponente aus Holz. Er kann gedrückt werden, um ein Redstonesignal zu senden. Im gedrückten Zustand versorgt er benachbarte Redstonekomponenten für 1,5 Sekunden mit Redstoneenergie. Holzknöpfe können auch von Pfeilen gedrückt werden. diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.fr.tr b/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.fr.tr deleted file mode 100644 index 96f963b4b3..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.fr.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.=Utilisez le bouton pour le pousser. -Stone Button=Bouton de pierre -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Un bouton en pierre est un composant Redstone en pierre qui peut être poussé pour fournir de la puissance Redstone. Lorsqu'il est poussé, il alimente les composants Redstone adjacents pendant 1 seconde. -Oak Button=Bouton en Chêne -Acacia Button=Bouton en Acacia -Birch Button=Bouton en Bouleau -Dark Oak Button=Bouton en Chêne Noir -Spruce Button=Bouton en Sapin -Jungle Button=Bouton en Acajou -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.=Un bouton en bois est un composant de redstone en bois qui peut être poussé pour fournir une puissance de redstone. Lorsqu'il est poussé, il alimente les composants Redstone adjacents pendant 1,5 seconde. Les boutons en bois peuvent également être poussés par des flèches. -Provides redstone power when pushed=Fournit une puissance de redstone lorsqu'il est poussé -Push duration: @1s=Durée de poussée: @1s -Pushable by arrow=Poussable par une flèche diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.pl.tr b/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.pl.tr deleted file mode 100644 index f6d895ad0c..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.pl.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.=Użyj przycisku by go wcisnąć. -Stone Button=Kamienny przycisk -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Kamienny przycisk jest mechanizmem czerwienitowym, który można nacisnąć by dostarczył on energię czerwienitową. Po naciśnięciu zasila on przyległy mechanizm czerwienitowy przez 1 sekundę. -Oak Button=Dębowy przycisk -Acacia Button=Akacjowy przycisk -Birch Button=Brzozowy przycisk -Dark Oak Button=Ciemno-dębowy przycisk -Spruce Button=Świerkowy przycisk -Jungle Button=Tropikalny przycisk -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.=Drewniany przycisk jest mechanizmem czerwienitowym wykonanym z drewna, który można nacisnąć by dostarczał energię czerwienitową. Po naciśnięciu zasila on przyległe mechanizmy czerwienitowe przez 1.5 sekundy. Drewniane przyciski mogą być również naciśnięte przez strzały. -Provides redstone power when pushed=Dostarcza energii czerwienitowej gdy naciśnięty -Push duration: @1s=Czas trwania naciśnięcia: @1s -Pushable by arrow=Można nacisnąć strzałą diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.ru.tr b/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.ru.tr deleted file mode 100644 index a89c8098ab..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.ru.tr +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.=[Используйте] кнопку, чтобы нажать её. -Stone Button=Каменная кнопка -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.=Каменная кнопка это элемент редстоуна, сделанный из камня, её можно нажать, чтобы получить энергию редстоуна. При нажатии она включает соседние элементы редстоуна на 1 секунду. -Oak Button=Дубовая кнопка -Acacia Button=Акациевая кнопка -Birch Button=Берёзовая кнопка -Dark Oak Button=Кнопка из тёмного дуба -Spruce Button=Еловая кнопка -Jungle Button=Кнопка из дерева джунглей -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.=Деревянная кнопка это элемент редстоуна, сделанный из дерева, её можно нажать, чтобы получить энергию редстоуна. При нажатии она включает соседние элементы редстоуна на полторы секунды. Деревянные кнопки можно также активировать стрелами. -Provides redstone power when pushed=Выдаёт энергию редстоуна при нажатии -Push duration: @1s=Длительность нажатия: @1с -Pushable by arrow=Нажимается стрелами diff --git a/mods/ITEMS/REDSTONE/mesecons_button/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_button/locale/template.txt deleted file mode 100644 index 4c352b878e..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/locale/template.txt +++ /dev/null @@ -1,14 +0,0 @@ -# textdomain: mesecons_button -Use the button to push it.= -Stone Button= -A stone button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.= -Oak Button= -Acacia Button= -Birch Button= -Dark Oak Button= -Spruce Button= -Jungle Button= -A wooden button is a redstone component made out of wood which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1.5 seconds. Wooden buttons may also be pushed by arrows.= -Provides redstone power when pushed= -Push duration: @1s= -Pushable by arrow= diff --git a/mods/ITEMS/REDSTONE/mesecons_button/mod.conf b/mods/ITEMS/REDSTONE/mesecons_button/mod.conf deleted file mode 100644 index be127362ba..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_button/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_button -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push.ogg b/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push.ogg deleted file mode 100644 index 5ddc1932d4..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push_wood.ogg b/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push_wood.ogg deleted file mode 100644 index 23f53c4042..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_button/sounds/mesecons_button_push_wood.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_button/textures/mesecons_button_wield_mask.png b/mods/ITEMS/REDSTONE/mesecons_button/textures/mesecons_button_wield_mask.png deleted file mode 100644 index 211ac43fba..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_button/textures/mesecons_button_wield_mask.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/init.lua b/mods/ITEMS/REDSTONE/mesecons_commandblock/init.lua deleted file mode 100644 index 3902c3c18b..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/init.lua +++ /dev/null @@ -1,324 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local F = minetest.formspec_escape - -local tonumber = tonumber - -local color_red = mcl_colors.RED - -local command_blocks_activated = minetest.settings:get_bool("mcl_enable_commandblocks", true) -local msg_not_activated = S("Command blocks are not enabled on this server") - -local function construct(pos) - local meta = minetest.get_meta(pos) - - meta:set_string("commands", "") - meta:set_string("commander", "") -end - -local function after_place(pos, placer) - if placer then - local meta = minetest.get_meta(pos) - meta:set_string("commander", placer:get_player_name()) - end -end - -local function resolve_commands(commands, pos) - local players = minetest.get_connected_players() - - local meta = minetest.get_meta(pos) - local commander = meta:get_string("commander") - - -- A non-printable character used while replacing “@@”. - local SUBSTITUTE_CHARACTER = "\26" -- ASCII SUB - - -- No players online: remove all commands containing - -- problematic placeholders. - if #players == 0 then - commands = commands:gsub("[^\r\n]+", function (line) - line = line:gsub("@@", SUBSTITUTE_CHARACTER) - if line:find("@n") then return "" end - if line:find("@p") then return "" end - if line:find("@f") then return "" end - if line:find("@r") then return "" end - line = line:gsub("@c", commander) - line = line:gsub(SUBSTITUTE_CHARACTER, "@") - return line - end) - return commands - end - - local nearest, farthest = nil, nil - local min_distance, max_distance = math.huge, -1 - for index, player in pairs(players) do - local distance = vector.distance(pos, player:get_pos()) - if distance < min_distance then - min_distance = distance - nearest = player:get_player_name() - end - if distance > max_distance then - max_distance = distance - farthest = player:get_player_name() - end - end - local random = players[math.random(#players)]:get_player_name() - commands = commands:gsub("@@", SUBSTITUTE_CHARACTER) - commands = commands:gsub("@p", nearest) - commands = commands:gsub("@n", nearest) - commands = commands:gsub("@f", farthest) - commands = commands:gsub("@r", random) - commands = commands:gsub("@c", commander) - commands = commands:gsub(SUBSTITUTE_CHARACTER, "@") - return commands -end - -local function check_commands(commands, player_name) - for _, command in pairs(commands:split("\n")) do - local pos = command:find(" ") - local cmd = command - if pos then - cmd = command:sub(1, pos - 1) - end - local cmddef = minetest.chatcommands[cmd] - if not cmddef then - -- Invalid chat command - local msg = S("Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.", cmd) - if string.sub(cmd, 1, 1) == "/" then - msg = S("Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.", cmd) - end - return false, minetest.colorize(color_red, msg) - end - if player_name then - local player_privs = minetest.get_player_privs(player_name) - - for cmd_priv, _ in pairs(cmddef.privs) do - if player_privs[cmd_priv] ~= true then - local msg = S("Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.", cmd, cmd_priv) - return false, minetest.colorize(color_red, msg) - end - end - end - end - return true -end - -local function commandblock_action_on(pos, node) - if node.name ~= "mesecons_commandblock:commandblock_off" then - return - end - - local meta = minetest.get_meta(pos) - local commander = meta:get_string("commander") - - if not command_blocks_activated then - --minetest.chat_send_player(commander, msg_not_activated) - return - end - minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_on"}) - - local commands = resolve_commands(meta:get_string("commands"), pos) - for _, command in pairs(commands:split("\n")) do - local cpos = command:find(" ") - local cmd, param = command, "" - if cpos then - cmd = command:sub(1, cpos - 1) - param = command:sub(cpos + 1) - end - local cmddef = minetest.chatcommands[cmd] - if not cmddef then - -- Invalid chat command - return - end - -- Execute command in the name of commander - cmddef.func(commander, param) - end -end - -local function commandblock_action_off(pos, node) - if node.name == "mesecons_commandblock:commandblock_on" then - minetest.swap_node(pos, {name = "mesecons_commandblock:commandblock_off"}) - end -end - -local function on_rightclick(pos, node, player, itemstack, pointed_thing) - if not command_blocks_activated then - minetest.chat_send_player(player:get_player_name(), msg_not_activated) - return - end - local can_edit = true - -- Only allow write access in Creative Mode - if not minetest.is_creative_enabled(player:get_player_name()) then - can_edit = false - end - local pname = player:get_player_name() - if minetest.is_protected(pos, pname) then - can_edit = false - end - local privs = minetest.get_player_privs(pname) - if not privs.maphack then - can_edit = false - end - - local meta = minetest.get_meta(pos) - local commands = meta:get_string("commands") - if not commands then - commands = "" - end - local commander = meta:get_string("commander") - local commanderstr - if commander == "" or commander == nil then - commanderstr = S("Error: No commander! Block must be replaced.") - else - commanderstr = S("Commander: @1", commander) - end - local textarea_name, submit, textarea - -- If editing is not allowed, only allow read-only access. - -- Player can still view the contents of the command block. - if can_edit then - textarea_name = "commands" - submit = "button_exit[3.3,4.4;2,1;submit;"..F(S("Submit")).."]" - else - textarea_name = "" - submit = "" - end - if not can_edit and commands == "" then - textarea = "label[0.5,0.5;"..F(S("No commands.")).."]" - else - textarea = "textarea[0.5,0.5;8.5,4;"..textarea_name..";"..F(S("Commands:"))..";"..F(commands).."]" - end - local formspec = "size[9,5;]" .. - textarea .. - submit .. - "image_button[8,4.4;1,1;doc_button_icon_lores.png;doc;]" .. - "tooltip[doc;"..F(S("Help")).."]" .. - "label[0,4;"..F(commanderstr).."]" - minetest.show_formspec(pname, "commandblock_"..pos.x.."_"..pos.y.."_"..pos.z, formspec) -end - -local function on_place(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Use pointed node's on_rightclick function first, if present - local new_stack = mcl_util.call_on_rightclick(itemstack, placer, pointed_thing) - if new_stack then - return new_stack - end - - --local node = minetest.get_node(pointed_thing.under) - - local privs = minetest.get_player_privs(placer:get_player_name()) - if not privs.maphack then - minetest.chat_send_player(placer:get_player_name(), S("Placement denied. You need the “maphack” privilege to place command blocks.")) - return itemstack - end - - return minetest.item_place_node(itemstack, placer, pointed_thing) -end - -minetest.register_node("mesecons_commandblock:commandblock_off", { - description = S("Command Block"), - - _tt_help = S("Executes server commands when powered by redstone power"), - _doc_items_longdesc = -S("Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power."), - _doc_items_usagehelp = -S("Everyone can activate a command block and look at its commands, but not everyone can edit and place them.").."\n\n".. - -S("To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.").. -"\n\n".. - -S("To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.").."\n\n".. - -S("All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.").."\n\n".. - -S("Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:").."\n".. -S("• “@@c”: commander of this command block").."\n".. -S("• “@@n” or “@@p”: nearest player from the command block").."\n".. -S("• “@@f” farthest player from the command block").."\n".. -S("• “@@r”: random player currently in the world").."\n".. -S("• “@@@@”: literal “@@” sign").."\n\n".. - -S("Example 1:\n time 12000\nSets the game clock to 12:00").."\n\n".. - -S("Example 2:\n give @@n mcl_core:apple 5\nGives the nearest player 5 apples"), - - tiles = {{name="jeija_commandblock_off.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=2}}}, - groups = {creative_breakable=1, mesecon_effector_off=1}, - drop = "", - on_blast = function() end, - on_construct = construct, - is_ground_content = false, - on_place = on_place, - after_place_node = after_place, - on_rightclick = on_rightclick, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = {effector = { - action_on = commandblock_action_on, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 3600000, - _mcl_hardness = -1, -}) - -minetest.register_node("mesecons_commandblock:commandblock_on", { - tiles = {{name="jeija_commandblock_off.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=2}}}, - groups = {creative_breakable=1, mesecon_effector_on=1, not_in_creative_inventory=1}, - drop = "", - on_blast = function() end, - on_construct = construct, - is_ground_content = false, - on_place = on_place, - after_place_node = after_place, - on_rightclick = on_rightclick, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = {effector = { - action_off = commandblock_action_off, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 3600000, - _mcl_hardness = -1, -}) - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if string.sub(formname, 1, 13) == "commandblock_" then - if fields.doc and minetest.get_modpath("doc") then - doc.show_entry(player:get_player_name(), "nodes", "mesecons_commandblock:commandblock_off", true) - return - end - if (not fields.submit and not fields.key_enter) or (not fields.commands) then - return - end - - local privs = minetest.get_player_privs(player:get_player_name()) - if not privs.maphack then - minetest.chat_send_player(player:get_player_name(), S("Access denied. You need the “maphack” privilege to edit command blocks.")) - return - end - - local index, _, x, y, z = string.find(formname, "commandblock_(-?%d+)_(-?%d+)_(-?%d+)") - if index and x and y and z then - local pos = {x = tonumber(x), y = tonumber(y), z = tonumber(z)} - local meta = minetest.get_meta(pos) - if not minetest.is_creative_enabled(player:get_player_name()) then - minetest.chat_send_player(player:get_player_name(), S("Editing the command block has failed! You can only change the command block in Creative Mode!")) - return - end - local check, error_message = check_commands(fields.commands, player:get_player_name()) - if check == false then - -- Command block rejected - minetest.chat_send_player(player:get_player_name(), error_message) - return - else - meta:set_string("commands", fields.commands) - end - else - minetest.chat_send_player(player:get_player_name(), S("Editing the command block has failed! The command block is gone.")) - end - end -end) - --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_commandblock:commandblock_off", "nodes", "mesecons_commandblock:commandblock_on") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.de.tr b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.de.tr deleted file mode 100644 index a149feef94..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.de.tr +++ /dev/null @@ -1,30 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.=Fehler: Der Befehl „@1“ existiert nicht; Ihr Befehlsblock bleibt unverändert. Benutzen Sie den Chatbefehl „help“ für eine Liste der verfügbaren Befehle. -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.=Fehler: Der Befehl „@1“ existiert nicht; Ihr Befehlsblock bleibt unverändert. Benutzen Sie den Chatbefehl „help“ für eine Liste der verfügbaren Befehle. Tipp: Versuchen Sie, den Schrägstrich am Anfang zu entfernen. -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.=Fehler: Sie haben nicht die ausreichenden Privilegien, um den Befehl „@1“ zu benutzen (fehlendes Privileg: @2)! Der Befehlsblock bleibt unverändert. -Error: No commander! Block must be replaced.=Fehler: Kein Kommandant! Block muss ersetzt werden. -Commander: @1=Kommandant: @1 -Submit=OK -No commands.=Keine Befehle. -Commands:=Befehle: -Help=Hilfe -Placement denied. You need the “maphack” privilege to place command blocks.=Platzierung fehlgeschlagen. Sie brauchen das „maphack“-Privileg, um Befehlsblöcke platzieren zu können. -Command Block=Befehlsblock -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Befehlsblöcke sind mächtige Redstonekomponenten, die das Gefüge der Realität selbst verändern können. Mit anderen Worten, sie lassen den Server Serverbefehle ausführen, wenn sie mit Redstoneenergie versorgt werden. -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Jeder kann einen Befehlsblock aktivieren und sich seine Befehle ansehen, aber nicht jeder kann sie bearbeiten und platzieren. -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Um die Befehle in einem Befehlsblock zu betrachten, benutzen Sie ihn. Um ihn zu aktivieren, versorgen Sie ihn einfach mit Redstoneenergie. Das wird die Befehle einmalig ausführen. Um sie erneut auszuführen, schalten Sie die Redstoneenergie aus und wieder ein. -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.=Um einen Befehlsblock platzieren und die Befehle ändern zu können, müssen Sie im Kreativmodus sein und das „maphack“-Privileg haben. Ein neuer Befehlsblock hat keine Befehle und tut gar nichts. Benutzen Sie den Befehlsblock (im Kreativmodus!), um seine Befehle zu bearbeiten. Lesen Sie den Hilfeeintrag „Fortgeschrittenes > Serverbefehle“, um zu verstehen, wie Befehle funktionieren. Jede Zeile enthält einen einzigen Befehl. Sie geben Sie wie in der Konsole ein, aber ohne den Schrägstrich am Anfang. -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Alle Befehle werden im Namen des Spielers, der den Befehlsblock platziert hat, ausgeführt, als ob der Spieler die Befehle eingegeben hätte. Diesen Spieler nennen wir den „Kommandanten“ des Blocks. -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Befehlsblöcke unterstützen Platzhalter. Geben Sie einen dieser Platzhalter ein und sie werden durch einen anderen Text ersetzt: -• “@@c”: commander of this command block=• „@@c“: Kommandant dieses Befehlsblocks -• “@@n” or “@@p”: nearest player from the command block=• „@@n“ oder „@@p“: Nächster Spieler am Befehlsblock -• “@@f” farthest player from the command block=• „@@f“: Der vom Befehlsblock am weitesten entfernte Spieler -• “@@r”: random player currently in the world=• „@@r“: Zufälliger Spieler in der Welt -• “@@@@”: literal “@@” sign=• „@@@@“: Nur das „@@“-Zeichen -Example 1:@n time 12000@nSets the game clock to 12:00=1. Beispiel:@n time 12000@nSetzt die Spieluhr auf 12:00 Uhr -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples=2. Beispiel:@n give @@n mcl_core:apple 5@nGibt dem nächsten Spieler 5 Äpfel -Access denied. You need the “maphack” privilege to edit command blocks.=Zugriff verweigert. Sie brauchen das „maphack“-Privileg, um Befehlsblöcke zu bearbeiten. -Editing the command block has failed! You can only change the command block in Creative Mode!=Bearbeitung des Befehlsblocks fehlgeschlagen! Sie können den Befehlsblock nur im Kreativmodus ändern! -Editing the command block has failed! The command block is gone.=Bearbeiten des Befehlsblocks fehlgeschlagen! Der Befehlsblock ist verschwunden. -Executes server commands when powered by redstone power=Führt Serverbefehle aus, wenn mit Redstoneenergie versorgt -Command blocks are not enabled on this server= diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.es.tr b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.es.tr deleted file mode 100644 index 938c710b94..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.es.tr +++ /dev/null @@ -1,31 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.=Error: el comando "@1" no existe; su bloque de comando no ha sido cambiado. Utilice el comando de chat "help" para obtener una lista de los comandos disponibles. -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.=Error: el comando "@1" no existe; su bloque de comando no ha sido cambiado. Utilice el comando de chat "help" para obtener una lista de los comandos disponibles. Sugerencia: intente eliminar la barra diagonal inicial. -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.=Error: ¡No tiene suficientes privilegios para usar el comando “@ 1” (faltan privilegios: @ 2)! El bloque de comando no ha sido cambiado. -Error: No commander! Block must be replaced.=Error: ¡Sin dueño! El bloque debe ser reemplazado. -Commander: @1=Dueño: @1 -Submit=Aceptar -No commands.=Sin comandos. -Commands:=Comandos: -Help=Ayuda -Placement denied. You need the “maphack” privilege to place command blocks.=Colocación denegada. Necesita el privilegio "maphack" para colocar bloques de comandos. -Command Block=Bloque de comandos -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Los bloques de comandos son poderosos componentes de redstone que pueden alterar la realidad misma. En otras palabras, hacen que el servidor ejecute comandos del servidor cuando se les suministra energía redstone. -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Todos pueden activar un bloque de comandos y ver sus comandos, pero no todos pueden editarlos y colocarlos. -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Para ver los comandos en un bloque de comandos, úselo. Para activar el bloque de comando, solo suminístrelo con redstone power. Esto ejecutará los comandos una vez. Para ejecutar los comandos nuevamente, apague y vuelva a encender la redstone. -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.= -# ^ OLD TRANSLATION: Para poder colocar un bloque de comandos y cambiar los comandos, debe estar en modo creativo y debe tener el privilegio de "maphack". Un nuevo bloque de comandos no tiene ningún comando y no hace nada. Use el bloque de comandos (en modo creativo) para editar sus comandos. Lea la entrada de ayuda "Temas avanzados> Comandos del servidor" para comprender cómo funcionan los comandos. Cada línea contiene un solo comando. Los ingresas como lo harías en la consola, pero sin la barra inclinada. Los comandos se ejecutarán de arriba a abajo. - -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Todos los comandos se ejecutarán en el nombre del jugador que colocó el bloque de comandos, como si el jugador tecleara los comandos. Se dice que este jugador es el "dueño" del bloque. -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Los bloques de comando admiten marcadores de posición, inserte uno de estos marcadores de posición y serán reemplazados por otro texto: -• “@@c”: commander of this command block=• "@@c“: dueño de este bloque de comandos -• “@@n” or “@@p”: nearest player from the command block=• "@@n“ o "@@p“: jugador más cercano del bloque de comandos -• “@@f” farthest player from the command block=• "@@f“: jugador más alejado del bloque de comandos -• “@@r”: random player currently in the world=• "@@r“: jugador aleatorio actualmente en el mundo -• “@@@@”: literal “@@” sign=• „@@@@“: literal "@@“ firmado -Example 1:@n time 12000@nSets the game clock to 12:00=1. Ejemplo:@n time 12000@nConfigura el reloj del juego a las 12:00 -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples=2. Beispiel:@n give @@n mcl_core:apple 5@nDa al jugador más cercano a 5 manzanas -Access denied. You need the “maphack” privilege to edit command blocks.=Acceso denegado. Necesita el privilegio "maphack" para editar bloques de comandos. -Editing the command block has failed! You can only change the command block in Creative Mode!=¡La edición del bloque de comando ha fallado! ¡Solo puede cambiar el bloque de comandos en modo creativo! -Editing the command block has failed! The command block is gone.=¡La edición del bloque de comando ha fallado! El bloque de comando se ha ido. -Command blocks are not enabled on this server= diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.fr.tr b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.fr.tr deleted file mode 100644 index b397c979ca..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.fr.tr +++ /dev/null @@ -1,30 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.=Erreur: la commande "@1" n'existe pas; votre bloc de commande n'a pas été modifié. Utilisez la commande de discussion "help" pour obtenir la liste des commandes disponibles. -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.=Erreur: la commande "@1" n'existe pas; votre bloc de commande n'a pas été modifié. Utilisez la commande de discussion "help" pour obtenir la liste des commandes disponibles. Astuce: essayez de supprimer la barre oblique principale. -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.=Erreur: vous ne disposez pas de privilèges suffisants pour utiliser la commande "@1" (privilège manquant: @2)! Le bloc de commandes n'a pas été modifié. -Error: No commander! Block must be replaced.=Erreur: pas de commandant! Le bloc doit être remplacé. -Commander: @1=Commandant: @1 -Submit=Soumettre -No commands.=Aucune commande. -Commands:=Commandes: -Help=Aide -Placement denied. You need the “maphack” privilege to place command blocks.=Placement refusé. Vous avez besoin du privilège "maphack" pour placer des blocs de commande. -Command Block=Bloc de Commande -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Les blocs de commande sont des composants redstone puissants qui sont capables de modifier la réalité elle-même. En d'autres termes, ils obligent le serveur à exécuter des commandes serveur lorsqu'ils sont alimentés en redstone. -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Tout le monde peut activer un bloc de commandes et consulter ses commandes, mais tout le monde ne peut pas les modifier et les placer. -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Pour afficher les commandes dans un bloc de commandes, utilisez-le. Pour activer le bloc de commande, il suffit de l'alimenter en redstone. Cela exécutera les commandes une fois. Pour exécuter à nouveau les commandes, éteignez puis rallumez le Redstone. -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.=Pour pouvoir placer un bloc de commande et modifier les commandes, vous devez être en mode créatif et avoir le privilège "maphack". Un nouveau bloc de commande n'a aucune commande et ne fait rien. Utilisez le bloc de commande (en mode créatif!) Pour modifier ses commandes. Lisez l'entrée d'aide "Utilisation avancée> Commandes du serveur" pour comprendre le fonctionnement des commandes. Chaque ligne contient une seule commande. Vous les entrez comme vous le feriez dans la console, mais sans la barre oblique principale. Les commandes seront exécutées de haut en bas. -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Toutes les commandes seront exécutées au nom du joueur qui a placé le bloc de commande, comme si le joueur avait tapé les commandes. Ce joueur est appelé le "commandant" du bloc. -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Les blocs de commande prennent en charge les espaces réservés, insérez l'un de ces espaces réservés et ils seront remplacés par un autre texte: -• “@@c”: commander of this command block=• “@@c”: commandant de ce bloc que commande -• “@@n” or “@@p”: nearest player from the command block=• “@@n” or “@@p”: joueur le plus proche du bloc de commande -• “@@f” farthest player from the command block=• “@@f” : joueur le plus éloigné du bloc de commande -• “@@r”: random player currently in the world=• “@@r”: joueur aléatoire actuellement dans le monde -• “@@@@”: literal “@@” sign= • “@@@@”: literalement le symbole “@@” -Example 1:@n time 12000@nSets the game clock to 12:00=Exemple 1:@n time 12000@nRègle l'horloge du jeu sur 12:00 -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples=Exemple 2:@n give @@n mcl_core:apple 5@nDonne au joueur le plus proche 5 pommes -Access denied. You need the “maphack” privilege to edit command blocks.=Accès refusé. Vous avez besoin du privilège "maphack" pour modifier les blocs de commande. -Editing the command block has failed! You can only change the command block in Creative Mode!=La modification du bloc de commandes a échoué! Vous ne pouvez modifier le bloc de commandes qu'en mode créatif! -Editing the command block has failed! The command block is gone.=La modification du bloc de commandes a échoué! Le bloc de commande a disparu. -Executes server commands when powered by redstone power=Exécute les commandes du serveur lorsqu'il est alimenté par l'alimentation Redstone -Command blocks are not enabled on this server=Les blocks de commandes ne sont pas activés sur ce serveur diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.pl.tr b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.pl.tr deleted file mode 100644 index 6ee1afcad5..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.pl.tr +++ /dev/null @@ -1,31 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.=Błąd: Komenda "@1" nie istnieje; twój blok komend nie został zmieniony. Użyj komendy "help" aby zobaczyć listę dostępnych komend. -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.=Błąd: Komenda "@1" nie istnieje; twój blok komend nie został zmieniony. Użyj komendy "help" aby zobaczyć listę dostępnych komend. Wskazówka: Spróbuj usunąć poprzedzający slesz. -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.=Błąd: Masz niewystarczające uprawnienia by użyć komendy "@1" (brakujący przywilej: @2)! Blok komend nie został zmieniony. -Error: No commander! Block must be replaced.=Blok: Brak komendanta! Blok musi zostać zamieniony. -Commander: @1=Komendant: @1 -Submit=Zatwierdź -No commands.=Brak komend. -Commands:=Komendy: -Help=Pomoc -Placement denied. You need the “maphack” privilege to place command blocks.=Odmówiono postawienia. Potrzebujesz przywileju "maphack" aby stawiać bloki komend. -Command Block=Blok komend -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Bloki komend są potężnymi mechanizmami czerwienitowymi, które są w stanie zmieniać samą rzeczywistość. Innymi słowy powodują one, że serwer wykonuje komendy gdy dostarczy się im energię czerwienitową. -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Każdy może aktywować blok komend i patrzeć na ich komendy, ale nie wszyscy mogą edytować i kłaść je. -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Aby zobaczyć komendy w bloku komend, kliknij użyj na nim. Aby aktywować blok komend zasil go energią czerwienitową. To wykona komendy raz. Aby wykonać je ponownie wyłącz, a następnie włącz energię. -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.=Aby być w stanie kłaść bloki komend i zmieniać ich komendy musisz być w trybie kreatywnym i posiadać przywilej "maphack". Nowy blok komend nie posiada żadnych komend i nie robi nic. Użyj bloku komend (w trybie kreatywnym!) aby zmienić jego komendy. Przeczytaj wpis w pomocy "Zaawansowane użycie > Komendy serwera" aby dowiedzieć się jak komendy działają. Każda linia zawiera pojedynczą komendę. Wprowadzasz je tak jak w konsoli, ale bez poprzedzającego slesza. Komendy będą wykonywane od góry do dołu. -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Wszystkie komendy będą formalnie wykonane przez gracza, który postawił blok komend, jakby to ten gracz wpisał komendę. Ten gracz nazywany jest komendantem bloku. -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Bloki komend wspierają zamienniki, wstaw jeden z nich a zostaną one zastąpione przez jakiś inny tekst: -• “@@c”: commander of this command block=• "@@c": komendant tego bloku komend -• “@@n” or “@@p”: nearest player from the command block=• "@@n" lub "@@p": gracz najbliżej tego bloku komend -• “@@f” farthest player from the command block=• "@@f": gracz najdalej od tego bloku komend -• “@@r”: random player currently in the world=• "@@r": losowy gracz znajdujący się w świecie -• “@@@@”: literal “@@” sign=• "@@@@": dosłowny znak "@@" -Example 1:@n time 12000@nSets the game clock to 12:00=Przykład 1:@n time 12000@nUstawia zegar gry na 12:00 -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples=Przykład 2:@n give @@n mcl_core:apple 5@nDaje najbliższemu graczowi 5 jabłek -Access denied. You need the “maphack” privilege to edit command blocks.=Odmowa dostępu. Potrzebujesz przywileju "maphack" by zmieniać bloki komend. -Editing the command block has failed! You can only change the command block in Creative Mode!=Edycja bloku komend nieudana! Możesz zmieniać bloki komend tylko w trybie kreatywnym. -Editing the command block has failed! The command block is gone.=Edycja bloku komend nieudana! Bloku komend już nie ma. -Executes server commands when powered by redstone power=Wykonuje komendy serwera gdy jest zasilany energią czerwienitową -Command blocks are not enabled on this server=Bloki komend nie są włączone na tym serwerze - diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.ru.tr b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.ru.tr deleted file mode 100644 index 85bed4b95c..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.ru.tr +++ /dev/null @@ -1,30 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.=Ошибка: Команда “@1” не существует; ваш командный блок не был изменён. Используйте чат-команду “help” для поучения списка доступных команд. -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.=Ошибка: Команда “@1” не существует; ваш командный блок не был изменён. Используйте чат-команду “help” для поучения списка доступных команд. Подсказка: Попробуйте убрать ведущий слэш. -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.=Ошибка: Вы не имеете привилегий для использования команды “@1” (отсутствует привилегия: @2)! Командный блок не был изменён. -Error: No commander! Block must be replaced.=Ошибка: Нет командующего! Блок следует заменить. -Commander: @1=Командующий: @1 -Submit=Отправить -No commands.=Нет команд. -Commands:=Команды: -Help=Помощь -Placement denied. You need the “maphack” privilege to place command blocks.=Установка запрещена. Для установки командных блоков нужно иметь привилегию “maphack”. -Command Block=Командный блок -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.=Командные блоки это мощнейшие компоненты редстоуна, способные изменять реальность сами по себе. Другими словами, они могут заставлять сервер выполнять серверные команды, если подать на них энергию редстоуна. -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.=Каждый может активировать командный блок и увидеть его команды, но не все могут редактировать и устанавливать его. -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.=Чтобы увидеть команды в командном блоке, [используйте] его. Чтобы активировать блок, просто подайте на него энергию редстоуна. При этом команды выполнятся однократно. Чтобы выполнить их вновь, выключите и снова включите энергию редстоуна. -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.=Чтобы иметь возможность устанавливать командные блоки и изменять их команды, вы должны находиться в творческом режиме и иметь привилегию “maphack”. Новый командный блок не содержит команд и ничего не делает. [Используйте] командный блок (в творческом режиме!) для редактирования его команд. Изучите справочную запись “Продвинутое использование > Серверные команды”, чтобы понять, как они работают. Каждая строка содержит одну команду. Вы вводите их так, как вводили бы в консоли, но без ведущих символов слэш. Команды выполняются сверху вниз. -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.=Все команды будут выполняться от имени игрока, разместившего командный блок, как будто если бы игрок сам их набирал. Этот игрок является так называемым “командиром” блока. -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:=Командные блоки поддерживаю шаблоны, вставляйте один из них - и они будут заменены на нужный вам текст: -• “@@c”: commander of this command block=• “@@c”: командир данного командного блока -• “@@n” or “@@p”: nearest player from the command block=• “@@n” или “@@p”: игрок, находящийся ближе всего к данному командному блоку -• “@@f” farthest player from the command block=• “@@f” игрок, находящийся дальше всего от данного командного блока -• “@@r”: random player currently in the world=• “@@r”: случайный игрок, в данный момент присутствующий в мире -• “@@@@”: literal “@@” sign=• “@@@@”: если нужно использовать символ “@@” сам по себе -Example 1:@n time 12000@nSets the game clock to 12:00=Пример 1:@n time 12000@nУстанавливает игровые часы на 12:00 -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples=Пример 2:@n give @@n mcl_core:apple 5@nДаёт ближайшему игроку 5 яблок -Access denied. You need the “maphack” privilege to edit command blocks.=Доступ запрещён. Вам нужно иметь привилегию “maphack”, чтобы редактировать командные блоки. -Editing the command block has failed! You can only change the command block in Creative Mode!=Попытка редактирования командного блока потерпела неудачу. Вы можете изменять командные блоки только в творческом режиме! -Editing the command block has failed! The command block is gone.=Попытка редактирования командного блока потерпела неудачу. Командный блок исчез. -Executes server commands when powered by redstone power=При подаче энергии редстоуна выполняет серверные команды -Command blocks are not enabled on this server= diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/template.txt deleted file mode 100644 index 49e98ef2b0..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/locale/template.txt +++ /dev/null @@ -1,30 +0,0 @@ -# textdomain: mesecons_commandblock -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands.= -Error: The command “@1” does not exist; your command block has not been changed. Use the “help” chat command for a list of available commands. Hint: Try to remove the leading slash.= -Error: You have insufficient privileges to use the command “@1” (missing privilege: @2)! The command block has not been changed.= -Error: No commander! Block must be replaced.= -Commander: @1= -Submit= -No commands.= -Commands:= -Help= -Placement denied. You need the “maphack” privilege to place command blocks.= -Command Block= -Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power.= -Everyone can activate a command block and look at its commands, but not everyone can edit and place them.= -To view the commands in a command block, use it. To activate the command block, just supply it with redstone power. This will execute the commands once. To execute the commands again, turn the redstone power off and on again.= -To be able to place a command block and change the commands, you need to be in Creative Mode and must have the “maphack” privilege. A new command block does not have any commands and does nothing. Use the command block (in Creative Mode!) to edit its commands. Read the help entry “Advanced usage > Server Commands” to understand how commands work. Each line contains a single command. You enter them like you would in the console, but without the leading slash. The commands will be executed from top to bottom.= -All commands will be executed on behalf of the player who placed the command block, as if the player typed in the commands. This player is said to be the “commander” of the block.= -Command blocks support placeholders, insert one of these placeholders and they will be replaced by some other text:= -• “@@c”: commander of this command block= -• “@@n” or “@@p”: nearest player from the command block= -• “@@f” farthest player from the command block= -• “@@r”: random player currently in the world= -• “@@@@”: literal “@@” sign= -Example 1:@n time 12000@nSets the game clock to 12:00= -Example 2:@n give @@n mcl_core:apple 5@nGives the nearest player 5 apples= -Access denied. You need the “maphack” privilege to edit command blocks.= -Editing the command block has failed! You can only change the command block in Creative Mode!= -Editing the command block has failed! The command block is gone.= -Executes server commands when powered by redstone power= -Command blocks are not enabled on this server= diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/mod.conf b/mods/ITEMS/REDSTONE/mesecons_commandblock/mod.conf deleted file mode 100644 index 26059530a0..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_commandblock/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_commandblock -depends = mesecons, mcl_colors, mcl_util -optional_depends = doc, doc_items diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_off.png b/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_off.png deleted file mode 100644 index 3df04792fd..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_on.png b/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_on.png deleted file mode 100644 index 3df04792fd..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_commandblock/textures/jeija_commandblock_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/init.lua b/mods/ITEMS/REDSTONE/mesecons_delayer/init.lua deleted file mode 100644 index fc12c0a36c..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/init.lua +++ /dev/null @@ -1,504 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local DELAYS = { 0.1, 0.2, 0.3, 0.4 } -local DEFAULT_DELAY = DELAYS[1] - --- Function that get the input/output rules of the delayer -local function delayer_get_output_rules(node) - local rules = {{x = -1, y = 0, z = 0, spread=true}} - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - -local function delayer_get_input_rules(node) - local rules = {{x = 1, y = 0, z = 0}} - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - --- Return the sides of a delayer. --- Those are used to toggle the lock state. -local function delayer_get_sides(node) - local rules = { - {x = 0, y = 0, z = -1}, - {x = 0, y = 0, z = 1}, - } - for i = 0, node.param2 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - --- Make the repeater at pos try to lock any repeater it faces. --- Returns true if a repeater was locked. -local function check_lock_repeater(pos, node) - -- Check the repeater at pos and look if it faces - -- a repeater placed sideways. - -- If yes, lock the second repeater. - local r = delayer_get_output_rules(node)[1] - local lpos = vector.add(pos, r) - local lnode = minetest.get_node(lpos) - local ldef = minetest.registered_nodes[lnode.name] - local g = minetest.get_item_group(lnode.name, "redstone_repeater") - if g >= 1 and g <= 4 then - local lrs = delayer_get_input_rules(lnode) - local fail = false - for _, lr in pairs(lrs) do - if lr.x == r.x or lr.z == r.z then - fail = true - break - end - end - if not fail then - minetest.set_node(lpos, {name=ldef.delayer_lockstate, param2=lnode.param2}) - local meta = minetest.get_meta(lpos) - -- Metadata: delay. Used to remember the delay for locked repeaters. - -- The number is the torch position (1-4). - meta:set_int("delay", g) - return true - end - end - return false -end - --- Make the repeater at pos try to unlock any repeater it faces. --- Returns true if a repeater was unlocked. -local function check_unlock_repeater(pos, node) - -- Check the repeater at pos and look if it faces - -- a repeater placed sideways. - -- If yes, also check if the second repeater doesn't receive - -- a locking signal on the other side. If not, unlock the second repeater. - local r = delayer_get_output_rules(node)[1] - local lpos = vector.add(pos, r) - local lnode = minetest.get_node(lpos) - local ldef = minetest.registered_nodes[lnode.name] - local g = minetest.get_item_group(lnode.name, "redstone_repeater") - -- Are we facing a locked repeater? - if g == 5 then - -- First check the orientation of the faced repeater - local lrs = delayer_get_input_rules(lnode) - for _, lr in pairs(lrs) do - if lr.x == r.x or lr.z == r.z then - -- Invalid orientation. Do nothing - return false - end - end - -- Now we check if there's a powered repeater on the other side of the - -- locked repeater. - -- To get to the other side, we just take another step in the direction which we already face. - local other_side = vector.add(lpos, r) - local other_node = minetest.get_node(other_side) - if minetest.get_item_group(other_node.name, "redstone_repeater") ~= 0 and mesecon.is_receptor_on(other_node.name) then - -- Final check: The other repeater must also face the right way - local other_face = delayer_get_output_rules(other_node)[1] - local other_facing_pos = vector.add(other_side, other_face) - if vector.equals(other_facing_pos, lpos) then - -- Powered repeater found AND it's facing the locked repeater. Do NOT unlock! - return false - end - end - local lmeta = minetest.get_meta(lpos) - local ldelay = lmeta:get_int("delay") - if tonumber(ldelay) == nil or ldelay < 1 or ldelay > 4 then - ldelay = 1 - end - if mesecon.is_powered(lpos, delayer_get_input_rules(lnode)[1]) then - minetest.set_node(lpos, {name="mesecons_delayer:delayer_on_"..ldelay, param2=lnode.param2}) - mesecon.queue:add_action(lpos, "receptor_on", {delayer_get_output_rules(lnode)}, ldef.delayer_time, nil) - else - minetest.set_node(lpos, {name="mesecons_delayer:delayer_off_"..ldelay, param2=lnode.param2}) - mesecon.queue:add_action(lpos, "receptor_off", {delayer_get_output_rules(lnode)}, ldef.delayer_time, nil) - end - return true - end - return false -end - --- Functions that are called after the delay time -local function delayer_activate(pos, node) - local def = minetest.registered_nodes[node.name] - local time = def.delayer_time - minetest.set_node(pos, {name=def.delayer_onstate, param2=node.param2}) - mesecon.queue:add_action(pos, "receptor_on", {delayer_get_output_rules(node)}, time, nil) - check_lock_repeater(pos, node) -end - -local function delayer_deactivate(pos, node) - local def = minetest.registered_nodes[node.name] - local time = def.delayer_time - minetest.set_node(pos, {name=def.delayer_offstate, param2=node.param2}) - mesecon.queue:add_action(pos, "receptor_off", {delayer_get_output_rules(node)}, time, nil) - check_unlock_repeater(pos, node) -end - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.disallow -end - --- Register the 2 (states) x 4 (delay times) delayers - -for i = 1, 4 do - local groups - if i == 1 then - groups = {dig_immediate=3,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,attached_node=1,redstone_repeater=i} - else - groups = {dig_immediate=3,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,attached_node=1,redstone_repeater=i,not_in_creative_inventory=1} - end - - local delaytime = DELAYS[i] - - local boxes - if i == 1 then - boxes = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -1/16, -6/16, 0/16, 1/16, -1/16, 2/16}, -- moved torch - } - elseif i == 2 then - boxes = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -1/16, -6/16, -2/16, 1/16, -1/16, 0/16}, -- moved torch - } - elseif i == 3 then - boxes = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -1/16, -6/16, -4/16, 1/16, -1/16, -2/16}, -- moved torch - } - elseif i == 4 then - boxes = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -1/16, -6/16, -6/16, 1/16, -1/16, -4/16}, -- moved torch - } - end - - local help, tt, longdesc, usagehelp, icon, on_construct - if i == 1 then - help = true - tt = S("Transmits redstone power only in one direction").."\n".. - S("Delays signal").."\n".. - S("Output locks when getting active redstone repeater signal from the side") - longdesc = S("Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.") - usagehelp = S("To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.").."\n".. - S("To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.") - icon = "mesecons_delayer_item.png" - -- Check sides of constructed repeater and lock it, if required - on_construct = function(pos) - local node = minetest.get_node(pos) - local sides = delayer_get_sides(node) - for s=1, #sides do - local spos = vector.add(pos, sides[s]) - local snode = minetest.get_node(spos) - -- Is there a powered repeater at one of our sides? - local g = minetest.get_item_group(snode.name, "redstone_repeater") - if g ~= 0 and mesecon.is_receptor_on(snode.name) then - -- The other repeater must also face towards the constructed node - local sface = delayer_get_output_rules(snode)[1] - local sface_pos = vector.add(spos, sface) - if vector.equals(sface_pos, pos) then - -- Repeater is facing towards us! Now we just need to lock the costructed node - if mesecon.is_powered(pos, delayer_get_input_rules(node)[1]) ~= false then - local newnode = {name="mesecons_delayer:delayer_on_locked", param2 = node.param2} - minetest.set_node(pos, newnode) - mesecon.queue:add_action(pos, "receptor_on", {delayer_get_output_rules(newnode)}, DEFAULT_DELAY, nil) - else - minetest.set_node(pos, {name="mesecons_delayer:delayer_off_locked", param2 = node.param2}) - end - break - end - end - end - end - else - help = false - end - - local desc_off - if i == 1 then - desc_off = S("Redstone Repeater") - else - desc_off = S("Redstone Repeater (Delay @1)", i) - end - - minetest.register_node("mesecons_delayer:delayer_off_"..tostring(i), { - description = desc_off, - inventory_image = icon, - wield_image = icon, - _tt_help = tt, - _doc_items_create_entry = help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - drawtype = "nodebox", - tiles = { - "mesecons_delayer_off.png", - "mcl_stairs_stone_slab_top.png", - "mesecons_delayer_sides_off.png", - "mesecons_delayer_sides_off.png", - "mesecons_delayer_ends_off.png", - "mesecons_delayer_ends_off.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - --wield_image = "mesecons_delayer_off.png", - walkable = true, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - collision_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = boxes - }, - groups = groups, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = false, - is_ground_content = false, - drop = "mesecons_delayer:delayer_off_1", - on_rightclick = function(pos, node, clicker) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - if node.name=="mesecons_delayer:delayer_off_1" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_off_2", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_off_2" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_off_3", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_off_3" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_off_4", param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_off_4" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_off_1", param2=node.param2}) - end - end, - on_construct = on_construct, - delayer_time = delaytime, - delayer_onstate = "mesecons_delayer:delayer_on_"..tostring(i), - delayer_lockstate = "mesecons_delayer:delayer_off_locked", - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - receptor = { - state = mesecon.state.off, - rules = delayer_get_output_rules, - }, - effector = { - rules = delayer_get_input_rules, - action_on = delayer_activate, - }, - }, - on_rotate = on_rotate, - }) - - minetest.register_node("mesecons_delayer:delayer_on_"..tostring(i), { - description = S("Redstone Repeater (Delay @1, Powered)", i), - _doc_items_create_entry = false, - drawtype = "nodebox", - tiles = { - "mesecons_delayer_on.png", - "mcl_stairs_stone_slab_top.png", - "mesecons_delayer_sides_on.png", - "mesecons_delayer_sides_on.png", - "mesecons_delayer_ends_on.png", - "mesecons_delayer_ends_on.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - walkable = true, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - collision_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = boxes - }, - groups = {dig_immediate = 3, dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1, attached_node=1, redstone_repeater=i, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = false, - is_ground_content = false, - drop = "mesecons_delayer:delayer_off_1", - on_rightclick = function(pos, node, clicker) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - --HACK! we already know the node name, so we should generate the function to avoid multiple checks - if node.name=="mesecons_delayer:delayer_on_1" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_on_2",param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_on_2" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_on_3",param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_on_3" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_on_4",param2=node.param2}) - elseif node.name=="mesecons_delayer:delayer_on_4" then - minetest.set_node(pos, {name="mesecons_delayer:delayer_on_1",param2=node.param2}) - end - end, - after_dig_node = function(pos, oldnode) - check_unlock_repeater(pos, oldnode) - end, - delayer_time = delaytime, - delayer_offstate = "mesecons_delayer:delayer_off_"..tostring(i), - delayer_lockstate = "mesecons_delayer:delayer_on_locked", - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - receptor = { - state = mesecon.state.on, - rules = delayer_get_output_rules, - }, - effector = { - rules = delayer_get_input_rules, - action_off = delayer_deactivate, - }, - }, - on_rotate = on_rotate, - }) -end - - --- Locked repeater - -minetest.register_node("mesecons_delayer:delayer_off_locked", { - description = S("Redstone Repeater (Locked)"), - _doc_items_create_entry = false, - drawtype = "nodebox", - -- FIXME: Textures of torch and the lock bar overlap. Nodeboxes are (sadly) not suitable for this. - -- So this needs to be turned into a mesh. - tiles = { - "mesecons_delayer_locked_off.png", - "mcl_stairs_stone_slab_top.png", - "mesecons_delayer_sides_locked_off.png", - "mesecons_delayer_sides_locked_off.png", - "mesecons_delayer_front_locked_off.png", - "mesecons_delayer_end_locked_off.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - wield_image = "mesecons_delayer_locked_off.png", - walkable = true, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - collision_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -6/16, -6/16, -1/16, 6/16, -4/16, 1/16}, -- lock - } - }, - groups = {dig_immediate = 3, dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1, attached_node=1, redstone_repeater=5, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = false, - is_ground_content = false, - drop = "mesecons_delayer:delayer_off_1", - delayer_time = DEFAULT_DELAY, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - receptor = - { - state = mesecon.state.off, - rules = delayer_get_output_rules - }, - effector = - { - rules = delayer_get_input_rules, - } - }, - on_rotate = on_rotate, -}) - -minetest.register_node("mesecons_delayer:delayer_on_locked", { - description = S("Redstone Repeater (Locked, Powered)"), - _doc_items_create_entry = false, - drawtype = "nodebox", - tiles = { - "mesecons_delayer_locked_on.png", - "mcl_stairs_stone_slab_top.png", - "mesecons_delayer_sides_locked_on.png", - "mesecons_delayer_sides_locked_on.png", - "mesecons_delayer_front_locked_on.png", - "mesecons_delayer_end_locked_on.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - walkable = true, - selection_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - collision_box = { - type = "fixed", - fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - }, - node_box = { - type = "fixed", - fixed = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, -- the main slab - { -1/16, -6/16, 6/16, 1/16, -1/16, 4/16}, -- still torch - { -6/16, -6/16, -1/16, 6/16, -4/16, 1/16}, -- lock - } - }, - after_dig_node = function(pos, oldnode) - check_unlock_repeater(pos, oldnode) - end, - groups = {dig_immediate = 3, dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1, attached_node=1, redstone_repeater=5, not_in_creative_inventory = 1}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = false, - is_ground_content = false, - drop = "mesecons_delayer:delayer_off_1", - delayer_time = DEFAULT_DELAY, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = { - receptor = - { - state = mesecon.state.on, - rules = delayer_get_output_rules - }, - effector = - { - rules = delayer_get_input_rules, - } - }, - on_rotate = on_rotate, -}) - -minetest.register_craft({ - output = "mesecons_delayer:delayer_off_1", - recipe = { - {"mesecons_torch:mesecon_torch_on", "mesecons:redstone", "mesecons_torch:mesecon_torch_on"}, - {"mcl_core:stone","mcl_core:stone", "mcl_core:stone"}, - } -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_off_2") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_off_3") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_off_4") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_off_locked") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_on_1") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_on_2") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_on_3") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_on_4") - doc.add_entry_alias("nodes", "mesecons_delayer:delayer_off_1", "nodes", "mesecons_delayer:delayer_on_locked") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.de.tr b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.de.tr deleted file mode 100644 index 45c9595233..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.de.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.=Redstoneverstärker sind vielseitige Komponenten mit den folgenden Verwendungszwecken: 1.: Sie lassen Signale nur in eine Richtung durch. 2.: Sie verzögern das Signal. 3.: Sie können optional ihr Ausgangssignal sperren -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.=Um einen Redstoneverstärker zu versorgen, senden Sie ein Signal in „Pfeilrichtung“ (dem Eingang). Das Signal geht aus der gegenüberliegenden Seite (dem Ausgang) mit einer Verzögerung hinaus. Um die Verzögerung zu ändern, benutzen Sie den Redstoneverstärker. Die Verzögerung ist zwischen 0,1 bis 0,4 Sekunden lang und kann in Schritten von 0,1 Sekunden geändert werden. Das wird mit der Position der verschiebbaren Redstonefackel angezeigt. -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.=Um einen Verstärker zu sperren, senden Sie ein Signal eines benachbarten Verstärkers in eines der Seiten. Im gesperrten Zustand verschwindet die verschiebbare Redstonefackel, die Ausgabe ändert sich nicht mehr und der Eingang wird ignoriert. -Redstone Repeater=Redstoneverstärker -Redstone Repeater (Powered)=Redstoneverstärker (bestromt) -Redstone Repeater (Locked)=Redstoneverstärker (gesperrt) -Redstone Repeater (Locked, Powered)=Redstoneverstärker (gesperrt, bestromt) -Redstone Repeater (Delay @1)=Redstoneverstärker (Verzögerung @1) -Redstone Repeater (Delay @1, Powered)=Redstoneverstärker (Verzögerung @1, bestromt) -Transmits redstone power only in one direction=Überträgt Redstoneenergie in nur eine Richtung -Delays signal=Verzögert Signal -Output locks when getting active redstone repeater signal from the side=Ausgangssignal wird gesperrt, wenn Signal von aktivem Redstoneverstärker an der Seite erhalten diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.es.tr b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.es.tr deleted file mode 100644 index fd502c7390..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.=Los repetidores Redstone son componentes versátiles de redstone con múltiples propósitos: 1. Solo permiten que las señales viajen en una dirección. 2. Retrasan la señal. 3. Opcionalmente, pueden bloquear su salida en un estado. -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.=Para alimentar un repetidor de redstone, envíe una señal en la dirección de "flecha" (la entrada). La señal se apaga en el lado opuesto (la salida) con un retraso. Para cambiar el retraso, use el repetidor de redstone. El retraso es de entre 0.1 y 0.4 segundos y se puede cambiar en pasos de 0.1 segundos. Está indicado por la posición de la antorcha de redstone en movimiento. -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.=Para bloquear un repetidor, envíe una señal desde un repetidor adyacente a uno de sus lados. Mientras está bloqueado, la antorcha de redstone en movimiento desaparece, la salida no cambia y la señal de entrada se ignora. -Redstone Repeater=Repetidor de redstone -Redstone Repeater (Powered)=Repetidor de redstone (Motorizado) -Redstone Repeater (Locked)=Repetidor de redstone (Bloqueado) -Redstone Repeater (Locked, Powered)=Repetidor de redstone (Bloqueado, Motorizado) -Redstone Repeater (Delay @1)=Repetidor de redstone (Retardar @1) -Redstone Repeater (Delay @1, Powered)=Repetidor de redstone (Retardar @1, Motorizado) diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.fr.tr b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.fr.tr deleted file mode 100644 index e2831716ee..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.fr.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.=Les répéteurs Redstone sont des composants Redstone polyvalents à usages multiples: 1. Ils ne permettent aux signaux de voyager que dans une seule direction. 2. Ils retardent le signal. 3. En option, ils peuvent verrouiller leur sortie dans un état. -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.=Pour alimenter un répéteur redstone, envoyez un signal dans le sens de la «flèche» (l'entrée). Le signal s'éteint du côté opposé (la sortie) avec un retard. Pour modifier le délai, utilisez le répéteur redstone. Le délai est compris entre 0,1 et 0,4 seconde et peut être modifié par incréments de 0,1 seconde. Elle est indiquée par la position de la torche en pierre rouge en mouvement. -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.=Pour verrouiller un répéteur, envoyez un signal d'un répéteur adjacent à l'un de ses côtés. Lorsqu'elle est verrouillée, la torche Redstone en mouvement disparaît, la sortie ne change pas et le signal d'entrée est ignoré. -Redstone Repeater=Répéteur Redstone -Redstone Repeater (Powered)=Répéteur Redstone (Alimenté) -Redstone Repeater (Locked)=Répéteur Redstone (Bloqué) -Redstone Repeater (Locked, Powered)=Répéteur Redstone (Bloqué, Alimenté) -Redstone Repeater (Delay @1)=Répéteur Redstone (Délai @1) -Redstone Repeater (Delay @1, Powered)=Répéteur Redstone (Délai @1, Alimenté) -Transmits redstone power only in one direction=Transmet la puissance de redstone seulement dans une direction -Delays signal=Retard du signal -Output locks when getting active redstone repeater signal from the side=La sortie se verrouille lorsque le signal du répéteur Redstone est actif sur le côté diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.pl.tr b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.pl.tr deleted file mode 100644 index ed533e241b..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.pl.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.=Przekaźniki są wszechstronnymi mechanizmami czerwienitowym z kilkoma funkcjami: 1. Pozwalają by sygnał podróżował tylko w jednym kierunku. 2. Opóźniają sygnał. 3. Opcjonalnie mogą zablokować swój output w jednym stanie. -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.=Aby zasilić przekaźnik dostarcz sygnał w kierunku "strzałki" (wejście). Sygnał wyjściowy pojawi się po przeciwnej stronie z opóźnieniem. Aby zmienić opóźnienie kliknij użyj na przekaźniku. Możliwe opóźnienia są pomiędzy 0.1 a 0.4 sekundy i może być zmieniony używając przekaźnik co zmienia go o 0.1 sekundy. Opóźnienie jest oznaczone przez pozycję przesuwającej się pochodni. -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.=Aby zablokować przekaźnik wyślij sygnał z przyległego przekaźnika w jeden z jego boków. Gdy jest zablokowany poruszająca się pochodnia znika, sygnał wyjściowy się nie zmienia, a sygnał wejściowy jest ignorowany. -Redstone Repeater=Przekaźnik czerwienitowy -Redstone Repeater (Powered)=Przekaźnik czerwienitowy (zasilony) -Redstone Repeater (Locked)=Przekaźnik czerwienitowy (zablokowany) -Redstone Repeater (Locked, Powered)=Przekaźnik czerwienitowy (zablokowany, zasilony) -Redstone Repeater (Delay @1)=Przekaźnik czerwienitowy (opóźnienie @1) -Redstone Repeater (Delay @1, Powered)=Przekaźnik czerwienitowy (opóźnienie @1, zasilony) -Transmits redstone power only in one direction=Przesyła energię czerwienitową w jednym kierunku -Delays signal=Opóźnia sygnał -Output locks when getting active redstone repeater signal from the side=Wyjście się blokuje przy otrzymywaniu zasilonego sygnału z przekaźnika z boku diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.ru.tr b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.ru.tr deleted file mode 100644 index f95d3ee8e7..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.ru.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.=Повторители это универсальные компоненты, выполняющие много задач: 1. Разрешают сигналам проходить только в одном направлении. 2. Задерживают сигнал. 3. Опционально они могут зафиксировать свой выходной сигнал в одном состоянии. -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.=Чтобы подключить повторитель, подайте сигнал в направлении “стрелки” (на вход). Сигнал выйдет с противоположной стороны (с выхода) с задержкой. Чтобы изменить задержку, [используйте] повторитель. Время задержки лежит между 0.1 и 0.4 секунды и может изменяться с шагом 0.1 секунды. Его отражает положение передвигающегося факела редстоуна. -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.=Чтобы зафиксировать повторитель, подайте сигнал от соседнего повторителя на одну из его сторон. При фиксации передвижной факел редстоуна исчезает, выходной сигнал не меняется, а входной сигнал игнорируется. -Redstone Repeater=Повторитель -Redstone Repeater (Powered)=Повторитель (подключённый) -Redstone Repeater (Locked)=Повторитель (зафиксированный) -Redstone Repeater (Locked, Powered)=Повторитель (зафиксированный, подключённый) -Redstone Repeater (Delay @1)=Повторитель (задержка @1) -Redstone Repeater (Delay @1, Powered)=Повторитель (задержка @1, подключённый) -Transmits redstone power only in one direction=Передаёт энергию редстоуна только в одном направлении -Delays signal=Задерживает сигнал -Output locks when getting active redstone repeater signal from the side=Выход фиксируется при наличии активного сигнала сбоку diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_delayer/locale/template.txt deleted file mode 100644 index 5801248048..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/locale/template.txt +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mesecons_delayer -Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.= -To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.= -To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.= -Redstone Repeater= -Redstone Repeater (Powered)= -Redstone Repeater (Locked)= -Redstone Repeater (Locked, Powered)= -Redstone Repeater (Delay @1)= -Redstone Repeater (Delay @1, Powered)= -Transmits redstone power only in one direction= -Delays signal= -Output locks when getting active redstone repeater signal from the side= diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/mod.conf b/mods/ITEMS/REDSTONE/mesecons_delayer/mod.conf deleted file mode 100644 index 3f8446239e..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_delayer/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_delayer -depends = mesecons -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_off.png deleted file mode 100644 index bee3eeb072..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_on.png deleted file mode 100644 index 3347f1b620..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_end_locked_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_off.png deleted file mode 100644 index ed6f4a0308..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_on.png deleted file mode 100644 index 8569fcd2fc..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_ends_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_off.png deleted file mode 100644 index e8cff329a1..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_on.png deleted file mode 100644 index 59ca93822e..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_front_locked_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_item.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_item.png deleted file mode 100644 index 1d2797151c..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_item.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_off.png deleted file mode 100644 index 3a5482a9ef..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_on.png deleted file mode 100644 index 7e905a6458..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_locked_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_off.png deleted file mode 100644 index ed33c42242..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_on.png deleted file mode 100644 index 2456cf0227..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_off.png deleted file mode 100644 index 8b857bddc3..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_on.png deleted file mode 100644 index c98e9d1806..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_locked_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_off.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_off.png deleted file mode 100644 index 326dbe63e8..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_on.png b/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_on.png deleted file mode 100644 index bab909eb37..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_delayer/textures/mesecons_delayer_sides_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/init.lua b/mods/ITEMS/REDSTONE/mesecons_lightstone/init.lua deleted file mode 100644 index 0e517e4dc0..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/init.lua +++ /dev/null @@ -1,54 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local light = minetest.LIGHT_MAX - -minetest.register_node("mesecons_lightstone:lightstone_off", { - tiles = {"jeija_lightstone_gray_off.png"}, - groups = {handy=1, mesecon_effector_off = 1, mesecon = 2}, - is_ground_content = false, - description= S("Redstone Lamp"), - _tt_help = S("Glows when powered by redstone power"), - _doc_items_longdesc = S("Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.", light), - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {effector = { - action_on = function(pos, node) - minetest.swap_node(pos, {name="mesecons_lightstone:lightstone_on", param2 = node.param2}) - end, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, -}) - -minetest.register_node("mesecons_lightstone:lightstone_on", { - tiles = {"jeija_lightstone_gray_on.png"}, - groups = {handy=1, not_in_creative_inventory=1, mesecon = 2, opaque = 1}, - drop = "node mesecons_lightstone:lightstone_off", - is_ground_content = false, - paramtype = "light", - light_source = light, - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {effector = { - action_off = function(pos, node) - minetest.swap_node(pos, {name="mesecons_lightstone:lightstone_off", param2 = node.param2}) - end, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, -}) - -minetest.register_craft({ - output = "mesecons_lightstone:lightstone_off", - recipe = { - {"","mesecons:redstone",""}, - {"mesecons:redstone","mcl_nether:glowstone","mesecons:redstone"}, - {"","mesecons:redstone",""}, - } -}) - --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_lightstone:lightstone_off", "nodes", "mesecons_lightstone:lightstone_on") -end - diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.de.tr b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.de.tr deleted file mode 100644 index a0cfc2213a..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.de.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp=Redstonelampe -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.=Redstonelampen sind einfache Redstonekomponenten, die hell aufleuchten (Helligkeitspegel von @1), wenn sie Redstoneenergie erhalten. -Glows when powered by redstone power=Leuchtet, wenn mit Redstoneenergie versorgt diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.es.tr b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.es.tr deleted file mode 100644 index 713f0be5e1..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.es.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp=Lámpara de redstone -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.=Las lámparas Redstone son componentes simples de redstone que brillan intensamente (nivel de luz @ 1) cuando reciben energía de redstone. diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.fr.tr b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.fr.tr deleted file mode 100644 index 16601ace6b..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.fr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp=Lampe Redstone -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.=Les lampes Redstone sont de simples composants Redstone qui brillent (niveau de lumière @1) lorsqu'elles reçoivent une puissance Redstone. -Glows when powered by redstone power=Brille lorsqu'il est alimenté par la puissance Redstone diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.pl.tr b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.pl.tr deleted file mode 100644 index cd2f755c9a..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.pl.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp=Lampa czerwienitowa -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.=Lampy czerwienitowe to mechanizmy czerwienitowe, które jasno świecą (poziom światła @1), gdy są zasilone energią czerwienitową. -Glows when powered by redstone power=Świeci gdy zasilana czerwienitem diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.ru.tr b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.ru.tr deleted file mode 100644 index cd1592a28a..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.ru.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp=Лампа редстоуна -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.=Лампа редстоуна это простой компонент редстоуна, который ярко светится (уровень света @1) при подаче на него энергии редстоуна. -Glows when powered by redstone power=Светит при подаче энергии редстоуна diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/template.txt deleted file mode 100644 index 2d2cc419f2..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/locale/template.txt +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_lightstone -Redstone Lamp= -Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.= -Glows when powered by redstone power= diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/mod.conf b/mods/ITEMS/REDSTONE/mesecons_lightstone/mod.conf deleted file mode 100644 index 95811bd27f..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_lightstone/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_lightstone -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_off.png b/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_off.png deleted file mode 100644 index 7f0c18b70e..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_on.png b/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_on.png deleted file mode 100644 index b2f44e7b08..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_lightstone/textures/jeija_lightstone_gray_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_mvps/init.lua b/mods/ITEMS/REDSTONE/mesecons_mvps/init.lua deleted file mode 100644 index 6e46162994..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_mvps/init.lua +++ /dev/null @@ -1,913 +0,0 @@ -local table = table - ---register stoppers for movestones/pistons - -mesecon.mvps_stoppers = {} -mesecon.mvps_unsticky = {} -mesecon.mvps_droppers = {} -mesecon.on_mvps_move = {} -mesecon.mvps_unmov = {} - ---- Objects (entities) that cannot be moved -function mesecon.register_mvps_unmov(objectname) - mesecon.mvps_unmov[objectname] = true; -end - -function mesecon.is_mvps_unmov(objectname) - return mesecon.mvps_unmov[objectname] -end - -function mesecon.is_mvps_dropper(node, pushdir, stack, stackid) - local get_dropper = mesecon.mvps_droppers[node.name] - if type (get_dropper) == "function" then - get_dropper = get_dropper(node, pushdir, stack, stackid) - end - if not get_dropper then - get_dropper = minetest.get_item_group(node.name, "dig_by_piston") == 1 - end - return get_dropper -end - -function mesecon.register_mvps_dropper(nodename, get_dropper) - if get_dropper == nil then - get_dropper = true - end - mesecon.mvps_droppers[nodename] = get_dropper -end - --- Nodes that cannot be pushed / pulled by movestones, pistons -function mesecon.is_mvps_stopper(node) - -- unknown nodes are always stoppers - return mesecon.mvps_stoppers[node.name] or not minetest.registered_nodes[node.name] -end - -function mesecon.register_mvps_stopper(nodename) - mesecon.mvps_stoppers[nodename] = true -end - --- For nodes which ignore sticky sides. --- They can't be pulled by sticky pistons and don't interact with slime blocks. -function mesecon.register_mvps_unsticky(nodename, get_unsticky) - if get_unsticky == nil then - get_unsticky = true - end - mesecon.mvps_unsticky[nodename] = get_unsticky -end - -function mesecon.is_mvps_unsticky(node, pulldir, stack, stackid) - -- unknown nodes are always unsticky - if not minetest.registered_nodes[node.name] then - return true - end - - local get_unsticky = mesecon.mvps_unsticky[node.name] - if type(get_unsticky) == "function" then - get_unsticky = get_unsticky(node, pulldir, stack, stackid) - end - - return get_unsticky -end - --- Functions to be called on mvps movement --- See also the callback -function mesecon.register_on_mvps_move(callback) - mesecon.on_mvps_move[#mesecon.on_mvps_move+1] = callback -end - -local function on_mvps_move(moved_nodes) - for _, callback in ipairs(mesecon.on_mvps_move) do - callback(moved_nodes) - end -end - -function mesecon.mvps_process_stack(stack) - -- update mesecons for placed nodes ( has to be done after all nodes have been added ) - for _, n in ipairs(stack) do - mesecon.on_placenode(n.pos, minetest.get_node(n.pos)) - end -end - --- tests if the node can be pushed into, e.g. air, water, grass -local function node_replaceable(name) - if name == "ignore" then return true end - - if minetest.registered_nodes[name] then - return minetest.registered_nodes[name].buildable_to or false - end - - return false -end - -local function is_available(pos) - local n = minetest.get_node(pos) - if not n then - return false, n - end - local name = n.name - if name == "ignore" then - minetest.get_voxel_manip():read_from_map(pos, pos) - n = minetest.get_node(pos) - if not n then - return false, n - end - name = n.name - end - if name == "ignore" then - return false, n - end - if minetest.registered_nodes[name] then - return minetest.registered_nodes[name].buildable_to, n or false, n - end - return false, n -end - - -function mesecon.mvps_get_stack(pos, dir, maximum, piston_pos) - -- determine the number of nodes to be pushed - local nodes = {} - local frontiers = {pos} - - while #frontiers > 0 do - local np = frontiers[1] - local nn = minetest.get_node(np) - if nn.name == "ignore" then - minetest.get_voxel_manip():read_from_map(np, np) - nn = minetest.get_node(np) - end - - if mesecon.is_mvps_stopper(nn) then - 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}}) - - -- 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 - 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)) then - table.insert(frontiers, cp) - end - end - end - table.remove(frontiers, 1) - end - - return nodes, false -end - -function mesecon.mvps_set_owner(pos, placer) - local meta = minetest.get_meta(pos) - local owner = placer and placer.get_player_name and placer:get_player_name() - if owner and owner ~= "" then - meta:set_string("owner", owner) - else - meta:set_string("owner", "$unknown") -- to distinguish from older pistons - end -end - -local function are_protected(nodes, player_name) - for _, node in pairs(nodes) do - if minetest.is_protected(node.pos, player_name) then - return true - end - end - return false -end - -function mesecon.mvps_push(pos, dir, maximum, player_name, piston_pos) - return mesecon.mvps_push_or_pull(pos, dir, dir, maximum, player_name, piston_pos) -end - -function mesecon.mvps_pull_single(pos, dir, maximum, player_name, piston_pos) - local nodes = mesecon.mvps_get_stack(pos, dir, maximum, player_name, piston_pos) - - if not nodes then return end - -- ensure sticky pistons; even without slimeblocks attached adhere to the unpullable rule. - for id, n in ipairs(nodes) do - if not mesecon.is_mvps_unsticky(n.node, dir, nodes, id) then - return mesecon.mvps_push_or_pull(pos, vector.multiply(dir, -1), dir, maximum, player_name, piston_pos) - end - end -end - --- pos: pos of mvps; stackdir: direction of building the stack --- 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) - - if has_loop then - return false - end - - if not nodes then return end - - local newpos={} - -- check node availability to push/pull into, and fill newpos[i] - for i in ipairs(nodes) do - newpos[i] = vector.add(nodes[i].pos, movedir) - 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 not is_available(newpos[i]) then - local available = false - for j in ipairs(nodes) do - if i ~= j then - if (newpos[i].x == nodes[j].pos.x) and (newpos[i].y == nodes[j].pos.y) and (newpos[i].z == nodes[j].pos.z) then - available = true - break - end - end - end - if not available then - return - end - end - end - - if are_protected(nodes, player_name) then - return - end - - local first_dropper = nil - -- remove all nodes - for id, n in ipairs(nodes) do - n.meta = minetest.get_meta(n.pos):to_table() - local is_dropper = mesecon.is_mvps_dropper(n.node, movedir, nodes, id) - if is_dropper then - --local drops = minetest.get_node_drops(n.node.name, "") - minetest.dig_node(n.pos) - else - minetest.remove_node(n.pos) - local node_timer = minetest.get_node_timer(n.pos) - if node_timer:is_started() then - n.node_timer = {node_timer:get_timeout(), node_timer:get_elapsed()} - end - end - if is_dropper then - first_dropper = id - break - end - end - - -- update mesecons for removed nodes ( has to be done after all nodes have been removed ) - for id, n in ipairs(nodes) do - if first_dropper and id >= first_dropper then - break - end - mesecon.on_dignode(n.pos, n.node) - end - - -- add nodes - for id, n in ipairs(nodes) do - if first_dropper and id >= first_dropper then - break - end - local np = newpos[id] - minetest.add_node(np, n.node) - minetest.get_meta(np):from_table(n.meta) - if n.node_timer then - minetest.get_node_timer(np):set(unpack(n.node_timer)) - end - if string.find(n.node.name, "mcl_observers:observer") then - -- It also counts as a block update when the observer itself is moved by a piston (Wiki): - mcl_observers.observer_activate(np) - end - end - - local moved_nodes = {} - local oldstack = mesecon.tablecopy(nodes) - for i in ipairs(nodes) do - if first_dropper and i >= first_dropper then - break - end - moved_nodes[i] = {} - moved_nodes[i].oldpos = nodes[i].pos - nodes[i].pos = newpos[i] - moved_nodes[i].pos = nodes[i].pos - moved_nodes[i].node = nodes[i].node - moved_nodes[i].meta = nodes[i].meta - moved_nodes[i].node_timer = nodes[i].node_timer - end - - on_mvps_move(moved_nodes) - - return true, nodes, oldstack -end - -function mesecon.mvps_move_objects(pos, dir, nodestack) - local objects_to_move = {} - - -- Move object at tip of stack, pushpos is position at tip of stack - local pushpos = vector.add(pos, vector.multiply(dir, #nodestack)) - - local objects = minetest.get_objects_inside_radius(pushpos, 1) - for _, obj in ipairs(objects) do - table.insert(objects_to_move, obj) - end - - -- Move objects lying/standing on the stack (before it was pushed - oldstack) - if tonumber(minetest.settings:get("movement_gravity")) > 0 and dir.y == 0 then - -- If gravity positive and dir horizontal, push players standing on the stack - for _, n in ipairs(nodestack) do - local p_above = vector.add(n.pos, {x=0, y=1, z=0}) - local objects = minetest.get_objects_inside_radius(p_above, 1) - for _, obj in ipairs(objects) do - table.insert(objects_to_move, obj) - end - end - end - - for _, obj in ipairs(objects_to_move) do - local entity = obj:get_luaentity() - if not entity or not mesecon.is_mvps_unmov(entity.name) then - local np = vector.add(obj:get_pos(), dir) - - --move only if destination is not solid - local nn = minetest.get_node(np) - if not ((not minetest.registered_nodes[nn.name]) - or minetest.registered_nodes[nn.name].walkable) then - obj:set_pos(np) - end - end - end -end - --- Unmovable by design: nodes -mesecon.register_mvps_stopper("mcl_core:barrier") -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_chests:ender_chest") -mesecon.register_mvps_stopper("mcl_chests:ender_chest_small") -mesecon.register_mvps_stopper("mcl_mobspawners:spawner") -mesecon.register_mvps_stopper("mesecons_commandblock:commandblock_off") -mesecon.register_mvps_stopper("mesecons_commandblock:commandblock_on") -mesecon.register_mvps_stopper("mcl_portals:portal") -mesecon.register_mvps_stopper("mcl_portals:portal_end") -mesecon.register_mvps_stopper("mcl_portals:end_portal_frame") -mesecon.register_mvps_stopper("mcl_portals:end_portal_frame_eye") -mesecon.register_mvps_stopper("mcl_enchanting:table") -mesecon.register_mvps_stopper("mcl_jukebox:jukebox") -mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_on") -mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_off") -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") - --- Unmovable by technical restrictions. --- Open formspec would screw up if node is destroyed (minor problem) --- Would screw up on/off state of trapped chest (big problem) -mesecon.register_mvps_stopper("mcl_furnaces:furnace") -mesecon.register_mvps_stopper("mcl_furnaces:furnace_active") -mesecon.register_mvps_stopper("mcl_hoppers:hopper") -mesecon.register_mvps_stopper("mcl_hoppers:hopper_side") -mesecon.register_mvps_stopper("mcl_droppers:dropper") -mesecon.register_mvps_stopper("mcl_droppers:dropper_up") -mesecon.register_mvps_stopper("mcl_droppers:dropper_down") -mesecon.register_mvps_stopper("mcl_dispensers:dispenser") -mesecon.register_mvps_stopper("mcl_dispensers:dispenser_up") -mesecon.register_mvps_stopper("mcl_dispensers:dispenser_down") -mesecon.register_mvps_stopper("mcl_anvils:anvil") -mesecon.register_mvps_stopper("mcl_anvils:anvil_damage_1") -mesecon.register_mvps_stopper("mcl_anvils:anvil_damage_2") -mesecon.register_mvps_stopper("mcl_chests:chest") -mesecon.register_mvps_stopper("mcl_chests:chest_small") -mesecon.register_mvps_stopper("mcl_chests:chest_left") -mesecon.register_mvps_stopper("mcl_chests:chest_right") -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") - - --- Unmovable by design: objects -mesecon.register_mvps_unmov("mcl_enchanting:book") -mesecon.register_mvps_unmov("mcl_chests:chest") -mesecon.register_mvps_unmov("mcl_banners:hanging_banner") -mesecon.register_mvps_unmov("mcl_banners:standing_banner") -mesecon.register_mvps_unmov("mcl_signs:text") -mesecon.register_mvps_unmov("mcl_mobspawners:doll") -mesecon.register_mvps_unmov("mcl_armor_stand:armor_entity") -mesecon.register_mvps_unmov("mcl_itemframes:item") -mesecon.register_mvps_unmov("mcl_itemframes:map") -mesecon.register_mvps_unmov("mcl_paintings:painting") -mesecon.register_mvps_unmov("mcl_end:crystal") - - --- Unpullable by design: nodes --- Glazed Terracotta -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_red") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_orange") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_yellow") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_green") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_lime") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_purple") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_magenta") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_blue") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_cyan") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_white") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_grey") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_silver") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_black") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_brown") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_light_blue") -mesecon.register_mvps_unsticky("mcl_colorblocks:glazed_terracotta_pink") --- Beds -mesecon.register_mvps_unsticky("mcl_beds:bed_black_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_black_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_blue_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_blue_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_brown_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_brown_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_cyan_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_cyan_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_green_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_green_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_grey_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_grey_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_light_blue_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_light_blue_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_lime_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_lime_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_magenta_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_magenta_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_orange_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_orange_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_pink_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_pink_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_purple_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_purple_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_red_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_red_bottom") -mesecon.register_mvps_unsticky("mcl_beds:bed_silver_top") -mesecon.register_mvps_unsticky("mcl_beds:bed_silver_bottom") -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") -mesecon.register_mvps_unsticky("mcl_core:vine") --- Cake -mesecon.register_mvps_unsticky("mcl_cake:cake_1") -mesecon.register_mvps_unsticky("mcl_cake:cake_2") -mesecon.register_mvps_unsticky("mcl_cake:cake_3") -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") -mesecon.register_mvps_unsticky("mcl_farming:pumpkin") -mesecon.register_mvps_unsticky("mcl_farming:melon") --- Chorus Plant & Flower -mesecon.register_mvps_unsticky("mcl_end:chorus_plant") -mesecon.register_mvps_unsticky("mcl_end:chorus_flower") --- Cobweb -mesecon.register_mvps_unsticky("mcl_core:cobweb") --- Cocoa -mesecon.register_mvps_unsticky("mcl_cocoas:cocoa_1") -mesecon.register_mvps_unsticky("mcl_cocoas:cocoa_2") -mesecon.register_mvps_unsticky("mcl_cocoas:cocoa_3") --- Doors -mesecon.register_mvps_unsticky("mcl_doors:wooden_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:wooden_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:wooden_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:wooden_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:iron_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:iron_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:iron_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:iron_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:acacia_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:acacia_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:acacia_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:acacia_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:birch_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:birch_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:birch_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:birch_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:dark_oak_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:dark_oak_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:dark_oak_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:dark_oak_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:spruce_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:spruce_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:spruce_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:spruce_door_b_2") -mesecon.register_mvps_unsticky("mcl_doors:jungle_door_t_1") -mesecon.register_mvps_unsticky("mcl_doors:jungle_door_b_1") -mesecon.register_mvps_unsticky("mcl_doors:jungle_door_t_2") -mesecon.register_mvps_unsticky("mcl_doors:jungle_door_b_2") --- Dragon Egg -mesecon.register_mvps_unsticky("mcl_end:dragon_egg") --- Fire -mesecon.register_mvps_unsticky("mcl_fire:fire") -mesecon.register_mvps_unsticky("mcl_fire:eternal_fire") --- Flower Pots -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_allium") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_azure_bluet") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_blue_orchid") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_dandelion") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_fern") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_oxeye_daisy") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_poppy") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_tulip_orange") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_tulip_pink") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_tulip_red") -mesecon.register_mvps_unsticky("mcl_flowerpots:flower_pot_tulip_white") --- Flowers, Lilypad & Dead Bush -mesecon.register_mvps_unsticky("mcl_core:deadbush") -mesecon.register_mvps_unsticky("mcl_flowers:allium") -mesecon.register_mvps_unsticky("mcl_flowers:azure_bluet") -mesecon.register_mvps_unsticky("mcl_flowers:blue_orchid") -mesecon.register_mvps_unsticky("mcl_flowers:dandelion") -mesecon.register_mvps_unsticky("mcl_flowers:double_fern") -mesecon.register_mvps_unsticky("mcl_flowers:double_fern_top") -mesecon.register_mvps_unsticky("mcl_flowers:fern") -mesecon.register_mvps_unsticky("mcl_flowers:lilac") -mesecon.register_mvps_unsticky("mcl_flowers:lilac_top") -mesecon.register_mvps_unsticky("mcl_flowers:oxeye_daisy") -mesecon.register_mvps_unsticky("mcl_flowers:peony") -mesecon.register_mvps_unsticky("mcl_flowers:peony_top") -mesecon.register_mvps_unsticky("mcl_flowers:poppy") -mesecon.register_mvps_unsticky("mcl_flowers:rose_bush") -mesecon.register_mvps_unsticky("mcl_flowers:rose_bush_top") -mesecon.register_mvps_unsticky("mcl_flowers:sunflower") -mesecon.register_mvps_unsticky("mcl_flowers:sunflower_top") -mesecon.register_mvps_unsticky("mcl_flowers:tallgrass") -mesecon.register_mvps_unsticky("mcl_flowers:double_grass") -mesecon.register_mvps_unsticky("mcl_flowers:double_grass_top") -mesecon.register_mvps_unsticky("mcl_flowers:tulip_orange") -mesecon.register_mvps_unsticky("mcl_flowers:tulip_pink") -mesecon.register_mvps_unsticky("mcl_flowers:tulip_red") -mesecon.register_mvps_unsticky("mcl_flowers:tulip_white") -mesecon.register_mvps_unsticky("mcl_flowers:waterlily") --- Heads -mesecon.register_mvps_unsticky("mcl_heads:creeper") -mesecon.register_mvps_unsticky("mcl_heads:skeleton") -mesecon.register_mvps_unsticky("mcl_heads:steve") -mesecon.register_mvps_unsticky("mcl_heads:wither_skeleton") -mesecon.register_mvps_unsticky("mcl_heads:zombie") --- Item Frame -mesecon.register_mvps_unsticky("mcl_itemframes:item_frame") --- Ladder -mesecon.register_mvps_unsticky("mcl_core:ladder") --- Lava & Water -mesecon.register_mvps_unsticky("mcl_core:lava_source") -mesecon.register_mvps_unsticky("mcl_core:lava_flowing") -mesecon.register_mvps_unsticky("mcl_core:water_source") -mesecon.register_mvps_unsticky("mcl_core:water_flowing") -mesecon.register_mvps_unsticky("mclx_core:river_water_source") -mesecon.register_mvps_unsticky("mclx_core:river_water_flowing") --- Leaves -mesecon.register_mvps_unsticky("mcl_core:leaves") -mesecon.register_mvps_unsticky("mcl_core:acacialeaves") -mesecon.register_mvps_unsticky("mcl_core:birchleaves") -mesecon.register_mvps_unsticky("mcl_core:darkleaves") -mesecon.register_mvps_unsticky("mcl_core:spruceleaves") -mesecon.register_mvps_unsticky("mcl_core:jungleleaves") --- Lever -mesecon.register_mvps_unsticky("mesecons_walllever:wall_lever_off") -mesecon.register_mvps_unsticky("mesecons_walllever:wall_lever_on") --- Mushrooms, Nether Wart & Amethyst -mesecon.register_mvps_unsticky("mcl_mushroom:mushroom_brown") -mesecon.register_mvps_unsticky("mcl_mushroom:mushroom_red") -mesecon.register_mvps_unsticky("mcl_nether:nether_wart_0") -mesecon.register_mvps_unsticky("mcl_nether:nether_wart_1") -mesecon.register_mvps_unsticky("mcl_nether:nether_wart_2") -mesecon.register_mvps_unsticky("mcl_nether:nether_wart") -mesecon.register_mvps_unsticky("mcl_amethyst:amethyst_cluster") -mesecon.register_mvps_unsticky("mcl_amethyst:budding_amethyst_block") --- Pressure Plates -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_wood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_wood_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_stone_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_stone_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_acaciawood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_acaciawoood_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_birchwood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_birchwood_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_darkwood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_darkwood_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_sprucekwood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_sprucewood_off") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_junglewood_on") -mesecon.register_mvps_unsticky("mesecons_pressureplates:pressure_plate_junglewood_off") --- Redstone Comparators -mesecon.register_mvps_unsticky("mcl_comparators:comparator_on_sub") -mesecon.register_mvps_unsticky("mcl_comparators:comparator_off_sub") -mesecon.register_mvps_unsticky("mcl_comparators:comparator_on_comp") -mesecon.register_mvps_unsticky("mcl_comparators:comparator_off_comp") --- Redstone Dust -mesecon.register_mvps_unsticky("mesecons:wire_00000000_on") -mesecon.register_mvps_unsticky("mesecons:wire_00000000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10000000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10000000_off") -mesecon.register_mvps_unsticky("mesecons:wire_01000000_on") -mesecon.register_mvps_unsticky("mesecons:wire_01000000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11000000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11000000_off") -mesecon.register_mvps_unsticky("mesecons:wire_00100000_on") -mesecon.register_mvps_unsticky("mesecons:wire_00100000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10100000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10100000_off") -mesecon.register_mvps_unsticky("mesecons:wire_01100000_on") -mesecon.register_mvps_unsticky("mesecons:wire_01100000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11100000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11100000_off") -mesecon.register_mvps_unsticky("mesecons:wire_00010000_on") -mesecon.register_mvps_unsticky("mesecons:wire_00010000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10010000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10010000_off") -mesecon.register_mvps_unsticky("mesecons:wire_01010000_on") -mesecon.register_mvps_unsticky("mesecons:wire_01010000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11010000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11010000_off") -mesecon.register_mvps_unsticky("mesecons:wire_00110000_on") -mesecon.register_mvps_unsticky("mesecons:wire_00110000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10110000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10110000_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110000_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10001000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10001000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11001000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11001000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10101000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10101000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11101000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11101000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10011000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10011000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11011000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11011000_off") -mesecon.register_mvps_unsticky("mesecons:wire_10111000_on") -mesecon.register_mvps_unsticky("mesecons:wire_10111000_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111000_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111000_off") -mesecon.register_mvps_unsticky("mesecons:wire_01000100_on") -mesecon.register_mvps_unsticky("mesecons:wire_01000100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11000100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11000100_off") -mesecon.register_mvps_unsticky("mesecons:wire_01100100_on") -mesecon.register_mvps_unsticky("mesecons:wire_01100100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11100100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11100100_off") -mesecon.register_mvps_unsticky("mesecons:wire_01010100_on") -mesecon.register_mvps_unsticky("mesecons:wire_01010100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11010100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11010100_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110100_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11001100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11001100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11101100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11101100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11011100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11011100_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111100_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111100_off") -mesecon.register_mvps_unsticky("mesecons:wire_00100010_on") -mesecon.register_mvps_unsticky("mesecons:wire_00100010_off") -mesecon.register_mvps_unsticky("mesecons:wire_10100010_on") -mesecon.register_mvps_unsticky("mesecons:wire_10100010_off") -mesecon.register_mvps_unsticky("mesecons:wire_01100010_on") -mesecon.register_mvps_unsticky("mesecons:wire_01100010_off") -mesecon.register_mvps_unsticky("mesecons:wire_11100010_on") -mesecon.register_mvps_unsticky("mesecons:wire_11100010_off") -mesecon.register_mvps_unsticky("mesecons:wire_00110010_on") -mesecon.register_mvps_unsticky("mesecons:wire_00110010_off") -mesecon.register_mvps_unsticky("mesecons:wire_10110010_on") -mesecon.register_mvps_unsticky("mesecons:wire_10110010_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110010_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110010_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110010_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110010_off") -mesecon.register_mvps_unsticky("mesecons:wire_10101010_on") -mesecon.register_mvps_unsticky("mesecons:wire_10101010_off") -mesecon.register_mvps_unsticky("mesecons:wire_11101010_on") -mesecon.register_mvps_unsticky("mesecons:wire_11101010_off") -mesecon.register_mvps_unsticky("mesecons:wire_10111010_on") -mesecon.register_mvps_unsticky("mesecons:wire_10111010_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111010_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111010_off") -mesecon.register_mvps_unsticky("mesecons:wire_01100110_on") -mesecon.register_mvps_unsticky("mesecons:wire_01100110_off") -mesecon.register_mvps_unsticky("mesecons:wire_11100110_on") -mesecon.register_mvps_unsticky("mesecons:wire_11100110_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110110_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110110_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110110_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110110_off") -mesecon.register_mvps_unsticky("mesecons:wire_11101110_on") -mesecon.register_mvps_unsticky("mesecons:wire_11101110_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111110_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111110_off") -mesecon.register_mvps_unsticky("mesecons:wire_00010001_on") -mesecon.register_mvps_unsticky("mesecons:wire_00010001_off") -mesecon.register_mvps_unsticky("mesecons:wire_10010001_on") -mesecon.register_mvps_unsticky("mesecons:wire_10010001_off") -mesecon.register_mvps_unsticky("mesecons:wire_01010001_on") -mesecon.register_mvps_unsticky("mesecons:wire_01010001_off") -mesecon.register_mvps_unsticky("mesecons:wire_11010001_on") -mesecon.register_mvps_unsticky("mesecons:wire_11010001_off") -mesecon.register_mvps_unsticky("mesecons:wire_00110001_on") -mesecon.register_mvps_unsticky("mesecons:wire_00110001_off") -mesecon.register_mvps_unsticky("mesecons:wire_10110001_on") -mesecon.register_mvps_unsticky("mesecons:wire_10110001_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110001_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110001_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110001_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110001_off") -mesecon.register_mvps_unsticky("mesecons:wire_10011001_on") -mesecon.register_mvps_unsticky("mesecons:wire_10011001_off") -mesecon.register_mvps_unsticky("mesecons:wire_11011001_on") -mesecon.register_mvps_unsticky("mesecons:wire_11011001_off") -mesecon.register_mvps_unsticky("mesecons:wire_10111001_on") -mesecon.register_mvps_unsticky("mesecons:wire_10111001_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111001_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111001_off") -mesecon.register_mvps_unsticky("mesecons:wire_01010101_on") -mesecon.register_mvps_unsticky("mesecons:wire_01010101_off") -mesecon.register_mvps_unsticky("mesecons:wire_11010101_on") -mesecon.register_mvps_unsticky("mesecons:wire_11010101_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110101_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110101_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110101_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110101_off") -mesecon.register_mvps_unsticky("mesecons:wire_11011101_on") -mesecon.register_mvps_unsticky("mesecons:wire_11011101_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111101_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111101_off") -mesecon.register_mvps_unsticky("mesecons:wire_00110011_on") -mesecon.register_mvps_unsticky("mesecons:wire_00110011_off") -mesecon.register_mvps_unsticky("mesecons:wire_10110011_on") -mesecon.register_mvps_unsticky("mesecons:wire_10110011_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110011_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110011_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110011_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110011_off") -mesecon.register_mvps_unsticky("mesecons:wire_10111011_on") -mesecon.register_mvps_unsticky("mesecons:wire_10111011_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111011_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111011_off") -mesecon.register_mvps_unsticky("mesecons:wire_01110111_on") -mesecon.register_mvps_unsticky("mesecons:wire_01110111_off") -mesecon.register_mvps_unsticky("mesecons:wire_11110111_on") -mesecon.register_mvps_unsticky("mesecons:wire_11110111_off") -mesecon.register_mvps_unsticky("mesecons:wire_11111111_on") -mesecon.register_mvps_unsticky("mesecons:wire_11111111_off") --- Redstone Repeater -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_off_1") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_off_2") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_off_3") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_off_4") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_on_1") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_on_2") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_on_3") -mesecon.register_mvps_unsticky("mesecons_delayer:delayer_on_4") --- Redstone Torch -mesecon.register_mvps_unsticky("mesecons_torch:mesecon_torch_on") -mesecon.register_mvps_unsticky("mesecons_torch:mesecon_torch_off") -mesecon.register_mvps_unsticky("mesecons_torch:mesecon_torch_on_wall") -mesecon.register_mvps_unsticky("mesecons_torch:mesecon_torch_off_wall") --- Sea Pickle -mesecon.register_mvps_unsticky("mcl_ocean:sea_pickle_1_dead_brain_coral_block") -mesecon.register_mvps_unsticky("mcl_ocean:sea_pickle_2_dead_brain_coral_block") -mesecon.register_mvps_unsticky("mcl_ocean:sea_pickle_3_dead_brain_coral_block") -mesecon.register_mvps_unsticky("mcl_ocean:sea_pickle_4_dead_brain_coral_block") --- Shulker chests -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: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:red_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:silver_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:white_shulker_box_small") -mesecon.register_mvps_unsticky("mcl_chests:yellow_shulker_box_small") --- Snow -mesecon.register_mvps_unsticky("mcl_core:snow") -mesecon.register_mvps_unsticky("mcl_core:snow_2") -mesecon.register_mvps_unsticky("mcl_core:snow_3") -mesecon.register_mvps_unsticky("mcl_core:snow_4") -mesecon.register_mvps_unsticky("mcl_core:snow_5") -mesecon.register_mvps_unsticky("mcl_core:snow_6") -mesecon.register_mvps_unsticky("mcl_core:snow_7") -mesecon.register_mvps_unsticky("mcl_core:snow_8") --- Torch -mesecon.register_mvps_unsticky("mcl_torches:torch") -mesecon.register_mvps_unsticky("mcl_torches:torch_wall") --- Wheat -mesecon.register_mvps_unsticky("mcl_farming:wheat") -mesecon.register_mvps_unsticky("mcl_farming:wheat_2") -mesecon.register_mvps_unsticky("mcl_farming:wheat_3") -mesecon.register_mvps_unsticky("mcl_farming:wheat_4") -mesecon.register_mvps_unsticky("mcl_farming:wheat_5") -mesecon.register_mvps_unsticky("mcl_farming:wheat_6") -mesecon.register_mvps_unsticky("mcl_farming:wheat_7") - --- Includes node heat when moving them -mesecon.register_on_mvps_move(mesecon.move_hot_nodes) - -mesecon.register_on_mvps_move(function(moved_nodes) - for i = 1, #moved_nodes do - local moved_node = moved_nodes[i] - -- Check for falling after moving node - mesecon.on_placenode(moved_node.pos, moved_node.node) - minetest.after(0, function() - minetest.check_for_falling(moved_node.oldpos) - minetest.check_for_falling(moved_node.pos) - end) - - -- Callback for on_mvps_move stored in nodedef - local node_def = minetest.registered_nodes[moved_node.node.name] - if node_def and node_def.mesecon and node_def.mesecon.on_mvps_move then - node_def.mesecon.on_mvps_move(moved_node.pos, moved_node.node, - moved_node.oldpos, moved_node.meta) - end - end -end) diff --git a/mods/ITEMS/REDSTONE/mesecons_mvps/mod.conf b/mods/ITEMS/REDSTONE/mesecons_mvps/mod.conf deleted file mode 100644 index 3e347879f2..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_mvps/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mesecons_mvps -depends = mesecons diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/README.txt b/mods/ITEMS/REDSTONE/mesecons_noteblock/README.txt deleted file mode 100644 index dd6822a365..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/README.txt +++ /dev/null @@ -1,57 +0,0 @@ -Credits of sound files: - -Note: Most sounds have not been used verbatim, but tweaked a little to be more suitable for the noteblock mod. - -### Sounds licensed CC0: - - * by freesound.org user AmateurJ - * Source: https://freesound.org/people/AmateurJ/sounds/399523/ -* mesecons_noteblock_bass_drum.ogg - * by freesound.org user Mattc90 - * Source: https://freesound.org/people/Mattc90/sounds/264285/ -* mesecons_noteblock_bell.ogg - * by opengameart.org user Brandon75689 - * Source: https://opengameart.org/content/point-bell -* mesecons_noteblock_chime.ogg - * by freesound.org user - * Source: https://freesound.org/people/ikonochris/sounds/213380/ -* mesecons_noteblock_cowbell.ogg - * by freesound.org user timgormly - * Source: https://freesound.org/people/timgormly/sounds/159760/ -* mesecons_noteblock_flute.ogg - * by freesound.org user menegass - * Source: https://freesound.org/people/menegass/sounds/107307/ -* mesecons_noteblock_bass_guitar.ogg - * by freesound.org user Vres - * Source: https://freesound.org/people/Vres/sounds/133024/ -* mesecons_noteblock_hit.ogg - * by freesound.org user rubberduck - * Source: https://opengameart.org/content/100-cc0-sfx -* mesecons_noteblock_piano_digital.ogg - * by freesound.org user monotraum - * Source: https://freesound.org/people/monotraum/sounds/208889/ -* mesecons_noteblock_squarewave.ogg - * by Wuzzy -* mesecons_noteblock_xylophone_metal.ogg - * by freesound.org user JappeHallunken - * Source: https://freesound.org/people/JappeHallunken/sounds/501300/ -* mesecons_noteblock_xylophone_wood.ogg - * by freesound.org user connersaw8 - * Source: https://freesound.org/people/connersaw8/sounds/125271/ - -### Sounds licensed CC BY 3.0: - -* mesecons_noteblock_bass_guitar.ogg - * by freesound.org user Kyster - * Source: https://freesound.org/people/Kyster/sounds/117707/ -* mesecons_noteblock_didgeridoo.ogg - * by freesound.org user InspectorJ - * Source: https://freesound.org/people/InspectorJ/sounds/398272/ - -Everything else: -Created by Mesecons authors, licensed CC BY 3.0. - --------------------- -License links: -* CC0: http://creativecommons.org/publicdomain/zero/1.0/ -* CC BY 3.0: http://creativecommons.org/licenses/by/3.0/ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/init.lua b/mods/ITEMS/REDSTONE/mesecons_noteblock/init.lua deleted file mode 100644 index ac56d8bc5e..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/init.lua +++ /dev/null @@ -1,199 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math - -minetest.register_node("mesecons_noteblock:noteblock", { - description = S("Note Block"), - _tt_help = S("Plays a musical note when powered by redstone power"), - _doc_items_longdesc = S("A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power."), - _doc_items_usagehelp = S("Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:").."\n\n".. - -S("• Glass: Sticks").."\n".. -S("• Wood: Bass guitar").."\n".. -S("• Stone: Bass drum").."\n".. -S("• Sand or gravel: Snare drum").."\n".. -S("• Block of Gold: Bell").."\n".. -S("• Clay: Flute").."\n".. -S("• Packed Ice: Chime").."\n".. -S("• Wool: Guitar").."\n".. -S("• Bone Block: Xylophne").."\n".. -S("• Block of Iron: Iron xylophne").."\n".. -S("• Soul Sand: Cow bell").."\n".. -S("• Pumpkin: Didgeridoo").."\n".. -S("• Block of Emerald: Square wave").."\n".. -S("• Hay Bale: Banjo").."\n".. -S("• Glowstone: Electric piano").."\n".. -S("• Anything else: Piano").."\n\n".. - -S("The note block will only play a note when it is below air, otherwise, it stays silent."), - tiles = {"mesecons_noteblock.png"}, - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - is_ground_content = false, - place_param2 = 0, - on_rightclick = function(pos, node, clicker) -- change sound when rightclicked - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - node.param2 = (node.param2+1)%25 - mesecon.noteblock_play(pos, node.param2) - minetest.set_node(pos, node) - end, - on_punch = function(pos, node) -- play current sound when punched - mesecon.noteblock_play(pos, node.param2) - end, - sounds = mcl_sounds.node_sound_wood_defaults(), - mesecons = {effector = { -- play sound when activated - action_on = function(pos, node) - mesecon.noteblock_play(pos, node.param2) - end, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_craft({ - output = "mesecons_noteblock:noteblock", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "mesecons:redstone", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mesecons_noteblock:noteblock", - burntime = 15 -}) - -local soundnames_piano = { - [0] = "mesecons_noteblock_c", - "mesecons_noteblock_csharp", - "mesecons_noteblock_d", - "mesecons_noteblock_dsharp", - "mesecons_noteblock_e", - "mesecons_noteblock_f", - "mesecons_noteblock_fsharp", - "mesecons_noteblock_g", - "mesecons_noteblock_gsharp", - "mesecons_noteblock_a", - "mesecons_noteblock_asharp", - "mesecons_noteblock_b", - - "mesecons_noteblock_c2", - "mesecons_noteblock_csharp2", - "mesecons_noteblock_d2", - "mesecons_noteblock_dsharp2", - "mesecons_noteblock_e2", - "mesecons_noteblock_f2", - "mesecons_noteblock_fsharp2", - "mesecons_noteblock_g2", - "mesecons_noteblock_gsharp2", - "mesecons_noteblock_a2", - "mesecons_noteblock_asharp2", - "mesecons_noteblock_b2", - - -- TODO: Add dedicated sound file? - "mesecons_noteblock_b2", -} - -local function param2_to_note_color(param2) - local r, g, b - if param2 < 8 then -- 0..7 - -- More red, less green - r = param2 / 8 * 255 - g = (8-param2) / 8 * 255 - b = 0 - elseif param2 < 16 then -- 0..15 - -- More blue, less red - r = (8-(param2 - 8)) / 8 * 255 - g = 0 - b = (param2 - 8) / 8 * 255 - else -- 16..24 - -- More green, less blue - r = 0 - g = (param2 - 16) / 9 * 255 - b = (9-(param2 - 16)) / 9 * 255 - end - r = math.floor(r) - g = math.floor(g) - b = math.floor(b) - local color = 0x10000 * r + 0x100 * g + b - -- Convert to ColorString - return string.format("#%06X", color) -end - -local function param2_to_pitch(param2) - return 2^((param2-12)/12) -end - -function mesecon.noteblock_play(pos, param2) - local block_above_name = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name - if block_above_name ~= "air" then - -- Don't play sound if no air is above - return - end - - local block_below_name = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name - local pitched = false - local soundname, pitch - if block_below_name == "mcl_core:goldblock" then - soundname="mesecons_noteblock_bell" - elseif block_below_name == "mcl_core:clay" then - soundname="mesecons_noteblock_flute" - elseif block_below_name == "mcl_core:packed_ice" then - soundname="mesecons_noteblock_chime" - elseif block_below_name == "mcl_core:bone_block" then - soundname="mesecons_noteblock_xylophone_wood" - elseif block_below_name == "mcl_core:ironblock" then - soundname="mesecons_noteblock_xylophone_metal" - elseif block_below_name == "mcl_nether:soul_sand" then - soundname="mesecons_noteblock_cowbell" - elseif block_below_name == "mcl_farming:pumpkin" or block_below_name == "mcl_farming:pumpkin_face" or block_below_name == "mcl_farming:pumpkin_face_light" then - soundname="mesecons_noteblock_didgeridoo" - elseif block_below_name == "mcl_core:emeraldblock" then - soundname="mesecons_noteblock_squarewave" - elseif block_below_name == "mcl_farming:hay_block" then - soundname="mesecons_noteblock_banjo" - elseif block_below_name == "mcl_nether:glowstone" then - soundname="mesecons_noteblock_piano_digital" - elseif minetest.get_item_group(block_below_name, "wool") ~= 0 then - soundname="mesecons_noteblock_guitar" - elseif minetest.get_item_group(block_below_name, "material_glass") ~= 0 then - soundname="mesecons_noteblock_hit" - elseif minetest.get_item_group(block_below_name, "material_wood") ~= 0 then - soundname="mesecons_noteblock_bass_guitar" - elseif minetest.get_item_group(block_below_name, "material_sand") ~= 0 then - soundname="mesecons_noteblock_snare" - elseif minetest.get_item_group(block_below_name, "material_stone") ~= 0 then - soundname="mesecons_noteblock_bass_drum" - else - -- Default: One of 25 piano notes - soundname = soundnames_piano[param2] - -- Workaround: Final sound gets automatic higher pitch instead - if param2 == 24 then - pitch = 2^(1/12) - end - pitched = true - end - if not pitched then - pitch = param2_to_pitch(param2) - end - - local note_color = param2_to_note_color(param2) - - minetest.add_particle({ - texture = "mcl_particles_note.png^[colorize:"..note_color..":92", - pos = { x = pos.x, y = pos.y + 0.35, z = pos.z }, - velocity = { x = 0, y = 2, z = 0 }, - acceleration = { x = 0, y = -2, z = 0 }, - expirationtime = 1.0, - collisiondetection = false, - size = 3, - }) - minetest.sound_play(soundname, - {pos = pos, gain = 1.0, max_hear_distance = 48, pitch = pitch}) -end diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.de.tr b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.de.tr deleted file mode 100644 index b3fe222477..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.de.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block=Notenblock -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.=Ein Notenblock ist ein musikalischer Block, der eine von vielen Noten von verschiedenen Instrumenten spielt, wenn er geschlagen oder mit Redstoneenergie versorgt wird. -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:=Benutzen Sie den Notenblock, um die nächste Musiknote zu wählen (es gibt 25 Halbtöne bzw. oder 2 Oktaven). Das gespielte Instrument hängt vom Material des Blocks unter dem Notenblock ab: -• Glass: Sticks=• Glas: Stöcke -• Wood: Bass guitar=• Holz: Bassgitarre -• Stone: Bass drum=• Stein: Basstrommel -• Sand or gravel: Snare drum=• Sand oder Kies: Kleine Trommel -• Block of Gold: Bell=• Goldblock: Glocke -• Clay: Flute=• Ton: Flöte -• Packed Ice: Chime=• Packeis: Glockenspiel -• Wool: Guitar=• Wolle: Gitarre -• Bone Block: Xylophne=• Knochenblock: Xylophon -• Block of Iron: Iron xylophne=• Eisenblock: Eisenxylophon -• Soul Sand: Cow bell=• Seelensand: Kuhglocke -• Pumpkin: Didgeridoo=• Kürbis: Didgeridoo -• Block of Emerald: Square wave=• Smaragdblock: Rechteckschwingung -• Hay Bale: Banjo=• Heuballen: Banjo -• Glowstone: Electric piano=• Leuchtstein: E-Piano -• Anything else: Piano=• Alles andere: Klavier -The note block will only play a note when it is below air, otherwise, it stays silent.=Der Notenblock wird nur eine Note spielen, wenn er sich unter Luft befindet, sonst bleibt er stumm. -Plays a musical note when powered by redstone power=Spielt eine Musiknote, wenn mit Redstoneenergie versorgt diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.es.tr b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.es.tr deleted file mode 100644 index 123862d2d9..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block=Bloque musical -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.=Un bloque de notas es un bloque musical que reproduce una de las muchas notas musicales e instrumentos diferentes cuando se golpea o se le suministra energía de redstone. -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:=Use el bloque de notas para elegir la siguiente nota musical (hay 25 semitonos, o 2 octavas). El instrumento jugado depende del material del bloque debajo del bloque de nota: -• Glass: Sticks=• Cristal: Palos -• Wood: Bass guitar=• Madera: Bajo -• Stone: Bass drum=• Piedra: Bombo -• Sand or gravel: Snare drum=• Arena o grava: tambor -• Anything else: Piano=• Cualquier otra cosa: piano -The note block will only play a note when it is below air, otherwise, it stays silent.=El bloque de notas solo reproducirá una nota cuando esté debajo del aire, de lo contrario, permanecerá en silencio. diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.fr.tr b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.fr.tr deleted file mode 100644 index f8d8e3d752..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.fr.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block=Bloc de notes -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.=Un bloc de notes est un bloc musical qui joue l'une des nombreuses notes de musique et différents instruments lorsqu'il est frappé ou alimenté en redstone. -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:=Utilisez le bloc de notes pour choisir la prochaine note de musique (il y a 25 demi-tons ou 2 octaves). L'instrument joué dépend du matériau du bloc situé sous le bloc de notes: -• Glass: Sticks=• Glass: Sticks -• Wood: Bass guitar=• Bois: Guitare Basse -• Stone: Bass drum=• Pierre: Grosse caisse -• Sand or gravel: Snare drum=• Sable ou gravier: Caisse claire -• Block of Gold: Bell=• Bloc d'OR: Cloche -• Clay: Flute=• Argile: Flûte -• Packed Ice: Chime=• Glace tassée: Carillon -• Wool: Guitar=• Laine: Guitare -• Bone Block: Xylophne=• Bloc osseux: Xylophne -• Block of Iron: Iron xylophne=• Bloc de fer: Xylophone en fer -• Soul Sand: Cow bell=• Soul Sand: Cloche de vache -• Pumpkin: Didgeridoo=• Citrouille: Didgeridoo -• Block of Emerald: Square wave=• Bloc d'émeraude: Onde carrée -• Hay Bale: Banjo=• Hay Bale: Banjo -• Glowstone: Electric piano=• Glowstone: Piano Electrique -• Anything else: Piano=• Autres: Piano -The note block will only play a note when it is below air, otherwise, it stays silent.=Le bloc de notes ne jouera une note que lorsqu'il est sous l'air, sinon il reste silencieux. -Plays a musical note when powered by redstone power=Joue une note de musique lorsqu'il est alimenté par une puissance redstone diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.pl.tr b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.pl.tr deleted file mode 100644 index fbf31bc162..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.pl.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block=Blok nuty -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.=Blok nuty jest muzycznym blokiem, który gra jedną z wielu muzycznych nut różnych instrumentów gdy jest uderzony, lub zasilony czerwienitem. -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:=Użyj bloku nuty aby wybrać następną muzyczną nutę (możliwe jest 25 półtonów, lub 2 oktawy). Zagrany instrument zależy od materiału znajdującego się pod blokiem nuty: -• Glass: Sticks=• Szkło: patyki -• Wood: Bass guitar=• Drewno: gitara basowa -• Stone: Bass drum=• Kamień: bęben -• Sand or gravel: Snare drum=• Piasek lub żwir: bęben mały -• Anything else: Piano=• Cokolwiek innego: pianino -• Block of Gold: Bell=• Blok złota: dzwon -• Clay: Flute=• Glina: flet -• Packed Ice: Chime=• Zbity lud: cymbałki -• Wool: Guitar=• Wełna: gitara -• Bone Block: Xylophne=• Blok kości: ksylofon -• Block of Iron: Iron xylophne=• Blok żelaza: żelazny ksylofon -• Soul Sand: Cow bell=• Piasek dusz: krowi dzwonek -• Pumpkin: Didgeridoo=• Dynia: Didgeridoo -• Block of Emerald: Square wave=• Blok szmaragdu: fala kwadratowa -• Hay Bale: Banjo=• Bela siana: banjo -• Glowstone: Electric piano=• Jasnogłaz: elektryczne pianino -The note block will only play a note when it is below air, otherwise, it stays silent.=Blok nuty gra tylko gdy jest poniżej powietrza, w przeciwnym przypadku będzie cichy. -Plays a musical note when powered by redstone power=Gra muzyczną nutę gdy zasilana energię czerwienitową diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.ru.tr b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.ru.tr deleted file mode 100644 index fbac4366f5..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.ru.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block=Нотный блок -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.=Нотный блок это музыкальный блок, который при ударе, а также при подаче энергии редстоуна проигрывает одну из множества музыкальных нот различными инструментами. -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:=[Используйте] нотный блок, чтобы выбрать следующую ноту (всего предусмотрено 25 полутонов или 2 октавы). Проигрываемый инструмент зависит от материала, который находится непосредственно под нотным блоком. -• Glass: Sticks=• Стекло: палочки -• Wood: Bass guitar=• Дерево: бас-гитара -• Stone: Bass drum=• Камень: бочка -• Sand or gravel: Snare drum=• Песок или гравий: барабан -• Anything else: Piano=• Что-либо другое: фортепиано -• Block of Gold: Bell=• Золотой блок: колокол -• Clay: Flute=• Глина: флейта -• Packed Ice: Chime=• Упакованный лёд: звон -• Wool: Guitar=• Шерсть: гитара -• Bone Block: Xylophne=• Костный блок: ксилофон -• Block of Iron: Iron xylophne=• Железный блок: металлофон -• Soul Sand: Cow bell=• Песок душ: колокольчик -• Pumpkin: Didgeridoo=• Тыква: диджериду -• Block of Emerald: Square wave=• Изумрудный блок: прямоугольный сигнал -• Hay Bale: Banjo=• Стог сена: банджо -• Glowstone: Electric piano=• Электронное фортепиано -The note block will only play a note when it is below air, otherwise, it stays silent.=Нотный блок проигрывает ноту только когда над ним имеется воздух, в противном случае он остаётся тихим. -Plays a musical note when powered by redstone power=Проигрывает ноту при подключении энергии редстоуна diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/template.txt deleted file mode 100644 index 2bc0e2b462..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/locale/template.txt +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mesecons_noteblock -Note Block= -A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power.= -Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:= -• Glass: Sticks= -• Wood: Bass guitar= -• Stone: Bass drum= -• Sand or gravel: Snare drum= -• Anything else: Piano= -• Block of Gold: Bell= -• Clay: Flute= -• Packed Ice: Chime= -• Wool: Guitar= -• Bone Block: Xylophne= -• Block of Iron: Iron xylophne= -• Soul Sand: Cow bell= -• Pumpkin: Didgeridoo= -• Block of Emerald: Square wave= -• Hay Bale: Banjo= -• Glowstone: Electric piano= -The note block will only play a note when it is below air, otherwise, it stays silent.= -Plays a musical note when powered by redstone power= diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/mod.conf b/mods/ITEMS/REDSTONE/mesecons_noteblock/mod.conf deleted file mode 100644 index c388e7a263..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_noteblock/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mesecons_noteblock -depends = mesecons, mcl_particles diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg deleted file mode 100644 index 331fc1cc64..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg deleted file mode 100644 index 695b0f4eba..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg deleted file mode 100644 index db96aedb69..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg deleted file mode 100644 index 27bd09df8e..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg deleted file mode 100644 index 810fe18f1d..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg deleted file mode 100644 index 3de1250df4..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_banjo.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_banjo.ogg deleted file mode 100644 index 62d93d5795..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_banjo.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_drum.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_drum.ogg deleted file mode 100644 index c470537edb..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_drum.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_guitar.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_guitar.ogg deleted file mode 100644 index 48069d8e7d..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bass_guitar.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bell.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bell.ogg deleted file mode 100644 index 6758e2c758..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_bell.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg deleted file mode 100644 index 5c60d3158b..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg deleted file mode 100644 index 724db7ded1..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_chime.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_chime.ogg deleted file mode 100644 index 4c13126347..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_chime.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_cowbell.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_cowbell.ogg deleted file mode 100644 index 32b4c9fbe7..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_cowbell.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg deleted file mode 100644 index 12c1ef3809..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg deleted file mode 100644 index fc7f6c883f..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg deleted file mode 100644 index 929b7fbae4..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg deleted file mode 100644 index dfd702b11f..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_didgeridoo.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_didgeridoo.ogg deleted file mode 100644 index 221cd8446d..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_didgeridoo.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg deleted file mode 100644 index eb6045d483..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg deleted file mode 100644 index 5ac16ddec2..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg deleted file mode 100644 index 94977e0d0b..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg deleted file mode 100644 index 1dcc0c4a5b..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg deleted file mode 100644 index 221d9264ce..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg deleted file mode 100644 index acf10dbb93..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_flute.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_flute.ogg deleted file mode 100644 index 3a8bbc6abe..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_flute.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg deleted file mode 100644 index 7af83a8eba..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg deleted file mode 100644 index a96f637104..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg deleted file mode 100644 index 480ca36790..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg deleted file mode 100644 index 917b2b9cd2..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg deleted file mode 100644 index 2e71fea06c..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg deleted file mode 100644 index 941c68562f..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_guitar.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_guitar.ogg deleted file mode 100644 index 1dcd5b8384..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_guitar.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_hit.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_hit.ogg deleted file mode 100644 index cf8a5bfd74..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_hit.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_piano_digital.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_piano_digital.ogg deleted file mode 100644 index 6461a70055..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_piano_digital.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg deleted file mode 100644 index 329a43b4d8..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_squarewave.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_squarewave.ogg deleted file mode 100644 index b6bc5c445c..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_squarewave.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_metal.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_metal.ogg deleted file mode 100644 index 2d99327f71..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_metal.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_wood.ogg b/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_wood.ogg deleted file mode 100644 index 5598f62d6e..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/sounds/mesecons_noteblock_xylophone_wood.ogg and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_noteblock/textures/mesecons_noteblock.png b/mods/ITEMS/REDSTONE/mesecons_noteblock/textures/mesecons_noteblock.png deleted file mode 100644 index 6a481363f9..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_noteblock/textures/mesecons_noteblock.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/init.lua b/mods/ITEMS/REDSTONE/mesecons_pressureplates/init.lua deleted file mode 100644 index 495fbd0484..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/init.lua +++ /dev/null @@ -1,204 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local PRESSURE_PLATE_INTERVAL = 0.04 - -local pp_box_off = { - type = "fixed", - fixed = { -7/16, -8/16, -7/16, 7/16, -7/16, 7/16 }, -} - -local pp_box_on = { - type = "fixed", - fixed = { -7/16, -8/16, -7/16, 7/16, -7.5/16, 7/16 }, -} - -local function pp_on_timer(pos, elapsed) - local node = minetest.get_node(pos) - local basename = minetest.registered_nodes[node.name].pressureplate_basename - local activated_by = minetest.registered_nodes[node.name].pressureplate_activated_by - - -- This is a workaround for a strange bug that occurs when the server is started - -- For some reason the first time on_timer is called, the pos is wrong - if not basename then return end - - if activated_by == nil then - activated_by = { any = true } - end - - local obj_does_activate = function(obj, activated_by) - if activated_by.any then - return true - elseif activated_by.mob and obj:get_luaentity() and obj:get_luaentity().is_mob == true then - return true - elseif activated_by.player and obj:is_player() then - return true - else - return false - end - end - - local objs = minetest.get_objects_inside_radius(pos, 1) - - if node.name == basename .. "_on" then - local disable - if #objs == 0 then - disable = true - elseif not activated_by.any then - disable = true - for k, obj in pairs(objs) do - if obj_does_activate(obj, activated_by) then - disable = false - break - end - end - end - if disable then - minetest.set_node(pos, {name = basename .. "_off"}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end - elseif node.name == basename .. "_off" then - for k, obj in pairs(objs) do - local objpos = obj:get_pos() - if obj_does_activate(obj, activated_by) then - if objpos.y > pos.y-1 and objpos.y < pos.y then - minetest.set_node(pos, {name = basename .. "_on"}) - mesecon.receptor_on(pos, mesecon.rules.pplate) - break - end - end - end - end - return true -end - --- Register a Pressure Plate --- basename: base name of the pressure plate --- description: description displayed in the player's inventory --- textures_off:textures of the pressure plate when inactive --- textures_on: textures of the pressure plate when active --- image_w: wield image of the pressure plate --- image_i: inventory image of the pressure plate --- recipe: crafting recipe of the pressure plate --- sounds: sound table (like in minetest.register_node) --- plusgroups: group memberships (attached_node=1 and not_in_creative_inventory=1 are already used) --- activated_by: optinal table with elements denoting by which entities this pressure plate is triggered --- Possible table fields: --- * player=true: Player --- * mob=true: Mob --- By default, is triggered by all entities --- longdesc: Customized long description for the in-game help (if omitted, a dummy text is used) - -function mesecon.register_pressure_plate(basename, description, textures_off, textures_on, image_w, image_i, recipe, sounds, plusgroups, activated_by, longdesc) - local groups_off = table.copy(plusgroups) - groups_off.attached_node = 1 - groups_off.dig_by_piston = 1 - groups_off.pressure_plate = 1 - local groups_on = table.copy(groups_off) - groups_on.not_in_creative_inventory = 1 - groups_on.pressure_plate = 2 - if not longdesc then - longdesc = S("A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.") - end - local tt = S("Provides redstone power when pushed") - if not activated_by then - tt = tt .. "\n" .. S("Pushable by players, mobs and objects") - elseif activated_by.mob and activated_by.player then - tt = tt .. "\n" .. S("Pushable by players and mobs") - elseif activated_by.mob then - tt = tt .. "\n" .. S("Pushable by mobs") - elseif activated_by.player then - tt = tt .. "\n" .. S("Pushable by players") - end - - mesecon.register_node(basename, { - drawtype = "nodebox", - inventory_image = image_i, - wield_image = image_w, - paramtype = "light", - walkable = false, - description = description, - on_timer = pp_on_timer, - on_construct = function(pos) - minetest.get_node_timer(pos):start(PRESSURE_PLATE_INTERVAL) - end, - sounds = sounds, - is_ground_content = false, - pressureplate_basename = basename, - pressureplate_activated_by = activated_by, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - },{ - node_box = pp_box_off, - selection_box = pp_box_off, - groups = groups_off, - tiles = textures_off, - - mesecons = {receptor = { state = mesecon.state.off, rules = mesecon.rules.pplate }}, - _doc_items_longdesc = longdesc, - _tt_help = tt, - },{ - node_box = pp_box_on, - selection_box = pp_box_on, - groups = groups_on, - tiles = textures_on, - description = "", - - mesecons = {receptor = { state = mesecon.state.on, rules = mesecon.rules.pplate }}, - _doc_items_create_entry = false, - }) - - minetest.register_craft({ - output = basename .. "_off", - recipe = recipe, - }) - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", basename .. "_off", "nodes", basename .. "_on") - end -end - -local woods = { - { "wood", "mcl_core:wood", "default_wood.png", S("Oak Pressure Plate") }, - { "acaciawood", "mcl_core:acaciawood", "default_acacia_wood.png", S("Acacia Pressure Plate") }, - { "birchwood", "mcl_core:birchwood", "mcl_core_planks_birch.png", S("Birch Pressure Plate") }, - { "darkwood", "mcl_core:darkwood", "mcl_core_planks_big_oak.png", S("Dark Oak Pressure Plate" )}, - { "sprucewood", "mcl_core:sprucewood", "mcl_core_planks_spruce.png", S("Spruce Pressure Plate") }, - { "junglewood", "mcl_core:junglewood", "default_junglewood.png", S("Jungle Pressure Plate") }, -} - -for w=1, #woods do - mesecon.register_pressure_plate( - "mesecons_pressureplates:pressure_plate_"..woods[w][1], - woods[w][4], - {woods[w][3]}, - {woods[w][3]}, - woods[w][3], - nil, - {{woods[w][2], woods[w][2]}}, - mcl_sounds.node_sound_wood_defaults(), - {axey=1, material_wood=1}, - nil, - S("A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.")) - - minetest.register_craft({ - type = "fuel", - recipe = "mesecons_pressureplates:pressure_plate_"..woods[w][1].."_off", - burntime = 15 - }) - -end - -mesecon.register_pressure_plate( - "mesecons_pressureplates:pressure_plate_stone", - S("Stone Pressure Plate"), - {"default_stone.png"}, - {"default_stone.png"}, - "default_stone.png", - nil, - {{"mcl_core:stone", "mcl_core:stone"}}, - mcl_sounds.node_sound_stone_defaults(), - {pickaxey=1, material_stone=1}, - { player = true, mob = true }, - S("A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.")) - - diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.de.tr b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.de.tr deleted file mode 100644 index 6e5e761efc..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.de.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.=Eine Druckplatte ist eine Redstonekomponente, die ihre benachbarten Blöcke mit Redstoneenergie versorgt, wenn sich jemand oder etwas auf ihr befindet. -Oak Pressure Plate=Eichendruckplatte -Acacia Pressure Plate=Akaziendruckplatte -Birch Pressure Plate=Birkendruckplatte -Dark Oak Pressure Plate=Schwarzeichendruckplatte -Spruce Pressure Plate=Fichtendruckplatte -Jungle Pressure Plate=Dschungeldruckplatte -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Eine Holzdruckplatte ist eine Redstonekomponente, die ihre benachbarten Blöcke mit Redstoneenergie versorgt, solange sich ein beliebiges bewegliches Objekt (wie Gegenstände, Spieler und Mobs) auf ihm befindet. -Stone Pressure Plate=Steindruckplatte -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.=Eine Steindruckplatte ist eine Redstonekomponente, die ihre benachbarten Blöcke mit Redstoneenergie versorgt, solange sich ein Spieler oder Mob auf ihm befindet. Sie wird von nichts anderem ausgelöst. -Provides redstone power when pushed=Gibt Redstoneenergie aus, wenn gedrückt -Pushable by players, mobs and objects=Drückbar von Spielern, Mobs und Objekten -Pushable by players and mobs=Drückbar von Spielern und Mobs -Pushable by players=Drückbar von Spielern -Pushable by mobs=Drückbar von Mobs diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.es.tr b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.es.tr deleted file mode 100644 index d30dfbfa94..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.es.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.=Una placa de presión es un componente de redstone que suministra a sus bloques circundantes energía de redstone mientras alguien o algo descansa sobre ella. -Oak Pressure Plate=Placa de presión de roble -Acacia Pressure Plate=Placa de presión de acacia -Birch Pressure Plate=Placa de presión de abedul -Dark Oak Pressure Plate=Placa de presión de roble oscuro -Spruce Pressure Plate=Placa de presión de abeto -Jungle Pressure Plate=Placa de presión de jungla -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Una placa de presión de madera es un componente de redstone que suministra a sus bloques circundantes energía de redstone mientras que cualquier objeto móvil (incluidos los objetos caídos, jugadores y mobs) descansa sobre él. -Stone Pressure Plate=Placa de presión de piedra -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.=Una placa de presión de piedra es un componente de redstone que suministra a sus bloques circundantes poder de redstone mientras un jugador o una criatura se paran encima. No se desencadena por nada más. diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.fr.tr b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.fr.tr deleted file mode 100644 index ef145de56e..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.fr.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.=Une plaque de pression est un composant de redstone qui alimente ses blocs environnants en puissance de redstone pendant que quelqu'un ou quelque chose repose dessus. -Oak Pressure Plate=Plaque de pression en Chêne -Acacia Pressure Plate=Plaque de pression en Acacia -Birch Pressure Plate=Plaque de pression en Bouleau -Dark Oak Pressure Plate=Plaque de pression en Chêne Noir -Spruce Pressure Plate=Plaque de pression en Sapin -Jungle Pressure Plate=Plaque de pression en Acajou -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Une plaque de pression en bois est un composant de redstone qui alimente ses blocs environnants en puissance de redstone tandis que tout objet mobile (y compris les objets lâchés, les joueurs et les mobs) repose dessus. -Stone Pressure Plate=Plaque de pression en pierre -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.=Une plaque de pression en pierre est un composant de redstone qui alimente ses blocs environnants en puissance de redstone pendant qu'un joueur ou un mob se tient au-dessus. Il n'est déclenché par rien d'autre. -Provides redstone power when pushed=Fournit une puissance de redstone lorsqu'il est poussé -Pushable by players, mobs and objects=Poussable par les joueurs, les mobs et les objets -Pushable by players and mobs=Poussable par les joueurs et les mobs -Pushable by players=Poussable par les joueurs -Pushable by mobs=Poussable par les mobs diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.pl.tr b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.pl.tr deleted file mode 100644 index 50cef3ba7b..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.pl.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.=Płyta naciskowa jest mechanizmem czerwienitowym, który zasila otaczające bloki energią czerwienitową gdy ktoś lub coś na niej spoczywa. -Oak Pressure Plate=Dębowa płyta naciskowa -Acacia Pressure Plate=Akacjowa płyta naciskowa -Birch Pressure Plate=Brzozowa płyta naciskowa -Dark Oak Pressure Plate=Ciemno-dębowa płyta naciskowa -Spruce Pressure Plate=Świerkowa płyta naciskowa -Jungle Pressure Plate=Tropikalna płyta naciskowa -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Drewniana płyta naciskowa jest mechanizmem czerwienitowym, który zasila otaczające bloki energią czerwienitowym, gdy ruchomy obiekt (włączając w to upuszczone przedmioty, graczy, moby) spoczywa na niej. -Stone Pressure Plate=Kamienna płyta naciskowa -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.=Kamienna płyta naciskowa jest mechanizmem czerwienitowym, która zasila otaczające bloki energią czerwienitową gdy gracz lub mob na niej stoi. Nie jest aktywowana niczym innym. -Provides redstone power when pushed=Dostarcza energię czerwienitową gdy naciśnięta -Pushable by players, mobs and objects=Możliwa do naciśnięcia przez graczy, moby i obiekty -Pushable by players and mobs=Możliwa do naciśnięcia przez graczy i moby -Pushable by players=Możliwa do naciśnięcia przez graczy -Pushable by mobs=Możliwa do naciśnięcia przez moby diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.ru.tr b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.ru.tr deleted file mode 100644 index fcd81f451c..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.ru.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.=Нажимаемая панель это компонент редстоуна, который начинает снабжать энергией редстоуна окружающие его блоки, когда кто-то или что-то находится прямо на нём. -Oak Pressure Plate=Дубовая нажимная панель -Acacia Pressure Plate=Акациевая нажимная панель -Birch Pressure Plate=Берёзовая нажимная панель -Dark Oak Pressure Plate=Нажимная панель из тёмного дуба -Spruce Pressure Plate=Еловая нажимная панель -Jungle Pressure Plate=Нажимная панель из дерева джунглей -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.=Деревянная нажимная панель это компонент редстоуна, который начинает снабжать энергией редстоуна окружающие его блоки, когда любой движущийся объект (включая брошенные предметы, игроков и мобов) находится прямо на нём. -Stone Pressure Plate=Каменная нажимная панель -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.=Каменная нажимная панель это компонент редстоуна, который начинает снабжать энергией редстоуна окружающие его блоки, когда игрок или моб находится прямо на нём. От чего-то другого он не сработает. -Provides redstone power when pushed=Производит энергию редстоуна при нажимании -Pushable by players, mobs and objects=Нажимается игроками, мобами и объектами -Pushable by players and mobs=Нажимается игроками и мобами -Pushable by players=Нажимается игроками -Pushable by mobs=Нажимается мобами diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/template.txt deleted file mode 100644 index 96eb3f922f..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/template.txt +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mesecons_pressureplates -A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.= -Oak Pressure Plate= -Acacia Pressure Plate= -Birch Pressure Plate= -Dark Oak Pressure Plate= -Spruce Pressure Plate= -Jungle Pressure Plate= -A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.= -Stone Pressure Plate= -A stone pressure plate is a redstone component which supplies its surrounding blocks with redstone power while a player or mob stands on top of it. It is not triggered by anything else.= -Provides redstone power when pushed= -Pushable by players, mobs and objects= -Pushable by players and mobs= -Pushable by players= -Pushable by mobs= diff --git a/mods/ITEMS/REDSTONE/mesecons_pressureplates/mod.conf b/mods/ITEMS/REDSTONE/mesecons_pressureplates/mod.conf deleted file mode 100644 index 0edd40e9ad..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_pressureplates/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_pressureplates -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/init.lua b/mods/ITEMS/REDSTONE/mesecons_solarpanel/init.lua deleted file mode 100644 index 129c28eea9..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/init.lua +++ /dev/null @@ -1,296 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local function path_to_sunlight_exists(position, light_level) - local neighbours = { - { x = 0, y = 0, z =-1 }, - { x = 0, y = 0, z = 1 }, - { x = 0, y =-1, z = 0 }, - { x = 0, y = 1, z = 0 }, - { x =-1, y = 0, z = 0 }, - { x = 1, y = 0, z = 0 }, - } - for i=1, #neighbours do - local offset = neighbours[i] - local position_new = vector.add( - position, - offset - ) - local light_level_new = minetest.get_node_light( - position_new, - nil - ) - if 15 == light_level_new then - -- found the sunlight - return true - elseif light_level_new > light_level then - -- search where light is brighter - if path_to_sunlight_exists( - position_new, - light_level_new - ) then - return true - end - end - end -end - -local function sunlight_visible(position) - local light_level - -- Minetest 5.4.0+ can measure the daylight level at a position - if nil ~= minetest.get_natural_light then - light_level = minetest.get_natural_light( - position, - nil - ) - if light_level >= 12 then - return true - end - else -- Minetest 5.3.0 or less can only measure the light level - local time = minetest.get_timeofday() * 24000 - -- only check light level during day - if time > 6000 and time < 18000 then - light_level = minetest.get_node_light( - position, - nil - ) - if light_level >= 12 then - return path_to_sunlight_exists( - position, - 12 - ) - end - end - end - return false -end - -local boxes = { -8/16, -8/16, -8/16, 8/16, -2/16, 8/16 } - --- Daylight Sensor -minetest.register_node("mesecons_solarpanel:solar_panel_on", { - drawtype = "nodebox", - tiles = { "jeija_solar_panel.png","jeija_solar_panel.png","jeija_solar_panel_side.png", - "jeija_solar_panel_side.png","jeija_solar_panel_side.png","jeija_solar_panel_side.png", }, - wield_image = "jeija_solar_panel.png", - wield_scale = { x=1, y=1, z=3 }, - paramtype = "light", - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = boxes - }, - node_box = { - type = "fixed", - fixed = boxes - }, - drop = "mesecons_solarpanel:solar_panel_off", - _doc_items_create_entry = false, - groups = {handy=1,axey=1, not_in_creative_inventory = 1, material_wood=1, flammable=-1}, - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {receptor = { - state = mesecon.state.on, - rules = mesecon.rules.pplate, - }}, - on_rightclick = function(pos, node, clicker, pointed_thing) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_inverted_off"}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end, - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, -}) - -minetest.register_node("mesecons_solarpanel:solar_panel_off", { - drawtype = "nodebox", - tiles = { "jeija_solar_panel.png","jeija_solar_panel.png","jeija_solar_panel_side.png", - "jeija_solar_panel_side.png","jeija_solar_panel_side.png","jeija_solar_panel_side.png", }, - wield_image = "jeija_solar_panel.png", - wield_scale = { x=1, y=1, z=3 }, - paramtype = "light", - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = boxes - }, - node_box = { - type = "fixed", - fixed = boxes - }, - groups = {handy=1,axey=1, material_wood=1}, - description=S("Daylight Sensor"), - _tt_help = S("Provides redstone power when in sunlight") .. "\n" ..S("Can be inverted"), - _doc_items_longdesc = S("Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.").."\n".. - S("In inverted state, they provide redstone power when they are not in sunlight and no power otherwise."), - _doc_items_usagehelp = S("Use the daylight sensor to toggle its state."), - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {receptor = { - state = mesecon.state.off, - rules = mesecon.rules.pplate, - }}, - on_rightclick = function(pos, node, clicker, pointed_thing) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_inverted_on"}) - mesecon.receptor_on(pos, mesecon.rules.pplate) - end, - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, -}) - -minetest.register_craft({ - output = "mesecons_solarpanel:solar_panel_off", - recipe = { - {"mcl_core:glass", "mcl_core:glass", "mcl_core:glass"}, - {"mcl_nether:quartz", "mcl_nether:quartz", "mcl_nether:quartz"}, - {"group:wood_slab", "group:wood_slab", "group:wood_slab"}, - } -}) - -minetest.register_abm({ - label = "Daylight turns on solar panels", - nodenames = {"mesecons_solarpanel:solar_panel_off"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if sunlight_visible(pos) then - minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_on", param2=node.param2}) - mesecon.receptor_on(pos, mesecon.rules.pplate) - end - end, -}) - -minetest.register_abm({ - label = "Darkness turns off solar panels", - nodenames = {"mesecons_solarpanel:solar_panel_on"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if not sunlight_visible(pos) then - minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_off", param2=node.param2}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end - end, -}) - ---- Inverted Daylight Sensor - -minetest.register_node("mesecons_solarpanel:solar_panel_inverted_on", { - drawtype = "nodebox", - tiles = { "jeija_solar_panel_inverted.png","jeija_solar_panel_inverted.png","jeija_solar_panel_side.png", - "jeija_solar_panel_side.png","jeija_solar_panel_side.png","jeija_solar_panel_side.png", }, - wield_image = "jeija_solar_panel_inverted.png", - wield_scale = { x=1, y=1, z=3 }, - paramtype = "light", - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = boxes - }, - node_box = { - type = "fixed", - fixed = boxes - }, - drop = "mesecons_solarpanel:solar_panel_off", - groups = {handy=1,axey=1, not_in_creative_inventory = 1, material_wood=1}, - _doc_items_create_entry = false, - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {receptor = { - state = mesecon.state.on, - rules = mesecon.rules.pplate, - }}, - on_rightclick = function(pos, node, clicker, pointed_thing) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_off"}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end, - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, -}) - -minetest.register_node("mesecons_solarpanel:solar_panel_inverted_off", { - drawtype = "nodebox", - tiles = { "jeija_solar_panel_inverted.png","jeija_solar_panel_inverted.png","jeija_solar_panel_side.png", - "jeija_solar_panel_side.png","jeija_solar_panel_side.png","jeija_solar_panel_side.png", }, - wield_image = "jeija_solar_panel_inverted.png", - wield_scale = { x=1, y=1, z=3 }, - paramtype = "light", - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = boxes - }, - node_box = { - type = "fixed", - fixed = boxes - }, - drop = "mesecons_solarpanel:solar_panel_off", - groups = {handy=1,axey=1, not_in_creative_inventory=1, material_wood=1}, - description=S("Inverted Daylight Sensor"), - _doc_items_create_entry = false, - sounds = mcl_sounds.node_sound_glass_defaults(), - mesecons = {receptor = { - state = mesecon.state.off, - rules = mesecon.rules.pplate, - }}, - on_rightclick = function(pos, node, clicker, pointed_thing) - local protname = clicker:get_player_name() - if minetest.is_protected(pos, protname) then - minetest.record_protection_violation(pos, protname) - return - end - minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_on"}) - mesecon.receptor_on(pos, mesecon.rules.pplate) - end, - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, -}) - -minetest.register_abm({ - label = "Darkness turns on inverted solar panels", - nodenames = {"mesecons_solarpanel:solar_panel_inverted_off"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if not sunlight_visible(pos) then - minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_inverted_on", param2=node.param2}) - mesecon.receptor_on(pos, mesecon.rules.pplate) - end - end, -}) - -minetest.register_abm({ - label = "Daylight turns off inverted solar panels", - nodenames = {"mesecons_solarpanel:solar_panel_inverted_on"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - if sunlight_visible(pos) then - minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_inverted_off", param2=node.param2}) - mesecon.receptor_off(pos, mesecon.rules.pplate) - end - end, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mesecons_solarpanel:solar_panel_off", - burntime = 15 -}) - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_solarpanel:solar_panel_off", "nodes", "mesecons_solarpanel:solar_panel_on") - doc.add_entry_alias("nodes", "mesecons_solarpanel:solar_panel_off", "nodes", "mesecons_solarpanel:solar_panel_inverted_off") - doc.add_entry_alias("nodes", "mesecons_solarpanel:solar_panel_off", "nodes", "mesecons_solarpanel:solar_panel_inverted_off") - doc.add_entry_alias("nodes", "mesecons_solarpanel:solar_panel_off", "nodes", "mesecons_solarpanel:solar_panel_inverted_on") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.de.tr b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.de.tr deleted file mode 100644 index c33fe949b5..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.de.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor=Tageslichtsensor -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.=Tageslichtsensoren sind Redstonekomponenten, die Redstoneenergie liefern, wenn sie im Sonnenlicht stehen, sonst nicht. Sie können auch invertiert werden. -Inverted Daylight Sensor=Invertierter Tageslichtsensor -Use the daylight sensor to toggle its state.=Benutzen Sie den Tageslichtsensor, um seinen Zustand umzuschalten. -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.=Im invertierten Zustand erzeugen sie Redstoneenergie, wenn sie sich nicht im Tageslicht befinden, ansonsten nicht. -Provides redstone power when in sunlight=Gibt Redstoneenergie aus, wenn im Sonnenlicht -Can be inverted=Kann invertiert werden diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.es.tr b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.es.tr deleted file mode 100644 index 986a16d8d2..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.es.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor=Sensor de luz solar -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.=Los sensores de luz diurna son componentes de redstone que proporcionan energía de redstone cuando están bajo la luz solar y no tienen energía de otra manera. También se pueden invertir. -Inverted Daylight Sensor=Sensor de luz solar invertido -Use the daylight sensor to toggle its state.=Use el sensor de luz diurna para alternar su estado. -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.=En estado invertido, proporcionan energía de redstone cuando no están bajo la luz solar y no tienen energía de otra manera. diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.fr.tr b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.fr.tr deleted file mode 100644 index a0b7ad7b09..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.fr.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor=Capteur de luminosité -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.=Les capteurs de luminosité sont des composants de redstone qui fournissent une puissance de redstone lorsqu'ils sont en plein soleil et aucune autrement. Ils peuvent également être inversés. -Use the daylight sensor to toggle its state.=Utilisez le capteur de luminosité pour basculer son état. -Inverted Daylight Sensor=Capteur de luminosité inversé -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.=En état inversé, ils fournissent une puissance de redstone lorsqu'ils ne sont pas en plein soleil et aucune puissance autrement. -Provides redstone power when in sunlight=Fournit une puissance de redstone en plein soleil -Can be inverted=Peut être inversé diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.pl.tr b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.pl.tr deleted file mode 100644 index d7e3e19ca6..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.pl.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor=Czujnik światła dziennego -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.=Czujniki światła dziennego są czerwienitowymi elementami, które wysyłają energie czerwienitową gdy są w świetle słonecznym i nie dostarczają energii w przeciwnym przypadku. -Use the daylight sensor to toggle its state.=Użyj czujnik światła dziennego by zmienić jego stan. -Inverted Daylight Sensor=Odwrotny czujnik światła dziennego -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.=W odwrotnym stanie, dostarczają energię czerwienitową gdy nie są w świetle słonecznym i nie dostarczają energii w przeciwnym przypadku. -Provides redstone power when in sunlight=Dostarcza energię czerwienitową gdy w oświetlony słońcem -Can be inverted=Może być odwrócony diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.ru.tr b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.ru.tr deleted file mode 100644 index 108cb9f75b..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.ru.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor=Датчик дневного света -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.=Датчик дневного света это компонент редстоуна, который производит энергию редстоуна при нахождении в солнечном свете и не производит в противном случае. Он также может быть инвертирован. -Use the daylight sensor to toggle its state.=[Используйте] датчик дневного света для смены его состояния -Inverted Daylight Sensor=Инвертированный датчик дневного света -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.=В инвертированном состоянии он производит энергию редстоуна, когда на него не попадает солнечны свет, а когда попадает - перестаёт производить. -Provides redstone power when in sunlight=Генерирует энергию редстоуна в солнечном свете -Can be inverted=Может быть инвертирован diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/template.txt deleted file mode 100644 index 84c3ce42c8..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/template.txt +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_solarpanel -Daylight Sensor= -Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.= -Use the daylight sensor to toggle its state.= -Inverted Daylight Sensor= -In inverted state, they provide redstone power when they are not in sunlight and no power otherwise.= -Provides redstone power when in sunlight= -Can be inverted= diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/mod.conf b/mods/ITEMS/REDSTONE/mesecons_solarpanel/mod.conf deleted file mode 100644 index 9897b74886..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_solarpanel/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_solarpanel -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel.png b/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel.png deleted file mode 100644 index c94d506cb4..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_inverted.png b/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_inverted.png deleted file mode 100644 index 15784f5c9a..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_inverted.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_side.png b/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_side.png deleted file mode 100644 index ca6c3d6a57..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_solarpanel/textures/jeija_solar_panel_side.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/init.lua b/mods/ITEMS/REDSTONE/mesecons_torch/init.lua deleted file mode 100644 index e49b843cc3..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/init.lua +++ /dev/null @@ -1,241 +0,0 @@ --- REDSTONE TORCH AND BLOCK OF REDSTONE - -local S = minetest.get_translator(minetest.get_current_modname()) - -local TORCH_COOLOFF = 120 -- Number of seconds it takes for a burned-out torch to reactivate - -local function rotate_torch_rules(rules, param2) - if param2 == 1 then - return rules - elseif param2 == 5 then - return mesecon.rotate_rules_right(rules) - elseif param2 == 2 then - return mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules)) --180 degrees - elseif param2 == 4 then - return mesecon.rotate_rules_left(rules) - elseif param2 == 0 then - return rules - else - return rules - end -end - -local function torch_get_output_rules(node) - if node.param2 == 1 then - return { - { x = -1, y = 0, z = 0 }, - { x = 1, y = 0, z = 0 }, - { x = 0, y = 1, z = 0, spread = true }, - { x = 0, y = 0, z = -1 }, - { x = 0, y = 0, z = 1 }, - } - else - return rotate_torch_rules({ - { x = 1, y = 0, z = 0 }, - { x = 0, y = -1, z = 0 }, - { x = 0, y = 1, z = 0, spread = true }, - { x = 0, y = 1, z = 0 }, - { x = 0, y = 0, z = -1 }, - { x = 0, y = 0, z = 1 }, - }, node.param2) - end -end - -local function torch_get_input_rules(node) - if node.param2 == 1 then - return {{x = 0, y = -1, z = 0 }} - else - return rotate_torch_rules({{ x = -1, y = 0, z = 0 }}, node.param2) - end -end - -local function torch_overheated(pos) - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.02, max_hear_distance = 6}, true) - minetest.add_particle({ - pos = {x=pos.x, y=pos.y+0.2, z=pos.z}, - velocity = {x = 0, y = 0.6, z = 0}, - expirationtime = 1.2, - size = 1.5, - texture = "mcl_particles_smoke.png", - }) - local timer = minetest.get_node_timer(pos) - timer:start(TORCH_COOLOFF) -end - -local function torch_action_on(pos, node) - local overheat - if node.name == "mesecons_torch:mesecon_torch_on" then - overheat = mesecon.do_overheat(pos) - if overheat then - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_overheated", param2=node.param2}) - else - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_off", param2=node.param2}) - end - mesecon.receptor_off(pos, torch_get_output_rules(node)) - elseif node.name == "mesecons_torch:mesecon_torch_on_wall" then - overheat = mesecon.do_overheat(pos) - if overheat then - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_overheated_wall", param2=node.param2}) - else - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_off_wall", param2=node.param2}) - end - mesecon.receptor_off(pos, torch_get_output_rules(node)) - end - if overheat then - torch_overheated(pos) - end -end - -local function torch_action_off(pos, node) - local overheat - if node.name == "mesecons_torch:mesecon_torch_off" or node.name == "mesecons_torch:mesecon_torch_overheated" then - overheat = mesecon.do_overheat(pos) - if overheat then - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_overheated", param2=node.param2}) - else - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_on", param2=node.param2}) - mesecon.receptor_on(pos, torch_get_output_rules(node)) - end - elseif node.name == "mesecons_torch:mesecon_torch_off_wall" or node.name == "mesecons_torch:mesecon_torch_overheated_wall" then - overheat = mesecon.do_overheat(pos) - if overheat then - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_overheated_wall", param2=node.param2}) - else - minetest.swap_node(pos, {name="mesecons_torch:mesecon_torch_on_wall", param2=node.param2}) - mesecon.receptor_on(pos, torch_get_output_rules(node)) - end - end - if overheat then - torch_overheated(pos) - end -end - -minetest.register_craft({ - output = "mesecons_torch:mesecon_torch_on", - recipe = { - {"mesecons:redstone"}, - {"mcl_core:stick"},} -}) - -local off_def = { - name = "mesecon_torch_off", - description = S("Redstone Torch (off)"), - doc_items_create_entry = false, - icon = "jeija_torches_off.png", - tiles = {"jeija_torches_off.png"}, - light = 0, - groups = {dig_immediate=3, dig_by_water=1, redstone_torch=2, mesecon_ignore_opaque_dig=1, not_in_creative_inventory=1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - drop = "mesecons_torch:mesecon_torch_on", -} - -mcl_torches.register_torch(off_def) - -local off_override = { - mesecons = { - receptor = { - state = mesecon.state.off, - rules = torch_get_output_rules, - }, - effector = { - state = mesecon.state.on, - rules = torch_get_input_rules, - action_off = torch_action_off, - }, - } -} - -minetest.override_item("mesecons_torch:mesecon_torch_off", off_override) -minetest.override_item("mesecons_torch:mesecon_torch_off_wall", off_override) - -local overheated_def = table.copy(off_def) -overheated_def.name = "mesecon_torch_overheated" -overheated_def.description = S("Redstone Torch (overheated)") - -mcl_torches.register_torch(overheated_def) - -local overheated_override = { - on_timer = function(pos, elapsed) - if not mesecon.is_powered(pos) then - local node = minetest.get_node(pos) - torch_action_off(pos, node) - end - end -} - -minetest.override_item("mesecons_torch:mesecon_torch_overheated", overheated_override) -minetest.override_item("mesecons_torch:mesecon_torch_overheated_wall", overheated_override) - -local on_def = { - name = "mesecon_torch_on", - description = S("Redstone Torch"), - doc_items_longdesc = S("A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything."), - doc_items_usagehelp = S("Redstone torches can be placed at the side and on the top of full solid opaque blocks."), - icon = "jeija_torches_on.png", - tiles = {"jeija_torches_on.png"}, - light = 7, - groups = {dig_immediate=3, dig_by_water=1, redstone_torch=1, mesecon_ignore_opaque_dig=1}, - sounds = mcl_sounds.node_sound_wood_defaults(), -} - -mcl_torches.register_torch(on_def) - -local on_override = { - on_destruct = function(pos, oldnode) - local node = minetest.get_node(pos) - torch_action_on(pos, node) - end, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = torch_get_output_rules - }, - effector = { - state = mesecon.state.off, - rules = torch_get_input_rules, - action_on = torch_action_on, - }, - }, - _tt_help = S("Provides redstone power when it's not powered itself"), -} - -minetest.override_item("mesecons_torch:mesecon_torch_on", on_override) -minetest.override_item("mesecons_torch:mesecon_torch_on_wall", on_override) - -minetest.register_node("mesecons_torch:redstoneblock", { - description = S("Block of Redstone"), - _tt_help = S("Provides redstone power"), - _doc_items_longdesc = S("A block of redstone permanently supplies redstone power to its surrounding blocks."), - tiles = {"redstone_redstone_block.png"}, - stack_max = 64, - groups = {pickaxey=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - mesecons = {receptor = { - state = mesecon.state.on, - rules = mesecon.rules.alldirs, - }}, - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_craft({ - output = "mesecons_torch:redstoneblock", - recipe = { - {"mesecons:wire_00000000_off","mesecons:wire_00000000_off","mesecons:wire_00000000_off"}, - {"mesecons:wire_00000000_off","mesecons:wire_00000000_off","mesecons:wire_00000000_off"}, - {"mesecons:wire_00000000_off","mesecons:wire_00000000_off","mesecons:wire_00000000_off"}, - } -}) - -minetest.register_craft({ - output = "mesecons:wire_00000000_off 9", - recipe = { - {"mesecons_torch:redstoneblock"}, - } -}) - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_torch:mesecon_torch_on", "nodes", "mesecons_torch:mesecon_torch_off") - doc.add_entry_alias("nodes", "mesecons_torch:mesecon_torch_on", "nodes", "mesecons_torch:mesecon_torch_off_wall") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.de.tr b/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.de.tr deleted file mode 100644 index 7f3f94c586..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.de.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch=Redstonefackel -Redstone Torch (off)=Redstonefackel (aus) -Redstone Torch (overheated)=Redstonefackel (überhitzt) -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.=Eine Redstonefackel ist eine Redstonekomponente, die benutzt werden kann, um ein Redstonesignal zu invertieren. Sie versorgt die benachbarten Blöcke mit Redstoneenergie, ausgenommen den Block, an dem sie befestigt wurde. Eine Redstonefackel leuchtet normalerweise, aber sie kann auch ausgeschaltet werden, indem der Block, an dem sie befestigt ist, bestromt wird. Wenn sie aus ist, wird sie nichts mit Redstoneenergie versorgen. -Redstone torches can be placed at the side and on the top of full solid opaque blocks.=Redstonefackeln können an der Seite und auf der Oberseite der meisten undurchsichtigen ganzen Blöcke platziert werden. -Block of Redstone=Redstoneblock -A block of redstone permanently supplies redstone power to its surrounding blocks.=Ein Redstoneblock versorgt seine benachbarten Blöcke beständig mit Redstoneenergie. -Provides redstone power when it's not powered itself=Gibt Redstoneenergie aus, wenn es nicht selbst bestromt ist -Provides redstone power=Gibt Redstoneenergie aus diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.es.tr b/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.es.tr deleted file mode 100644 index b27fa1b586..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch=Antorcha de redstone -Redstone Torch (off)=Antorcha de redstone (Apagada) -Redstone Torch (overheated)=Antorcha de redstone (Sobrecalentada) -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.=Una antorcha de redstone es un componente de redstone que se puede utilizar para invertir una señal de redstone. Suministra a sus bloques circundantes energía de redstone, excepto el bloque al que está unido. Una antorcha de redstone normalmente está encendida, pero también se puede apagar alimentando el bloque al que está conectado. Mientras está apagada, una antorcha de redstone no alimenta nada. -Redstone torches can be placed at the side and on the top of full solid opaque blocks.=Las antorchas Redstone se pueden colocar a un lado y en la parte superior de bloques opacos sólidos completos. -Block of Redstone=Bloque de redstone -A block of redstone permanently supplies redstone power to its surrounding blocks.=Un bloque de redstone suministra permanentemente energía de redstone a sus bloques circundantes. diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.fr.tr b/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.fr.tr deleted file mode 100644 index 8c223d834c..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.fr.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch=Torche de Redstone -Redstone Torch (off)=Torche de Redstone (inactive) -Redstone Torch (overheated)=Torche de Redstone (surchauffé) -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.=Une torche redstone est un composant redstone qui peut être utilisé pour inverser un signal redstone. Il alimente ses blocs environnants en énergie redstone, à l'exception du bloc auquel il est attaché. Une torche Redstone est normalement allumée, mais elle peut également être éteinte en alimentant le bloc auquel elle est attachée. Tant qu'elle n'est pas allumée, une torche redstone n'alimente rien. -Redstone torches can be placed at the side and on the top of full solid opaque blocks.=Les torches Redstone peuvent être placées sur le côté et sur le dessus de blocs opaques solides. -Block of Redstone=Bloc de Redstone -A block of redstone permanently supplies redstone power to its surrounding blocks.=Un bloc de redstone fournit en permanence de l'énergie redstone à ses blocs environnants. -Provides redstone power when it's not powered itself=Fournit une puissance redstone lorsqu'il n'est pas alimenté lui-même -Provides redstone power=Fournit une puissance redstone diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.pl.tr b/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.pl.tr deleted file mode 100644 index a791da3a7b..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.pl.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch=Pochodnia czerwienitowa -Redstone Torch (off)=Pochodnia czerwienitowa (wyłączona) -Redstone Torch (overheated)=Pochodnia czerwienitowa (przegrzana) -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.=Pochodnia czerwienitowa to mechanizm czerwienitowy, który można wykorzystać do odwrócenia czerwienitowego sygnału. Dostarcza otaczającym jej blokom energię czerwienitową, z wyjątkiem bloku do którego jest przyczepiona. Pochodnia czerwienitowa normalnie jest zapalona, jednak może zostać wyłączona przez zasilenie bloku do którego jest przyczepiona. Gdy jest wyłączona nie zasila ona niczego. -Redstone torches can be placed at the side and on the top of full solid opaque blocks.=Pochodnia czerwienitowa może być postawiona na boku i wierzchu pełnych, stałych, nieprzezroczystych bloków. -Block of Redstone=Blok czerwienitu -A block of redstone permanently supplies redstone power to its surrounding blocks.=Blok czerwienitu nieustannie dostarcza energię czerwienitową do otaczających go bloków. -Provides redstone power when it's not powered itself=Dostarcza energię czerwienitową gdy nie jest zasilona -Provides redstone power=Dostarcza energię czerwienitową diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.ru.tr b/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.ru.tr deleted file mode 100644 index 45d0d7667c..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.ru.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch=Факел редстоуна -Redstone Torch (off)=Факел редстоуна (выкл) -Redstone Torch (overheated)=Факел редстоуна (перегрелся) -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.=Факел редстоуна это компонент, способный инвертировать сигнал редстоуна. Он обеспечивает энергией редстоуна окружающие блоки, за исключением того блока, к которому он присоединён. Факел редстоуна обычно горит, но он также может быть выключен путём подведения энергии редстоуна к тому блоку, к которому он присоединён. Когда он не горит, то не снабжает энергией окружающие блоки. -Redstone torches can be placed at the side and on the top of full solid opaque blocks.=Факелы редстоуна могут быть установлены по краям и на верхней части любого целого плотного твёрдого блока. -Block of Redstone=Блок редстоуна -A block of redstone permanently supplies redstone power to its surrounding blocks.=Блок редстоуна напрямую снабжает энергией окружающие блоки -Provides redstone power when it's not powered itself=Снабжает энергией редстоуна, если не подключён сам -Provides redstone power=Снабжает энергией редстоуна diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_torch/locale/template.txt deleted file mode 100644 index 8cde3ad6f9..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/locale/template.txt +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_torch -Redstone Torch= -Redstone Torch (off)= -Redstone Torch (overheated)= -A redstone torch is a redstone component which can be used to invert a redstone signal. It supplies its surrounding blocks with redstone power, except for the block it is attached to. A redstone torch is normally lit, but it can also be turned off by powering the block it is attached to. While unlit, a redstone torch does not power anything.= -Redstone torches can be placed at the side and on the top of full solid opaque blocks.= -Block of Redstone= -A block of redstone permanently supplies redstone power to its surrounding blocks.= -Provides redstone power when it's not powered itself= -Provides redstone power= diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/mod.conf b/mods/ITEMS/REDSTONE/mesecons_torch/mod.conf deleted file mode 100644 index 85586cad78..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_torch/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_torch -depends = mesecons, mcl_torches -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_off.png b/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_off.png deleted file mode 100644 index cecdaf8fa9..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_off.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_on.png b/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_on.png deleted file mode 100644 index 24d0a94d94..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_torch/textures/jeija_torches_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_torch/textures/redstone_redstone_block.png b/mods/ITEMS/REDSTONE/mesecons_torch/textures/redstone_redstone_block.png deleted file mode 100644 index 465de2b8cd..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_torch/textures/redstone_redstone_block.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/README.txt b/mods/ITEMS/REDSTONE/mesecons_walllever/README.txt deleted file mode 100644 index 8744b5646c..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/README.txt +++ /dev/null @@ -1,11 +0,0 @@ -This mod adds levers. - -# Credits -## Mesh -Lever meshes created by Gerold55. - -## Code -Jeija and Wuzzy. - -## Textures -(See main README file of MineClone 2). diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/init.lua b/mods/ITEMS/REDSTONE/mesecons_walllever/init.lua deleted file mode 100644 index c251587d5f..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/init.lua +++ /dev/null @@ -1,178 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local lever_get_output_rules = mesecon.rules.buttonlike_get - -local function on_rotate(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - if node.param2 == 10 then - node.param2 = 13 - minetest.swap_node(pos, node) - return true - elseif node.param2 == 13 then - node.param2 = 10 - minetest.swap_node(pos, node) - return true - elseif node.param2 == 8 then - node.param2 = 15 - minetest.swap_node(pos, node) - return true - elseif node.param2 == 15 then - node.param2 = 8 - minetest.swap_node(pos, node) - return true - end - end - -- TODO: Rotate axis - return false -end - --- LEVER -minetest.register_node("mesecons_walllever:wall_lever_off", { - drawtype = "mesh", - tiles = { - "jeija_wall_lever_lever_light_on.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - inventory_image = "jeija_wall_lever.png", - wield_image = "jeija_wall_lever.png", - paramtype = "light", - paramtype2 = "facedir", - mesh = "jeija_wall_lever_off.obj", - sunlight_propagates = true, - walkable = false, - selection_box = { - type = "fixed", - fixed = { -3/16, -4/16, 2/16, 3/16, 4/16, 8/16 }, - }, - groups = {handy=1, dig_by_water=1, destroy_by_lava_flow=1, dig_by_piston=1, attached_node_facedir=1}, - is_ground_content = false, - description=S("Lever"), - _tt_help = S("Provides redstone power while it's turned on"), - _doc_items_longdesc = S("A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state."), - _doc_items_usagehelp = S("Use the lever to flip it on or off."), - on_rightclick = function(pos, node) - minetest.swap_node(pos, {name="mesecons_walllever:wall_lever_on", param2=node.param2}) - mesecon.receptor_on(pos, lever_get_output_rules(node)) - minetest.sound_play("mesecons_button_push", {pos=pos, max_hear_distance=16}, true) - end, - node_placement_prediction = "", - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities - return itemstack - end - - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then return end - local groups = def.groups - - -- Check special rightclick action of pointed node - if def and def.on_rightclick then - if not placer:get_player_control().sneak then - return def.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack, false - end - end - - -- If the pointed node is buildable, let's look at the node *behind* that node - if def.buildable_to then - local dir = vector.subtract(pointed_thing.above, pointed_thing.under) - local actual = vector.subtract(under, dir) - local actualnode = minetest.get_node(actual) - def = minetest.registered_nodes[actualnode.name] - groups = def.groups - end - - -- Only allow placement on full-cube solid opaque nodes - if (not groups) or (not groups.solid) or (not groups.opaque) or (def.node_box and def.node_box.type ~= "regular") then - return itemstack - end - - local above = pointed_thing.above - local dir = vector.subtract(under, above) - local tau = math.pi*2 - local wdir = minetest.dir_to_facedir(dir, true) - if dir.y ~= 0 then - local yaw = placer:get_look_horizontal() - if (yaw > tau/8 and yaw < (tau/8)*3) or (yaw < (tau/8)*7 and yaw > (tau/8)*5) then - if dir.y == -1 then - wdir = 13 - else - wdir = 15 - end - else - if dir.y == -1 then - wdir = 10 - else - wdir = 8 - end - end - end - - local idef = itemstack:get_definition() - local itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing, wdir) - - if success then - if idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=above, gain=1}, true) - end - end - return itemstack - end, - - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = {receptor = { - rules = lever_get_output_rules, - state = mesecon.state.off - }}, - on_rotate = on_rotate, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) -minetest.register_node("mesecons_walllever:wall_lever_on", { - drawtype = "mesh", - tiles = { - "jeija_wall_lever_lever_light_on.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "facedir", - mesh = "jeija_wall_lever_on.obj", - sunlight_propagates = true, - walkable = false, - selection_box = { - type = "fixed", - fixed = { -3/16, -4/16, 2/16, 3/16, 4/16, 8/16 }, - }, - groups = {handy=1, not_in_creative_inventory = 1, dig_by_water=1, destroy_by_lava_flow=1, dig_by_piston=1, attached_node_facedir=1}, - is_ground_content = false, - drop = "mesecons_walllever:wall_lever_off", - _doc_items_create_entry = false, - on_rightclick = function(pos, node) - minetest.swap_node(pos, {name="mesecons_walllever:wall_lever_off", param2=node.param2}) - mesecon.receptor_off(pos, lever_get_output_rules(node)) - minetest.sound_play("mesecons_button_push", {pos=pos, max_hear_distance=16, pitch=0.9}, true) - end, - sounds = mcl_sounds.node_sound_stone_defaults(), - mesecons = {receptor = { - rules = lever_get_output_rules, - state = mesecon.state.on - }}, - on_rotate = on_rotate, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -minetest.register_craft({ - output = "mesecons_walllever:wall_lever_off", - recipe = { - {"mcl_core:stick"}, - {"mcl_core:cobble"}, - } -}) - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mesecons_walllever:wall_lever_off", "nodes", "mesecons_walllever:wall_lever_on") -end diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.de.tr b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.de.tr deleted file mode 100644 index 27a3bb55f6..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mesecons_wallever -Lever=Hebel -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.=Ein Hebel ist eine Redstonekomponente, die ein- und ausgeschaltet werden kann. Er versorgt seine benachbarten Blöcke mit Redstoneenergie, solange er sich im eingeschalteten Zustand befindet. -Use the lever to flip it on or off.=Benutzen Sie den Hebel, um ihn ein- oder auszuschalten. -Provides redstone power while it's turned on=Gibt Redstoneenergie aus, während er eingeschaltet ist diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.es.tr b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.es.tr deleted file mode 100644 index e0e55298e1..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mesecons_wallever -Lever=Palanca -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.=EUna palanca es un componente de redstone que se puede activar y desactivar. Suministra energía redstone a bloques adyacentes mientras está en el estado "encendido". -Use the lever to flip it on or off.=Use la palanca para encenderlo o apagarlo. diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.fr.tr b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.fr.tr deleted file mode 100644 index 3d5d23c819..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mesecons_wallever -Lever=Levier -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.=Un levier est un composant de redstone qui peut être activé et désactivé. Il fournit de l'énergie redstone aux blocs adjacents pendant qu'il est à l'état "activé". -Use the lever to flip it on or off.=Utilisez le levier pour l'activer ou le désactiver. -Provides redstone power while it's turned on=Fournit une puissance de redstone lorsqu'il est activé diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.pl.tr b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.pl.tr deleted file mode 100644 index 924fe3dd08..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mesecons_wallever -Lever=Dźwignia -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.=Dźwignia jest czerwienitowym elementem, który można przełączać między stanem włączonym i wyłączonym. Wysyła ona czerwienitową energię gdy jest w stanie włączonym. -Use the lever to flip it on or off.=Użyj dźwigni by przełączyć ją między stanami. -Provides redstone power while it's turned on=Dostarcza energii czerwienitowej gdy jest włączona diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.ru.tr b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.ru.tr deleted file mode 100644 index 6ed05b3870..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mesecons_wallever -Lever=Рычаг -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.=Рычаг это компонент редстоуна, который можно включать и выключать. Он подаёт энергию редстоуна на соседние блоки, пока он находится во «включённом» состоянии. -Use the lever to flip it on or off.=[Используйте] рычаг, чтобы перещёлкнуть его во включённое или выключенное положение . -Provides redstone power while it's turned on=Снабжает энергией редстоуна, когда включён diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_walllever/locale/template.txt deleted file mode 100644 index 0187e6d281..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mesecons_wallever -Lever= -A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state.= -Use the lever to flip it on or off.= -Provides redstone power while it's turned on= diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/mod.conf b/mods/ITEMS/REDSTONE/mesecons_walllever/mod.conf deleted file mode 100644 index 8512e9d6b6..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_walllever -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_lever_light_on.png b/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_lever_light_on.png deleted file mode 100644 index 9f8af946d0..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_lever_light_on.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_off.obj b/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_off.obj deleted file mode 100644 index c5044de1c1..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_off.obj +++ /dev/null @@ -1,88 +0,0 @@ -# Blender v2.79 (sub 0) OBJ File: '' -# www.blender.org -mtllib jeija_wall_lever_off.mtl -o nodebox1.009 -v -0.070437 0.138562 0.459573 -v -0.070383 0.058650 0.407149 -v -0.070618 0.289563 0.117785 -v -0.070672 0.369475 0.170211 -v 0.054549 0.139792 0.459559 -v 0.054604 0.059883 0.407135 -v 0.054369 0.290797 0.117772 -v 0.054313 0.370707 0.170196 -vt 0.062500 0.562500 -vt 0.062500 0.875000 -vt 0.125000 0.875000 -vt 0.125000 0.562500 -vt 0.187500 0.562500 -vt 0.250000 0.562500 -vt 0.250000 0.875000 -vt 0.187500 0.875000 -vt 0.125000 0.562500 -vt 0.062500 0.562500 -vt 0.062500 0.875000 -vt 0.125000 0.875000 -vt 0.250000 0.562500 -vt 0.250000 0.875000 -vt 0.187500 0.875000 -vt 0.187500 0.562500 -vt 0.625000 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.937500 -vt 0.625000 0.937500 -vn -1.0000 -0.0008 0.0002 -vn 1.0000 0.0008 -0.0002 -vn -0.0076 0.7816 0.6237 -vn 0.0076 -0.7816 -0.6237 -vn -0.0055 0.5485 -0.8361 -usemtl none.009 -s off -f 1/1/1 4/2/1 3/3/1 2/4/1 -f 5/5/2 6/6/2 7/7/2 8/8/2 -f 1/9/3 5/10/3 8/11/3 4/12/3 -f 2/13/4 3/14/4 7/15/4 6/16/4 -f 4/17/5 8/18/5 7/19/5 3/20/5 -o nodebox1.008 -v -0.170183 0.248882 0.492124 -v -0.161792 -0.249536 0.496140 -v -0.161781 -0.250523 0.373114 -v -0.170172 0.247894 0.369098 -v 0.161753 0.245254 0.492135 -v 0.170145 -0.253163 0.496151 -v 0.170155 -0.254151 0.373125 -v 0.161764 0.244266 0.369109 -vt 0.500000 0.203100 -vt 0.500000 0.000000 -vt 0.000000 0.000000 -vt 0.000000 0.203100 -vt 0.500000 0.203100 -vt 0.000000 0.203100 -vt 0.000000 0.000000 -vt 0.500000 0.000000 -vt 0.000000 0.203100 -vt 0.000100 0.000100 -vt 0.500000 0.000000 -vt 0.500000 0.203100 -vt 0.000000 0.203100 -vt 0.000000 -0.000000 -vt 0.000000 0.500000 -vt 0.000000 0.000000 -vt 0.500000 -0.000000 -vt 0.500000 0.500000 -vt -0.000000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 -0.000000 -vn -0.9999 -0.0168 0.0000 -vn 0.9999 0.0168 -0.0000 -vn 0.0109 0.9999 -0.0080 -vn -0.0109 -0.9999 0.0080 -vn 0.0001 0.0081 1.0000 -vn -0.0001 -0.0081 -1.0000 -usemtl none.008 -s off -f 9/21/6 12/22/6 11/23/6 10/24/6 -f 13/25/7 14/26/7 15/27/7 16/28/7 -f 9/29/8 13/25/8 16/28/8 12/30/8 -f 10/31/9 11/32/9 15/33/9 14/34/9 -f 9/35/10 10/36/10 14/37/10 13/38/10 -f 12/39/11 16/40/11 15/41/11 11/23/11 diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_on.obj b/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_on.obj deleted file mode 100644 index 5de8075ba1..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_walllever/models/jeija_wall_lever_on.obj +++ /dev/null @@ -1,88 +0,0 @@ -# Blender v2.79 (sub 0) OBJ File: '' -# www.blender.org -mtllib jeija_wall_lever_on.mtl -o nodebox1.011 -v -0.170183 0.248540 0.492297 -v -0.161792 -0.249880 0.495967 -v -0.161781 -0.250782 0.372940 -v -0.170172 0.247638 0.369270 -v 0.161753 0.244912 0.492305 -v 0.170145 -0.253508 0.495975 -v 0.170155 -0.254410 0.372949 -v 0.161764 0.244010 0.369279 -vt 0.500000 0.203100 -vt 0.500000 0.000000 -vt 0.000000 0.000000 -vt 0.000000 0.203100 -vt 0.500000 0.203100 -vt 0.000000 0.203100 -vt 0.000000 0.000000 -vt 0.500000 0.000000 -vt 0.000000 0.203100 -vt 0.000100 0.000100 -vt 0.500000 0.000000 -vt 0.500000 0.203100 -vt 0.000000 0.203100 -vt 0.000000 -0.000000 -vt 0.000000 0.500000 -vt 0.000000 0.000000 -vt 0.500000 -0.000000 -vt 0.500000 0.500000 -vt -0.000000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 -0.000000 -vn -0.9999 -0.0168 0.0000 -vn 0.9999 0.0168 -0.0000 -vn 0.0109 0.9999 -0.0073 -vn -0.0109 -0.9999 0.0073 -vn 0.0001 0.0074 1.0000 -vn -0.0001 -0.0074 -1.0000 -usemtl none.011 -s off -f 1/1/1 4/2/1 3/3/1 2/4/1 -f 5/5/2 6/6/2 7/7/2 8/8/2 -f 1/9/3 5/5/3 8/8/3 4/10/3 -f 2/11/4 3/12/4 7/13/4 6/14/4 -f 1/15/5 2/16/5 6/17/5 5/18/5 -f 4/19/6 8/20/6 7/21/6 3/3/6 -o nodebox1.010 -v 0.070437 -0.138656 0.459545 -v 0.070383 -0.058733 0.407137 -v -0.054604 -0.059966 0.407123 -v -0.054549 -0.139886 0.459530 -v 0.070618 -0.289587 0.117726 -v 0.070672 -0.369510 0.170135 -v -0.054369 -0.290821 0.117712 -v -0.054313 -0.370742 0.170120 -vt 0.062500 0.562500 -vt 0.062500 0.875000 -vt 0.125000 0.875000 -vt 0.125000 0.562500 -vt 0.187500 0.562500 -vt 0.250000 0.562500 -vt 0.250000 0.875000 -vt 0.187500 0.875000 -vt 0.125000 0.562500 -vt 0.062500 0.562500 -vt 0.062500 0.875000 -vt 0.125000 0.875000 -vt 0.250000 0.562500 -vt 0.250000 0.875000 -vt 0.187500 0.875000 -vt 0.187500 0.562500 -vt 0.625000 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.937500 -vt 0.625000 0.937500 -vn 1.0000 0.0008 0.0002 -vn -1.0000 -0.0008 -0.0002 -vn 0.0076 -0.7817 0.6236 -vn -0.0076 0.7817 -0.6236 -vn 0.0055 -0.5484 -0.8362 -usemtl none.010 -s off -f 9/22/7 14/23/7 13/24/7 10/25/7 -f 12/26/8 11/27/8 15/28/8 16/29/8 -f 9/30/9 12/31/9 16/32/9 14/33/9 -f 10/34/10 13/35/10 15/36/10 11/37/10 -f 14/38/11 16/39/11 15/40/11 13/41/11 diff --git a/mods/ITEMS/REDSTONE/mesecons_walllever/textures/jeija_wall_lever.png b/mods/ITEMS/REDSTONE/mesecons_walllever/textures/jeija_wall_lever.png deleted file mode 100644 index 5774607cf9..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_walllever/textures/jeija_wall_lever.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/init.lua b/mods/ITEMS/REDSTONE/mesecons_wires/init.lua deleted file mode 100644 index 0f2febc44d..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/init.lua +++ /dev/null @@ -1,299 +0,0 @@ --- naming scheme: wire:(xp)(zp)(xm)(zm)(xpyp)(zpyp)(xmyp)(zmyp)_on/off --- where x= x direction, z= z direction, y= y direction, p = +1, m = -1, e.g. xpym = {x=1, y=-1, z=0} --- The (xp)/(zpyp)/.. statements shall be replaced by either 0 or 1 --- Where 0 means the wire has no visual connection to that direction and --- 1 means that the wire visually connects to that other node. - -local S = minetest.get_translator(minetest.get_current_modname()) - --- ####################### --- ## Update wire looks ## --- ####################### - -local wire_rules = -{{x=-1, y= 0, z= 0, spread=true}, - {x= 1, y= 0, z= 0, spread=true}, - {x= 0, y=-1, z= 0, spread=true}, - {x= 0, y= 1, z= 0, spread=true}, - {x= 0, y= 0, z=-1, spread=true}, - {x= 0, y= 0, z= 1, spread=true}, - - {x= 1, y= 1, z= 0}, - {x= 1, y=-1, z= 0}, - {x=-1, y= 1, z= 0}, - {x=-1, y=-1, z= 0}, - {x= 0, y= 1, z= 1}, - {x= 0, y=-1, z= 1}, - {x= 0, y= 1, z=-1}, - {x= 0, y=-1, z=-1}} - --- self_pos = pos of any mesecon node, from_pos = pos of conductor to getconnect for -local function wire_getconnect(from_pos, self_pos) - local node = minetest.get_node(self_pos) - if minetest.registered_nodes[node.name] - and minetest.registered_nodes[node.name].mesecons then - -- rules of node to possibly connect to - local rules - if (minetest.registered_nodes[node.name].mesecon_wire) then - rules = wire_rules - else - rules = mesecon.get_any_rules(node) - end - - for _, r in ipairs(mesecon.flattenrules(rules)) do - if (vector.equals(vector.add(self_pos, r), from_pos)) then - return true - end - end - end - return false -end - --- Update this node -local function wire_updateconnect(pos) - local connections = {} - - for _, r in ipairs(wire_rules) do - if wire_getconnect(pos, vector.add(pos, r)) then - table.insert(connections, r) - end - end - - local nid = {} - for _, vec in ipairs(connections) do - -- flat component - if vec.x == 1 then nid[0] = "1" end - if vec.z == 1 then nid[1] = "1" end - if vec.x == -1 then nid[2] = "1" end - if vec.z == -1 then nid[3] = "1" end - - -- slopy component - if vec.y == 1 then - if vec.x == 1 then nid[4] = "1" end - if vec.z == 1 then nid[5] = "1" end - if vec.x == -1 then nid[6] = "1" end - if vec.z == -1 then nid[7] = "1" end - end - end - - local nodeid = (nid[0] or "0")..(nid[1] or "0")..(nid[2] or "0")..(nid[3] or "0") - ..(nid[4] or "0")..(nid[5] or "0")..(nid[6] or "0")..(nid[7] or "0") - - local state_suffix = string.find(minetest.get_node(pos).name, "_off") and "_off" or "_on" - minetest.set_node(pos, {name = "mesecons:wire_"..nodeid..state_suffix}) -end - -local function update_on_place_dig(pos, node) - -- Update placed node (get_node again as it may have been dug) - local nn = minetest.get_node(pos) - if (minetest.registered_nodes[nn.name]) - and (minetest.registered_nodes[nn.name].mesecon_wire) then - wire_updateconnect(pos) - end - - -- Update nodes around it - local rules - if minetest.registered_nodes[node.name] - and minetest.registered_nodes[node.name].mesecon_wire then - rules = wire_rules - else - rules = mesecon.get_any_rules(node) - end - if (not rules) then return end - - for _, r in ipairs(mesecon.flattenrules(rules)) do - local np = vector.add(pos, r) - if minetest.registered_nodes[minetest.get_node(np).name] - and minetest.registered_nodes[minetest.get_node(np).name].mesecon_wire then - wire_updateconnect(np) - end - end -end - -mesecon.register_autoconnect_hook("wire", update_on_place_dig) - --- ############################ --- ## Wire node registration ## --- ############################ --- Nodeboxes: -local box_center = {-1/16, -.5, -1/16, 1/16, -.5+1/64, 1/16} -local box_bump1 = { -2/16, -8/16, -2/16, 2/16, -.5+1/64, 2/16 } - -local nbox_nid = -{ - [0] = {1/16, -.5, -1/16, 8/16, -.5+1/64, 1/16}, -- x positive - [1] = {-1/16, -.5, 1/16, 1/16, -.5+1/64, 8/16}, -- z positive - [2] = {-8/16, -.5, -1/16, -1/16, -.5+1/64, 1/16}, -- x negative - [3] = {-1/16, -.5, -8/16, 1/16, -.5+1/64, -1/16}, -- z negative - - [4] = {.5-1/16, -.5+1/16, -1/16, .5, .4999+1/64, 1/16}, -- x positive up - [5] = {-1/16, -.5+1/16, .5-1/16, 1/16, .4999+1/64, .5}, -- z positive up - [6] = {-.5, -.5+1/16, -1/16, -.5+1/16, .4999+1/64, 1/16}, -- x negative up - [7] = {-1/16, -.5+1/16, -.5, 1/16, .4999+1/64, -.5+1/16} -- z negative up -} - -local selectionbox = -{ - type = "fixed", - fixed = {-.5, -.5, -.5, .5, -.5+1/16, .5} -} - --- go to the next nodeid (ex.: 01000011 --> 01000100) -local function nid_inc() end -function nid_inc(nid) - local i = 0 - while nid[i-1] ~= 1 do - nid[i] = (nid[i] ~= 1) and 1 or 0 - i = i + 1 - end - - -- BUT: Skip impossible nodeids: - if ((nid[0] == 0 and nid[4] == 1) or (nid[1] == 0 and nid[5] == 1) - or (nid[2] == 0 and nid[6] == 1) or (nid[3] == 0 and nid[7] == 1)) then - return nid_inc(nid) - end - - return i <= 8 -end - -local function register_wires() - local nid = {} - while true do - -- Create group specifiction and nodeid string (see note above for details) - local nodeid = (nid[0] or "0")..(nid[1] or "0")..(nid[2] or "0")..(nid[3] or "0") - ..(nid[4] or "0")..(nid[5] or "0")..(nid[6] or "0")..(nid[7] or "0") - - -- Calculate nodebox - local nodebox = {type = "fixed", fixed={box_center}} - for i=0,7 do - if nid[i] == 1 then - table.insert(nodebox.fixed, nbox_nid[i]) - end - end - - -- Add bump to nodebox if curved - if (nid[0] == 1 and nid[1] == 1) or (nid[1] == 1 and nid[2] == 1) - or (nid[2] == 1 and nid[3] == 1) or (nid[3] == 1 and nid[0] == 1) then - table.insert(nodebox.fixed, box_bump1) - end - - -- If nothing to connect to, still make a nodebox of a straight wire - if nodeid == "00000000" then - nodebox.fixed = {-8/16, -.5, -1/16, 8/16, -.5+1/16, 1/16} - end - - local meseconspec_off = { conductor = { - rules = wire_rules, - state = mesecon.state.off, - onstate = "mesecons:wire_"..nodeid.."_on" - }} - - local meseconspec_on = { conductor = { - rules = wire_rules, - state = mesecon.state.on, - offstate = "mesecons:wire_"..nodeid.."_off" - }} - - local groups_on = {dig_immediate = 3, mesecon_conductor_craftable = 1, - not_in_creative_inventory = 1, attached_node = 1, dig_by_water = 1,destroy_by_lava_flow=1, dig_by_piston = 1} - local groups_off = {dig_immediate = 3, mesecon_conductor_craftable = 1, - attached_node = 1, dig_by_water = 1,destroy_by_lava_flow=1, dig_by_piston = 1, craftitem = 1} - if nodeid ~= "00000000" then - groups_off["not_in_creative_inventory"] = 1 - end - - -- Wire textures - local ratio_off = 128 - local ratio_on = 192 - local crossing_off = "(redstone_redstone_dust_dot.png^redstone_redstone_dust_line0.png^(redstone_redstone_dust_line1.png^[transformR90))^[colorize:#FF0000:"..ratio_off - local crossing_on = "(redstone_redstone_dust_dot.png^redstone_redstone_dust_line0.png^(redstone_redstone_dust_line1.png^[transformR90))^[colorize:#FF0000:"..ratio_on - local straight0_off = "redstone_redstone_dust_line0.png^[colorize:#FF0000:"..ratio_off - local straight0_on = "redstone_redstone_dust_line0.png^[colorize:#FF0000:"..ratio_on - local straight1_off = "redstone_redstone_dust_line0.png^[colorize:#FF0000:"..ratio_off - local straight1_on = "redstone_redstone_dust_line0.png^[colorize:#FF0000:"..ratio_on - local dot_off = "redstone_redstone_dust_dot.png^[colorize:#FF0000:"..ratio_off - local dot_on = "redstone_redstone_dust_dot.png^[colorize:#FF0000:"..ratio_on - - local tiles_off, tiles_on - - local wirehelp, tt, longdesc, usagehelp, img, desc_off, desc_on - if nodeid == "00000000" then - -- Non-connected redstone wire - nodebox.fixed = {-8/16, -.5, -8/16, 8/16, -.5+1/64, 8/16} - -- “Dot” texture - tiles_off = { dot_off, dot_off, "blank.png", "blank.png", "blank.png", "blank.png" } - tiles_on = { dot_on, dot_on, "blank.png", "blank.png", "blank.png", "blank.png" } - - tt = S("Transmits redstone power, powers mechanisms") - longdesc = S("Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.").."\n".. -S("A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.").."\n".. -S("Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.") - usagehelp = S("Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills.").."\n\n".. - -S("Read the help entries on the other redstone components to learn how redstone components interact.") - img = "redstone_redstone_dust.png" - desc_off = S("Redstone") - desc_on = S("Powered Redstone Spot (@1)", nodeid) - else - -- Connected redstone wire - table.insert(nodebox, box_center) - tiles_off = { crossing_off, crossing_off, straight0_off, straight1_off, straight0_off, straight1_off } - tiles_on = { crossing_on, crossing_on, straight0_on, straight1_on, straight0_on, straight1_on } - wirehelp = false - desc_off = S("Redstone Trail (@1)", nodeid) - desc_on = S("Powered Redstone Trail (@1)", nodeid) - end - - mesecon.register_node(":mesecons:wire_"..nodeid, { - drawtype = "nodebox", - paramtype = "light", - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - sunlight_propagates = true, - selection_box = selectionbox, - node_box = nodebox, - walkable = false, - drop = "mesecons:wire_00000000_off", - sounds = mcl_sounds.node_sound_defaults(), - is_ground_content = false, - mesecon_wire = true - },{ - description = desc_off, - inventory_image = img, - wield_image = img, - _tt_help = tt, - _doc_items_create_entry = wirehelp, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - tiles = tiles_off, - mesecons = meseconspec_off, - groups = groups_off, - },{ - description = desc_on, - _doc_items_create_entry = false, - tiles = tiles_on, - mesecons = meseconspec_on, - groups = groups_on - }) - - -- Add Help entry aliases for e.g. making it identifiable by the lookup tool [doc_identifier] - if minetest.get_modpath("doc") then - if nodeid ~= "00000000" then - doc.add_entry_alias("nodes", "mesecons:wire_00000000_off", "nodes", "mesecons:wire_"..nodeid.."_off") - end - doc.add_entry_alias("nodes", "mesecons:wire_00000000_off", "nodes", "mesecons:wire_"..nodeid.."_on") - end - - if (nid_inc(nid) == false) then return end - end -end -register_wires() - -minetest.register_alias("mesecons:redstone", "mesecons:wire_00000000_off") - -minetest.register_craft({ - type = "cooking", - output = "mesecons:redstone", - recipe = "mcl_core:stone_with_redstone", - cooktime = 10, -}) - diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.de.tr b/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.de.tr deleted file mode 100644 index d6d82e8e6b..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.de.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.=Redstone ist ein vielseitiges leitendes Mineral, der Redstoneenergie überträgt. Es kann auf dem Boden in Form einer Spur platziert werden. -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.=Eine Redstonespur kann einen von zwei Zuständen annehmen: Bestromt und unbestromt. Eine bestromte Redstonespur wird benachbarte Redstonekomponenten bestromen (und somit aktivieren). -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.=Redstoneenergie kann von verschiedenen Redstonekomponenten erhalten werden, wie zum Beispiel einem Redstoneblock oder einem Knopf. Redstoneenergie wird benutzt, um verschiedene Mechanismen zu aktivieren, wie Redstonelampen oder Kolben. -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills.=Platzieren Sie Redstone auf dem Boden, um eine Redstonespur auszulegen. Die Spuren werden sich automatisch miteinander verbinden und sie können auch über Hügel gehen. -Read the help entries on the other redstone components to learn how redstone components interact.=Lesen Sie die Hilfeeinträge über andere Redstonekomponenten, um zu erfahren, wie sie interagieren. -Redstone=Redstone -Powered Redstone Spot (@1)=Bestromter Redstoneklecks (@1) -Redstone Trail (@1)=Redstonespur (@1) -Powered Redstone Trail (@1)=Bestromte Redstonespur (@1) -Transmits redstone power, powers mechanisms=Überträgt Redstoneenergie, bestromt Mechanismen diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.es.tr b/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.es.tr deleted file mode 100644 index beac84517a..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.=Redstone es un mineral conductor versátil que transmite el poder de redstone. Se puede colocar en el suelo como un sendero. -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.=Un sendero de redstone puede estar en dos estados: alimentado o no alimentado. Un rastro de redstone alimentado alimentará (y por lo tanto activará) los componentes adyacentes de redstone. -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.=El poder de Redstone se puede recibir de varios componentes de redstone, como un bloque de redstone o un botón. El poder de Redstone se utiliza para activar numerosos mecanismos, como las lámparas de redstone o los pistones. -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills.=Coloque redstone en el suelo para construir un sendero de redstone. Los senderos se conectarán entre sí de forma automática y también pueden pasar por colinas. -Read the help entries on the other redstone components to learn how redstone components interact.=Lea las entradas de ayuda en los otros componentes de redstone para aprender cómo interactúan los componentes de redstone. -Redstone=Redstone -Powered Redstone Spot (@1)=Punto de Redstone accionado (@1) -Redstone Trail (@1)=Sendero de Redstone (@1) -Powered Redstone Trail (@1)=Sendero de Redstone con motorizado (@1) diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.fr.tr b/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.fr.tr deleted file mode 100644 index 66a4230f57..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.fr.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.=Redstone est un minéral conducteur polyvalent qui transmet la puissance de redstone. Il peut être placé au sol comme un sentier. -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.=Un sentier de redstone peut être dans deux états: alimenté ou non alimenté. Un sentier Redstone alimenté alimentera (et activera donc) les composants Redstone adjacents. -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.=L'alimentation Redstone peut être reçue de divers composants Redstone, tels qu'un bloc de Redstone ou un bouton. La puissance Redstone est utilisée pour activer de nombreux mécanismes, tels que les lampes ou les pistons Redstone. -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills. An easy way to power a redstone trail is by placing a redstone torch.=Placez du redstone sur le sol pour construire un sentier de redstone. Les sentiers se connecteront automatiquement et pourront également traverser des collines. Un moyen facile d'alimenter une piste de redstone est de placer une torche de redstone. -Read the help entries on the other redstone components to learn how redstone components interact.=Lisez les entrées d'aide sur les autres composants Redstone pour savoir comment les composants Redstone interagissent. -Redstone=Redstone -Powered Redstone Spot (@1)=Spot Redstone alimenté (@1) -Redstone Trail (@1)=Sentier Redstone (@1) -Powered Redstone Trail (@1)=Sentier Redstone alimenté (@1) -Transmits redstone power, powers mechanisms=Transmet la puissance redstone, alimente les mécanismes diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.pl.tr b/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.pl.tr deleted file mode 100644 index bdc7176491..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.pl.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.=Czerwienit jest wszechstronnym przewodzącym minerałem, który przewodzi energię czerwienitową. Może być położony na ziemi tworząc ścieżkę. -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.=Ścieżka czerwienitu może być w dwóch stanach: Zasilonym lub Nie zasilonym. Zasilona ścieżka będzie zasilać (a więc również aktywować) sąsiadujące mechanizmy czerwienitowe. -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.=Energia czerwienitowa może być uzyskana z różnych mechanizmów czerwienitowych, takich jak blok czerwienitu czy przycisk. Energia czerwienitowa może być wykorzystywana do aktywowania różnych mechanizmów takich jak czerwienitowe lampy lub tłoki. -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills. An easy way to power a redstone trail is by placing a redstone torch.=Połóż czerwienit na ziemi aby stworzyć ścieżkę czerwienitu. Ścieżki połączą się ze sobą automatycznie, nawet jeśli istnieje różnica wysokości. Łatwym sposobem na zasilenie ścieżki czerwienitu jest postawienie czerwienitowej pochodni. -Read the help entries on the other redstone components to learn how redstone components interact.=Przeczytaj wpisy na temat innych czerwienitowych mechanizmów, by dowiedzieć się jak wchodzą ze sobą w interakcję. -Redstone=Czerwienit -Powered Redstone Spot (@1)=Zasilony punkt czerwienitu (@1) -Redstone Trail (@1)=Ścieżka czerwienitu (@1) -Powered Redstone Trail (@1)=Zasilona ścieżka czerwienitu (@1) -Transmits redstone power, powers mechanisms=Przekazuje energię czerwienitową, zasila mechanizmy diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.ru.tr b/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.ru.tr deleted file mode 100644 index 4316613b09..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.ru.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.=Редстоун является универсальным проводящим минералом, который передает энергию красного камня. Он может размещаться на поверхности как дорожка. -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.=Дорожка редстоуна может быть в двух состояниях: включена или выключена. Включённая дорожка редстоуна будет снабжать (а значит, активировать) смежные компоненты редстоуна. -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.=Энергию редстоуна можно получать от различных компонентов редстоуна, таких как блок редстоуна или кнопка. Эта энергия используется для активации многочисленных механизмов, таких как лампы редстоуна или поршни. -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills. An easy way to power a redstone trail is by placing a redstone torch.=Поместите редстоун на землю, чтобы создать из него дорожку. Фрагменты дорожек будут соединяться между собой автоматически и могут даже проходить по холмам. Простой способ подать энергию редстоуна к дорожке редстоуна это установка факела редстоуна. -Read the help entries on the other redstone components to learn how redstone components interact.=Смотрите справочные записи к остальным компонентам редстоуна, чтобы узнать больше об их взаимодействии. -Redstone=Редстоун -Powered Redstone Spot (@1)=Подключённое пятно редстоуна (@1) -Redstone Trail (@1)=Дорожка редстоуна (@1) -Powered Redstone Trail (@1)=Подключённая дорожка редстоуна (@1) -Transmits redstone power, powers mechanisms=Передаёт энергию редстоуна, подключает механизмы diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/locale/template.txt b/mods/ITEMS/REDSTONE/mesecons_wires/locale/template.txt deleted file mode 100644 index 91e6bdee60..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/locale/template.txt +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mesecons_wires -Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.= -A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.= -Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.= -Place redstone on the ground to build a redstone trail. The trails will connect to each other automatically and it can also go over hills. An easy way to power a redstone trail is by placing a redstone torch.= -Read the help entries on the other redstone components to learn how redstone components interact.= -Redstone= -Powered Redstone Spot (@1)= -Redstone Trail (@1)= -Powered Redstone Trail (@1)= -Transmits redstone power, powers mechanisms= diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/mod.conf b/mods/ITEMS/REDSTONE/mesecons_wires/mod.conf deleted file mode 100644 index 15f2e0d327..0000000000 --- a/mods/ITEMS/REDSTONE/mesecons_wires/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mesecons_wires -depends = mesecons -optional_depends = doc diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust.png b/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust.png deleted file mode 100644 index 30c42e4556..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_dot.png b/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_dot.png deleted file mode 100644 index d2e433833c..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_dot.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line0.png b/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line0.png deleted file mode 100644 index 3219df3c4b..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line0.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line1.png b/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line1.png deleted file mode 100644 index 61ebb2c82d..0000000000 Binary files a/mods/ITEMS/REDSTONE/mesecons_wires/textures/redstone_redstone_dust_line1.png and /dev/null differ diff --git a/mods/ITEMS/REDSTONE/modpack.conf b/mods/ITEMS/REDSTONE/modpack.conf deleted file mode 100644 index 245aa906e5..0000000000 --- a/mods/ITEMS/REDSTONE/modpack.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = REDSTONE -description = Redstone modpack, adds redstone and various interactive mechanims to build complex electronic machinery diff --git a/mods/ITEMS/mcl_amethyst/grow.lua b/mods/ITEMS/mcl_amethyst/grow.lua deleted file mode 100644 index f1a23d9b74..0000000000 --- a/mods/ITEMS/mcl_amethyst/grow.lua +++ /dev/null @@ -1,52 +0,0 @@ -local interval = 10 -local chance = 5 - -local function grow(pos, node) - local def = minetest.registered_nodes[node.name] - local next_gen = def._mcl_amethyst_next_grade - if not next_gen then return end - - local dir = minetest.wallmounted_to_dir(node.param2) - local ba_pos = vector.add(pos, dir) - local ba_node = minetest.get_node(ba_pos) - if ba_node.name ~= "mcl_amethyst:budding_amethyst_block" then return end - - local swap_result = table.copy(node) - swap_result.name = next_gen - minetest.swap_node(pos, swap_result) -end - -minetest.register_abm({ - label = "Amethyst Bud Growth", - nodenames = {"group:amethyst_buds"}, - neighbors = {"mcl_amethyst:budding_amethyst_block"}, - interval = interval, - chance = chance, - action = grow, -}) - -local all_directions = { - vector.new(1, 0, 0), - vector.new(0, 1, 0), - vector.new(0, 0, 1), - vector.new(-1, 0, 0), - vector.new(0, -1, 0), - vector.new(0, 0, -1), -} - -minetest.register_abm({ - label = "Spawn Amethyst Bud", - nodenames = {"mcl_amethyst:budding_amethyst_block"}, - neighbors = {"air", "group:water"}, - interval = 20, - chance = 2, - action = function(pos) - local check_pos = vector.add(all_directions[math.random(1, #all_directions)], pos) - local check_node = minetest.get_node(check_pos) - local check_node_name = check_node.name - if check_node_name ~= "air" and minetest.get_item_group(check_node_name, "water") == 0 then return end - local param2 = minetest.dir_to_wallmounted(vector.subtract(pos, check_pos)) - local new_node = {name = "mcl_amethyst:small_amethyst_bud", param2 = param2} - minetest.swap_node(check_pos, new_node) - end, -}) diff --git a/mods/ITEMS/mcl_amethyst/init.lua b/mods/ITEMS/mcl_amethyst/init.lua deleted file mode 100644 index 0ee78de416..0000000000 --- a/mods/ITEMS/mcl_amethyst/init.lua +++ /dev/null @@ -1,220 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local sounds = mcl_sounds.node_sound_glass_defaults({ - footstep = {name = "mcl_amethyst_amethyst_walk", gain = 0.4}, - dug = {name = "mcl_amethyst_amethyst_break", gain = 0.44}, -}) - --- Amethyst block -minetest.register_node("mcl_amethyst:amethyst_block",{ - description = S("Block of Amethyst"), - _doc_items_longdesc = S("The Block of Amethyst is a decoration block crafted from amethyst shards."), - tiles = {"mcl_amethyst_amethyst_block.png"}, - groups = {pickaxey = 1, building_block = 1}, - sounds = sounds, - is_ground_content = true, - _mcl_hardness = 1.5, - _mcl_blast_resistance = 1.5, -}) - -minetest.register_node("mcl_amethyst:budding_amethyst_block",{ - description = S("Budding Amethyst"), - _doc_items_longdesc = S("The Budding Amethyst can grow amethyst"), - tiles = {"mcl_amethyst_budding_amethyst.png"}, - drop = "", - groups = { - pickaxey = 1, - building_block = 1, - dig_by_piston = 1, - }, - sounds = sounds, - is_ground_content = true, - _mcl_hardness = 1.5, - _mcl_blast_resistance = 1.5, -}) - -mcl_wip.register_wip_item("mcl_amethyst:budding_amethyst_block") - --- Amethyst Shard -minetest.register_craftitem("mcl_amethyst:amethyst_shard",{ - description = S("Amethyst Shard"), - _doc_items_longdesc = S("An amethyst shard is a crystalline mineral."), - inventory_image = "mcl_amethyst_amethyst_shard.png", - groups = {craftitem = 1}, -}) - --- Calcite -minetest.register_node("mcl_amethyst:calcite",{ - description = S("Calcite"), - _doc_items_longdesc = S("Calcite can be found as part of amethyst geodes."), - tiles = {"mcl_amethyst_calcite_block.png"}, - groups = {pickaxey = 1, building_block = 1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = true, - _mcl_hardness = 0.75, - _mcl_blast_resistance = 0.75, -}) - --- Tinied Glass -minetest.register_node("mcl_amethyst:tinted_glass",{ - description = S("Tinted Glass"), - _doc_items_longdesc = S("Tinted Glass is a type of glass which blocks lights while it is visually transparent."), - tiles = {"mcl_amethyst_tinted_glass.png"}, - _mcl_hardness = 0.3, - _mcl_blast_resistance = 0.3, - drawtype = "glasslike", - use_texture_alpha = "blend", - sunlight_propagates = false, - groups = {handy = 1, building_block = 1, deco_block = 1}, - sounds = mcl_sounds.node_sound_glass_defaults(), - is_ground_content = false, -}) - --- Amethyst Cluster -local bud_def = { - { - size = "small", - description = S("Small Amethyst Bud"), - long_desc = S("Small Amethyst Bud is the first growth of amethyst bud."), - light_source = 3, - next_stage = "mcl_amethyst:medium_amethyst_bud", - selection_box = { -4/16, -7/16, -4/16, 4/16, -3/16, 4/16 }, - }, - { - size = "medium", - description = S("Medium Amethyst Bud"), - long_desc = S("Medium Amethyst Bud is the second growth of amethyst bud."), - light_source = 4, - next_stage = "mcl_amethyst:large_amethyst_bud", - selection_box = { -4.5/16, -8/16, -4.5/16, 4.5/16, -2/16, 4.5/16 }, - }, - { - size = "large", - description = S("Large Amethyst Bud"), - long_desc = S("Large Amethyst Bud is the third growth of amethyst bud."), - light_source = 5, - next_stage = "mcl_amethyst:amethyst_cluster", - selection_box = { -4.5/16, -8/16, -4.5/16, 4.5/16, -1/16, 4.5/16 }, - }, -} - -for _, def in pairs(bud_def) do - local size = def.size - local name = "mcl_amethyst:" .. size .. "_amethyst_bud" - local tile = "mcl_amethyst_amethyst_bud_" .. size .. ".png" - local inventory_image = "mcl_amethyst_amethyst_bud_" .. size .. ".png" - minetest.register_node(name, { - description = def.description, - _doc_items_longdesc = def.longdesc, - drop = "", - tiles = {tile}, - inventory_image = inventory_image, - paramtype1 = "light", - paramtype2 = "wallmounted", - drawtype = "plantlike", - use_texture_alpha = "clip", - sunlight_propagates = true, - walkable = false, - light_source = def.light_source, - groups = { - dig_by_water = 1, - destroy_by_lava_flow = 1, - dig_by_piston = 1, - pickaxey = 1, - deco_block = 1, - amethyst_buds = 1, - attached_node = 1, - }, - sounds = sounds, - selection_box = { - type = "fixed", - fixed = def.selection_box - }, - _mcl_hardness = 1.5, - _mcl_blast_resistance = 1.5, - _mcl_silk_touch_drop = true, - _mcl_amethyst_next_grade = def.next_stage, - }) -end - -minetest.register_node("mcl_amethyst:amethyst_cluster",{ - description = S("Amethyst Cluster"), - _doc_items_longdesc = S("Amethyst Cluster is the final growth of amethyst bud."), - drop = { - max_items = 1, - items = { - { - tools = {"~mcl_tools:pick_"}, - items = {"mcl_amethyst:amethyst_shard 4"}, - }, - { - items = {"mcl_amethyst:amethyst_shard 2"}, - }, - } - }, - tiles = {"mcl_amethyst_amethyst_cluster.png",}, - inventory_image = "mcl_amethyst_amethyst_cluster.png", - paramtype2 = "wallmounted", - drawtype = "plantlike", - paramtype1 = "light", - use_texture_alpha = "clip", - sunlight_propagates = true, - walkable = false, - light_source = 7, - groups = { - dig_by_water = 1, - destroy_by_lava_flow = 1, - dig_by_piston = 1, - pickaxey = 1, - deco_block = 1, - attached_node = 1, - }, - sounds = sounds, - selection_box = { - type = "fixed", - fixed = { -4.8/16, -8/16, -4.8/16, 4.8/16, 3.9/16, 4.8/16 }, - }, - _mcl_hardness = 1.5, - _mcl_blast_resistance = 1.5, - _mcl_silk_touch_drop = true, -}) - --- Register Crafts -minetest.register_craft({ - output = "mcl_amethyst:amethyst_block", - recipe = { - {"mcl_amethyst:amethyst_shard", "mcl_amethyst:amethyst_shard"}, - {"mcl_amethyst:amethyst_shard", "mcl_amethyst:amethyst_shard"}, - }, -}) - -minetest.register_craft({ - output = "mcl_amethyst:tinted_glass 2", - recipe = { - {"", "mcl_amethyst:amethyst_shard", ""}, - {"mcl_amethyst:amethyst_shard", "mcl_core:glass", "mcl_amethyst:amethyst_shard",}, - {"", "mcl_amethyst:amethyst_shard", ""}, - }, -}) - -if minetest.get_modpath("mcl_spyglass") then - minetest.clear_craft({output = "mcl_spyglass:spyglass",}) - local function craft_spyglass(ingot) - minetest.register_craft({ - output = "mcl_spyglass:spyglass", - recipe = { - {"mcl_amethyst:amethyst_shard"}, - {ingot}, - {ingot}, - } - }) - end - if minetest.get_modpath("mcl_copper") then - craft_spyglass("mcl_copper:copper_ingot") - else - craft_spyglass("mcl_core:iron_ingot") - end -end - --- Amethyst Growing -dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/grow.lua") diff --git a/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.fr.tr b/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.fr.tr deleted file mode 100644 index fbdab48f40..0000000000 --- a/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.fr.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_amethyst -Amethyst Cluster=Agrégat d'améthyste -Amethyst Cluster is the final growth of amethyst bud.=L'agrégat d'améthyste est le stade final de la croissance du bourgeon d'améthyste. -Amethyst Shard=Éclat d'améthyste -An amethyst shard is a crystalline mineral.=Un éclat d'améthyste est un minéral cristallin. -Block of Amethyst=Bloc d'améthyste -Budding Amethyst=Améthyste bourgeonante -Calcite=Calcite -Calcite can be found as part of amethyst geodes.=La calcite peut être trouvée dans les géodes d'améthyste. -Large Amethyst Bud=Grand bourgeon d'améthyste -Large Amethyst Bud is the third growth of amethyst bud.=Le grand bourgeon d'améthyste est le troisième stade de la croissance du bourgeon d'améthyste. -Medium Amethyst Bud=Bourgeon d'améthyste moyen -Medium Amethyst Bud is the second growth of amethyst bud.=Le bourgeon d'améthyste moyen est le deuxième stade de la croissance du bourgeon d'améthyste. -Small Amethyst Bud=Petit bourgeon d'améthyste -Small Amethyst Bud is the first growth of amethyst bud.=Le petit bourgeon d'améthyste est le premier stade de la croissance du bourgeon d'améthyste. -The Block of Amethyst is a decoration block crafted from amethyst shards.=Le bloc d'améthyste est un bloc décoratif fabriqué à partir d'éclats d'améthyste. -The Budding Amethyst can grow amethyst=L'améthyste bourgeonante peut faire croître de l'améthyste. -Tinted Glass=Verre teinté -Tinted Glass is a type of glass which blocks lights while it is visually transparent.=Le verre teinté est un type de verre qui bloque la lumière tout en étant visuellement transparent. diff --git a/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.ru.tr b/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.ru.tr deleted file mode 100644 index 9f1d0f5720..0000000000 --- a/mods/ITEMS/mcl_amethyst/locale/mcl_amethyst.ru.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_amethyst -Amethyst Cluster=Аметистовая друза -Amethyst Cluster is the final growth of amethyst bud.=Аметистовая друза - это последняя 4-я стадия роста аметистового бутона. -Amethyst Shard=Осколок аметиста -An amethyst shard is a crystalline mineral.=Осколок аметиста - это кристаллический минерал, получаемый в результате разрушения кластеров аметиста. -Block of Amethyst=Аметистовый блок -Budding Amethyst=Растущий аметист -Calcite=Кальцит -Calcite can be found as part of amethyst geodes.=Кальцит можно найти в составе аметистовых жеод. -Large Amethyst Bud=Большой росток аметиста -Large Amethyst Bud is the third growth of amethyst bud.=Большой росток - третья стадия роста аметиста. -Medium Amethyst Bud=Средний росток аметиста -Medium Amethyst Bud is the second growth of amethyst bud.=Средний росток - вторая стадия роста аметиста. -Small Amethyst Bud=Маленький росток аметиста -Small Amethyst Bud is the first growth of amethyst bud.=Маленький росток - первая стадия роста аметиста. -The Block of Amethyst is a decoration block crafted from amethyst shards.=Блок аметиста - декоративный блок, скрафченный из осколков аметиста. -The Budding Amethyst can grow amethyst=Растущий аметист может вырастить аметист -Tinted Glass=Тонированное стекло -Tinted Glass is a type of glass which blocks lights while it is visually transparent.=Тонированное стекло блокирует свет, но визуально прозрачно. diff --git a/mods/ITEMS/mcl_amethyst/locale/template.txt b/mods/ITEMS/mcl_amethyst/locale/template.txt deleted file mode 100644 index 7f23e99650..0000000000 --- a/mods/ITEMS/mcl_amethyst/locale/template.txt +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_amethyst -Amethyst Cluster= -Amethyst Cluster is the final growth of amethyst bud.= -Amethyst Shard= -An amethyst shard is a crystalline mineral.= -Block of Amethyst= -Budding Amethyst= -Calcite= -Calcite can be found as part of amethyst geodes.= -Large Amethyst Bud= -Large Amethyst Bud is the third growth of amethyst bud.= -Medium Amethyst Bud= -Medium Amethyst Bud is the second growth of amethyst bud.= -Small Amethyst Bud= -Small Amethyst Bud is the first growth of amethyst bud.= -The Block of Amethyst is a decoration block crafted from amethyst shards.= -The Budding Amethyst can grow amethyst= -Tinted Glass= -Tinted Glass is a type of glass which blocks lights while it is visually transparent.= diff --git a/mods/ITEMS/mcl_amethyst/mod.conf b/mods/ITEMS/mcl_amethyst/mod.conf deleted file mode 100644 index 97ed6ae99a..0000000000 --- a/mods/ITEMS/mcl_amethyst/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_amethyst -author = Emojiminetest, kay27 -description = Amethyst related stuff -depends = mcl_init, mcl_core, mcl_wip -optional_depends = mcl_spyglass, mcl_copper diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.1.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.1.ogg deleted file mode 100644 index a2208012c9..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.2.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.2.ogg deleted file mode 100644 index a3903550c7..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.3.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.3.ogg deleted file mode 100644 index 9cc81e20f9..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_break.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.1.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.1.ogg deleted file mode 100644 index 8165edd5fb..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.2.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.2.ogg deleted file mode 100644 index 5bb5c4657b..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.3.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.3.ogg deleted file mode 100644 index 7816685145..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.4.ogg b/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.4.ogg deleted file mode 100644 index 14299f50c4..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/sounds/mcl_amethyst_amethyst_walk.4.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/LICENSE.txt b/mods/ITEMS/mcl_amethyst/textures/LICENSE.txt deleted file mode 100644 index f0993b6ce0..0000000000 --- a/mods/ITEMS/mcl_amethyst/textures/LICENSE.txt +++ /dev/null @@ -1 +0,0 @@ -Nova_Wostra Creative Commons Attribution-Share Alike 4.0 International License https://creativecommons.org/licenses/by-sa/4.0/ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_block.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_block.png deleted file mode 100644 index bc172f2a0e..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_large.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_large.png deleted file mode 100644 index 5c73094347..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_large.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_medium.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_medium.png deleted file mode 100644 index 5a54f63dc4..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_medium.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_small.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_small.png deleted file mode 100644 index 7a414235bf..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_bud_small.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster.png deleted file mode 100644 index 1097d97b1f..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster_block.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster_block.png deleted file mode 100644 index 7ea932bf86..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_cluster_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_shard.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_shard.png deleted file mode 100644 index 0d718c47a4..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_amethyst_shard.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_budding_amethyst.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_budding_amethyst.png deleted file mode 100644 index 6dee8ee9b4..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_budding_amethyst.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_calcite_block.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_calcite_block.png deleted file mode 100644 index 48e3ce5d93..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_calcite_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_tinted_glass.png b/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_tinted_glass.png deleted file mode 100644 index 18e7977895..0000000000 Binary files a/mods/ITEMS/mcl_amethyst/textures/mcl_amethyst_tinted_glass.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/init.lua b/mods/ITEMS/mcl_anvils/init.lua deleted file mode 100644 index d3b32b8449..0000000000 --- a/mods/ITEMS/mcl_anvils/init.lua +++ /dev/null @@ -1,571 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local MAX_NAME_LENGTH = 35 -local MAX_WEAR = 65535 -local SAME_TOOL_REPAIR_BOOST = math.ceil(MAX_WEAR * 0.12) -- 12% -local MATERIAL_TOOL_REPAIR_BOOST = { - math.ceil(MAX_WEAR * 0.25), -- 25% - math.ceil(MAX_WEAR * 0.5), -- 50% - math.ceil(MAX_WEAR * 0.75), -- 75% - MAX_WEAR, -- 100% -} - -local function get_anvil_formspec(set_name) - if not set_name then - set_name = "" - end - return "size[9,8.75]".. - "background[-0.19,-0.25;9.41,9.49;mcl_anvils_inventory.png]".. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", 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;input;1,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(1,2.5,1,1).. - "list[context;input;4,2.5;1,1;1]".. - mcl_formspec.get_itemslot_bg(4,2.5,1,1).. - "list[context;output;8,2.5;1,1;]".. - mcl_formspec.get_itemslot_bg(8,2.5,1,1).. - "label[3,0.1;"..minetest.formspec_escape(minetest.colorize("#313131", S("Repair and Name"))).."]".. - "field[3.25,1;4,1;name;;"..minetest.formspec_escape(set_name).."]".. - "field_close_on_enter[name;false]".. - "button[7,0.7;2,1;name_button;"..minetest.formspec_escape(S("Set Name")).."]".. - "listring[context;output]".. - "listring[current_player;main]".. - "listring[context;input]".. - "listring[current_player;main]" -end - --- Given a tool and material stack, returns how many items of the material stack --- needs to be used up to repair the tool. -local function get_consumed_materials(tool, material) - local wear = tool:get_wear() - --local health = (MAX_WEAR - wear) - local matsize = material:get_count() - local materials_used = 0 - for m=1, math.min(4, matsize) do - materials_used = materials_used + 1 - if (wear - MATERIAL_TOOL_REPAIR_BOOST[m]) <= 0 then - break - end - end - return materials_used -end - -local function contains(table, value) - for _, i in pairs(table) do - if i == value then - return true - end - end - return false -end - --- Given 2 input stacks, tells you which is the tool and which is the material. --- Returns ("tool", input1, input2) if input1 is tool and input2 is material. --- Returns ("material", input2, input1) if input1 is material and input2 is tool. --- Returns nil otherwise. -local function distinguish_tool_and_material(input1, input2) - local def1 = input1:get_definition() - local def2 = input2:get_definition() - local r1 = def1._repair_material - local r2 = def2._repair_material - if def1.type == "tool" and r1 and type(r1) == "table" and contains(r1, input2) then - return "tool", input1, input2 - elseif def2.type == "tool" and r2 and type(r2) == "table" and contains(r2, input1) then - return "material", input2, input1 - elseif def1.type == "tool" and r1 then - return "tool", input1, input2 - elseif def2.type == "tool" and r2 then - return "material", input2, input1 - else - return nil - end -end - --- Update the inventory slots of an anvil node. --- meta: Metadata of anvil node -local function update_anvil_slots(meta) - local inv = meta:get_inventory() - local new_name = meta:get_string("set_name") - local input1 = inv:get_stack("input", 1) - local input2 = inv:get_stack("input", 2) - --local output = inv:get_stack("output", 1) - local new_output, name_item - local just_rename = false - - -- Both input slots occupied - if (not input1:is_empty() and not input2:is_empty()) then - -- Repair, if tool - local def1 = input1:get_definition() - local def2 = input2:get_definition() - - -- Repair calculation helper. - -- Adds the “inverse” values of wear1 and wear2. - -- Then adds a boost health value directly. - -- Returns the resulting (capped) wear. - local function calculate_repair(wear1, wear2, boost) - local new_health = (MAX_WEAR - wear1) + (MAX_WEAR - wear2) - if boost then - new_health = new_health + boost - end - return math.max(0, math.min(MAX_WEAR, MAX_WEAR - new_health)) - end - - local can_combine = mcl_enchanting.combine(input1, input2) - - if can_combine then - -- Add tool health together plus a small bonus - if def1.type == "tool" and def2.type == "tool" then - local new_wear = calculate_repair(input1:get_wear(), input2:get_wear(), SAME_TOOL_REPAIR_BOOST) - input1:set_wear(new_wear) - end - - name_item = input1 - new_output = name_item - -- Tool + repair item - else - -- Any tool can have a repair item. This may be defined in the tool's item definition - -- as an itemstring in the field `_repair_material`. Only if this field is set, the - -- tool can be repaired with a material item. - -- Example: Iron Pickaxe + Iron Ingot. `_repair_material = mcl_core:iron_ingot` - - -- Big repair bonus - -- TODO: Combine tool enchantments - local distinguished, tool, material = distinguish_tool_and_material(input1, input2) - if distinguished then - local tooldef = tool:get_definition() - local repair = tooldef._repair_material - local has_correct_material = false - local material_name = material:get_name() - if type(repair) == "string" then - if string.sub(repair, 1, 6) == "group:" then - has_correct_material = minetest.get_item_group(material_name, string.sub(repair, 7)) ~= 0 - elseif material_name == repair then - has_correct_material = true - end - else - if contains(repair, material_name) then - has_correct_material = true - else - for _, r in pairs(repair) do - if string.sub(r, 1, 6) == "group:" then - if minetest.get_item_group(material_name, string.sub(r, 7)) ~= 0 then - has_correct_material = true - end - - end - end - end - end - if has_correct_material and tool:get_wear() > 0 then - local materials_used = get_consumed_materials(tool, material) - local new_wear = calculate_repair(tool:get_wear(), MAX_WEAR, MATERIAL_TOOL_REPAIR_BOOST[materials_used]) - tool:set_wear(new_wear) - name_item = tool - new_output = name_item - else - new_output = "" - end - else - new_output = "" - end - end - -- Exactly 1 input slot occupied - elseif (not input1:is_empty() and input2:is_empty()) or (input1:is_empty() and not input2:is_empty()) then - -- Just rename item - if input1:is_empty() then - name_item = input2 - else - name_item = input1 - end - just_rename = true - else - new_output = "" - end - - -- Rename handling - if name_item then - -- No renaming allowed with group no_rename=1 - if minetest.get_item_group(name_item:get_name(), "no_rename") == 1 then - new_output = "" - else - if new_name == nil then - new_name = "" - end - local meta = name_item:get_meta() - local old_name = meta:get_string("name") - -- Limit name length - new_name = string.sub(new_name, 1, MAX_NAME_LENGTH) - -- Don't rename if names are identical - if new_name ~= old_name then - -- Save the raw name internally - meta:set_string("name", new_name) - -- Rename item handled by tt - tt.reload_itemstack_description(name_item) - new_output = name_item - elseif just_rename then - new_output = "" - end - end - end - - -- Set the new output slot - if new_output then - inv:set_stack("output", 1, new_output) - end -end - --- Drop input items of anvil at pos with metadata meta -local function drop_anvil_items(pos, meta) - local inv = meta:get_inventory() - for i=1, inv:get_size("input") do - local stack = inv:get_stack("input", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end -end - -local function damage_particles(pos, node) - minetest.add_particlespawner({ - amount = 30, - time = 0.1, - minpos = vector.add(pos, {x=-0.5, y=-0.5, z=-0.5}), - maxpos = vector.add(pos, {x=0.5, y=-0.25, z=0.5}), - minvel = {x=-0.5, y=0.05, z=-0.5}, - maxvel = {x=0.5, y=0.3, z=0.5}, - minacc = {x=0, y=-9.81, z=0}, - maxacc = {x=0, y=-9.81, z=0}, - minexptime = 0.1, - maxexptime = 0.5, - minsize = 0.4, - maxsize = 0.5, - collisiondetection = true, - vertical = false, - node = node, - }) -end - -local function destroy_particles(pos, node) - minetest.add_particlespawner({ - amount = math.random(20, 30), - time = 0.1, - minpos = vector.add(pos, {x=-0.4, y=-0.4, z=-0.4}), - maxpos = vector.add(pos, {x=0.4, y=0.4, z=0.4}), - minvel = {x=-0.5, y=-0.1, z=-0.5}, - maxvel = {x=0.5, y=0.2, z=0.5}, - minacc = {x=0, y=-9.81, z=0}, - maxacc = {x=0, y=-9.81, z=0}, - minexptime = 0.2, - maxexptime = 0.65, - minsize = 0.8, - maxsize = 1.2, - collisiondetection = true, - vertical = false, - node = node, - }) -end - --- Damage the anvil by 1 level. --- Destroy anvil when at highest damage level. --- Returns true if anvil was destroyed. -local function damage_anvil(pos) - local node = minetest.get_node(pos) - if node.name == "mcl_anvils:anvil" then - minetest.swap_node(pos, {name="mcl_anvils:anvil_damage_1", param2=node.param2}) - damage_particles(pos, node) - minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dig, {pos=pos, max_hear_distance=16}, true) - return false - elseif node.name == "mcl_anvils:anvil_damage_1" then - minetest.swap_node(pos, {name="mcl_anvils:anvil_damage_2", param2=node.param2}) - damage_particles(pos, node) - minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dig, {pos=pos, max_hear_distance=16}, true) - return false - elseif node.name == "mcl_anvils:anvil_damage_2" then - -- Destroy anvil - local meta = minetest.get_meta(pos) - drop_anvil_items(pos, meta) - minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dug, {pos=pos, max_hear_distance=16}, true) - minetest.remove_node(pos) - destroy_particles(pos, node) - minetest.check_single_for_falling({x=pos.x, y=pos.y+1, z=pos.z}) - return true - end -end - --- Roll a virtual dice and damage anvil at a low chance. -local function damage_anvil_by_using(pos) - local r = math.random(1, 100) - -- 12% chance - if r <= 12 then - return damage_anvil(pos) - else - return false - end -end - -local function damage_anvil_by_falling(pos, distance) - local r = math.random(1, 100) - if distance > 1 then - if r <= (5*distance) then - damage_anvil(pos) - end - end -end - -local anvilbox = { - type = "fixed", - fixed = { - { -8 / 16, -8 / 16, -6 / 16, 8 / 16, 8 / 16, 6 / 16 }, - }, -} -local anvildef = { - groups = {pickaxey=1, falling_node=1, falling_node_damage=1, crush_after_fall=1, deco_block=1, anvil=1}, - tiles = {"mcl_anvils_anvil_top_damaged_0.png^[transformR90", "mcl_anvils_anvil_base.png", "mcl_anvils_anvil_side.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - _tt_help = S("Repair and rename items"), - paramtype = "light", - sunlight_propagates = true, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - { -6 / 16, -8 / 16, -6 / 16, 6 / 16, -4 / 16, 6 / 16 }, - { -5 / 16, -4 / 16, -4 / 16, 5 / 16, -3 / 16, 4 / 16 }, - { -4 / 16, -3 / 16, -2 / 16, 4 / 16, 2 / 16, 2 / 16 }, - { -8 / 16, 2 / 16, -5 / 16, 8 / 16, 8 / 16, 5 / 16 }, - } - }, - selection_box = anvilbox, - collision_box = anvilbox, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 1200, - _mcl_hardness = 5, - _mcl_after_falling = damage_anvil_by_falling, - - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta:to_table() - meta:from_table(oldmetadata) - drop_anvil_items(pos, meta) - meta:from_table(meta2) - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - elseif listname == "output" then - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - elseif to_list == "output" then - return 0 - elseif from_list == "output" and to_list == "input" then - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if inv:get_stack(to_list, to_index):is_empty() then - return count - else - return 0 - end - else - return count - end - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - update_anvil_slots(meta) - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - if from_list == "output" and to_list == "input" then - local inv = meta:get_inventory() - for i=1, inv:get_size("input") do - if i ~= to_index then - local istack = inv:get_stack("input", i) - istack:set_count(math.max(0, istack:get_count() - count)) - inv:set_stack("input", i, istack) - end - end - end - update_anvil_slots(meta) - - if from_list == "output" then - local destroyed = damage_anvil_by_using(pos) - -- Close formspec if anvil was destroyed - if destroyed then - --[[ Closing the formspec w/ emptyformname is discouraged. But this is justified - because node formspecs seem to only have an empty formname in MT 0.4.16. - Also, sice this is on_metadata_inventory_take, we KNOW which formspec has - been opened by the player. So this should be safe nonetheless. - TODO: Update this line when node formspecs get proper identifiers in Minetest. ]] - minetest.close_formspec(player:get_player_name(), "") - end - end - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if listname == "output" then - local inv = meta:get_inventory() - local input1 = inv:get_stack("input", 1) - local input2 = inv:get_stack("input", 2) - -- Both slots occupied? - if not input1:is_empty() and not input2:is_empty() then - -- Take as many items as needed - local distinguished, tool, material = distinguish_tool_and_material(input1, input2) - if distinguished then - -- Tool + material: Take tool and as many materials as needed - local materials_used = get_consumed_materials(tool, material) - material:set_count(material:get_count() - materials_used) - tool:take_item() - if distinguished == "tool" then - input1, input2 = tool, material - else - input1, input2 = material, tool - end - inv:set_stack("input", 1, input1) - inv:set_stack("input", 2, input2) - else - -- Else take 1 item from each stack - input1:take_item() - input2:take_item() - inv:set_stack("input", 1, input1) - inv:set_stack("input", 2, input2) - end - else - -- Otherwise: Rename mode. Remove the same amount of items from input - -- as has been taken from output - if not input1:is_empty() then - input1:set_count(math.max(0, input1:get_count() - stack:get_count())) - inv:set_stack("input", 1, input1) - end - if not input2:is_empty() then - input2:set_count(math.max(0, input2:get_count() - stack:get_count())) - inv:set_stack("input", 2, input2) - end - end - local destroyed = damage_anvil_by_using(pos) - -- Close formspec if anvil was destroyed - if destroyed then - -- See above for justification. - minetest.close_formspec(player:get_player_name(), "") - end - elseif listname == "input" then - update_anvil_slots(meta) - end - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("input", 2) - inv:set_size("output", 1) - local form = get_anvil_formspec() - meta:set_string("formspec", form) - end, - on_receive_fields = function(pos, formname, fields, sender) - local sender_name = sender:get_player_name() - if minetest.is_protected(pos, sender_name) then - minetest.record_protection_violation(pos, sender_name) - return - end - if fields.name_button or fields.name then - local set_name - if fields.name == nil then - set_name = "" - else - set_name = fields.name - end - local meta = minetest.get_meta(pos) - -- Limit name length - set_name = string.sub(set_name, 1, MAX_NAME_LENGTH) - meta:set_string("set_name", set_name) - update_anvil_slots(meta) - meta:set_string("formspec", get_anvil_formspec(set_name)) - end - end, -} -if minetest.get_modpath("screwdriver") then - anvildef.on_rotate = screwdriver.rotate_simple -end - -local anvildef0 = table.copy(anvildef) -anvildef0.description = S("Anvil") -anvildef0._doc_items_longdesc = -S("The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!") -anvildef0._doc_items_usagehelp = -S("To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.").."\n".. -S("To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.").."\n".. -S("There are two possibilities to repair tools (and armor):").."\n".. -S("• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.").."\n".. -S("• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.").."\n".. -S("Armor counts as a tool. It is possible to repair and rename a tool in a single step.").."\n\n".. -S("The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.") - -local anvildef1 = table.copy(anvildef) -anvildef1.description = S("Slightly Damaged Anvil") -anvildef1._doc_items_create_entry = false -anvildef1.groups.anvil = 2 -anvildef1._doc_items_create_entry = false -anvildef1.tiles = {"mcl_anvils_anvil_top_damaged_1.png^[transformR90", "mcl_anvils_anvil_base.png", "mcl_anvils_anvil_side.png"} - -local anvildef2 = table.copy(anvildef) -anvildef2.description = S("Very Damaged Anvil") -anvildef2._doc_items_create_entry = false -anvildef2.groups.anvil = 3 -anvildef2._doc_items_create_entry = false -anvildef2.tiles = {"mcl_anvils_anvil_top_damaged_2.png^[transformR90", "mcl_anvils_anvil_base.png", "mcl_anvils_anvil_side.png"} - -minetest.register_node("mcl_anvils:anvil", anvildef0) -minetest.register_node("mcl_anvils:anvil_damage_1", anvildef1) -minetest.register_node("mcl_anvils:anvil_damage_2", anvildef2) - -if minetest.get_modpath("mcl_core") then - minetest.register_craft({ - output = "mcl_anvils:anvil", - recipe = { - { "mcl_core:ironblock", "mcl_core:ironblock", "mcl_core:ironblock" }, - { "", "mcl_core:iron_ingot", "" }, - { "mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot" }, - } - }) -end - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_anvils:anvil", "nodes", "mcl_anvils:anvil_damage_1") - doc.add_entry_alias("nodes", "mcl_anvils:anvil", "nodes", "mcl_anvils:anvil_damage_2") -end - --- Legacy -minetest.register_lbm({ - label = "Update anvil formspecs (0.60.0)", - name = "mcl_anvils:update_formspec_0_60_0", - nodenames = { "group:anvil" }, - run_at_every_load = false, - action = function(pos, node) - local meta = minetest.get_meta(pos) - local set_name = meta:get_string("set_name") - meta:set_string("formspec", get_anvil_formspec(set_name)) - end, -}) diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.de.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.de.tr deleted file mode 100644 index 9e7d88337d..0000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.de.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name=Name setzen -Repair and Name=Reparieren und benennen -Inventory=Inventar -Anvil=Amboss -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=Der Amboss ermöglicht es, Werkzeuge und Rüstung zu reparieren und Gegenstände zu benennen. Er hat jedoch eine begrenzte Lebensdauer. Lassen Sie ihn nicht auf Ihren Kopf fallen, das könnte ziemlich schmerzhaft sein! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Um einen Amboss zu benutzen, rechtsklicken Sie auf ihn. Ein Amboss hat 2 Eingabeplätze (links) und einen Ausgabeplatz (rechts). -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Um Gegenstände umzubenennen, platzieren Sie einen Gegenstand in einen der Eingangsplätze und lassen Sie den anderen frei. Geben Sie einen Namen ein und drücken Sie die Eingabetaste oder „Name setzen”, dann nehmen Sie den umbenannten Gegenstand an sich. -There are two possibilities to repair tools (and armor):=Es gibt zwei Möglichkeiten, Werkzeuge (und Rüstung) zu reparieren: -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Werkzeug + Werkzeug: Platzieren sie zwei gleiche Werkzeuge in die Eingangsplätze. Der Zustand des reparierten Werkzeugs ist die Summe des Zustands beider Eingangswerkzeuge, plus einem Bonus von 12%. -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Werkzeug + Material: Einige Werkzeuge können auch repariert werden, indem man sie mit einem Gegenstand, aus dem sie gemacht worden sind, kombiniert. Zum Beispiel können Eisenspitzhacken mit Eisenbarren repariert werden. Dadurch wird das Werkzeug um 25% repariert. -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=Rüstung zählt als Werkzeug. Es ist möglich, ein Werkzeug in einem Arbeitsschritt zu reparieren und zu benennen. -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=Der Amboss hat begrenze Lebensdauer und 3 Schadensstufen: Kein Schaden, leicht beschädigt, und stark beschädigt. Jedes mal, wenn Sie etwas reparieren oder umbenennen, gibt es eine 12%-ige Chance, dass der Amboss Schaden nimmt. Ambosse können auch beschädigt werden, wenn sie um mehr als 1 Block fallen. Wenn ein sehr beschädigter Amboss erneut beschädigt wird, wird er zerstört. -Slightly Damaged Anvil=Leicht beschädigter Amboss -Very Damaged Anvil=Stark beschädigter Amboss -Repair and rename items=Für die Reparatur und Umbenennung von Gegenständen diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.es.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.es.tr deleted file mode 100644 index 7212b92ba9..0000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.es.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_anvils -Set Name=Establece un nombre -Repair and Name=Reparar y nombrar -Inventory=Inventario -Anvil=Yunque -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=El yunque le permite reparar herramientas y armaduras, y dar nombres a los elementos. Sin embargo, tiene una durabilidad limitada. No lo dejes caer sobre tu cabeza, ¡podría ser bastante doloroso! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Para usar un yunque, haga clic derecho sobre él. Un yunque tiene 2 ranuras de entrada (a la izquierda) y una ranura de salida. -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Para cambiar el nombre de los elementos, coloque una pila de elementos en una de las ranuras de elementos mientras mantiene vacía la otra ranura de entrada. Escriba un nombre, presione enter o "Establecer nombre", luego obtenga el elemento renombrado en la ranura de salida. -There are two possibilities to repair tools (and armor):=Hay dos posibilidades para reparar herramientas (y armaduras): -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Herramienta + Herramienta: Coloque dos herramientas del mismo tipo en las ranuras de entrada. La "salud" de la herramienta reparada es la suma de la "salud" de ambas herramientas, con un bono del 12%. -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Herramienta + Material: Algunas herramientas también pueden repararse combinándolas con un elemento del que está hecho. Por ejemplo, los picos de hierro pueden repararse con lingotes de hierro. Esto repara la herramienta en un 25%. -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=La armadura cuenta como una herramienta. Es posible reparar y cambiar el nombre de una herramienta en un solo paso. -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=El yunque tiene una durabilidad limitada y 3 niveles de daño: sin daños, ligeramente dañado y muy dañado. Cada vez que reparas o cambias el nombre de algo, hay un 12% de posibilidades de que el yunque se dañe. Los yunques también tienen la posibilidad de dañarse cuando caen en más de 1 bloque. Si un yunque muy dañado se daña nuevamente, se destruye. -Slightly Damaged Anvil=Yunque dañado -Very Damaged Anvil=Yunque muy dañado diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.fr.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.fr.tr deleted file mode 100644 index 1f03de8e5d..0000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.fr.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name=Définir le Nom -Repair and Name=Réparation et Nomme -Inventory=Inventaire -Anvil=Enclume -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=L'enclume vous permet de réparer des outils et des armures, et de donner des noms à des objets. Il a cependant une durabilité limitée. Ne la laissez pas tomber sur la tête, cela pourrait être assez douloureux! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Pour utiliser une enclume, faites un clic droit dessus. Une enclume a 2 emplacements d'entrée (à gauche) et un emplacement de sortie. -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Pour renommer des objets, placez une pile d'objets dans l'un des emplacements d'objets tout en laissant l'autre emplacement d'entrée vide. Tapez un nom, appuyez sur Entrée ou sur «Définir le nom», puis prenez l'élément renommé dans l'emplacement de sortie. -There are two possibilities to repair tools (and armor):=Il existe deux possibilités pour réparer les outils (et les armures): -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Outil + Outil: Placez deux outils du même type dans les emplacements d'entrée. La "santé" de l'outil réparé est la somme de la "santé" des deux outils d'entrée, plus un bonus de 12%. -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Outil + Matériel: Certains outils peuvent également être réparés en les combinant avec un élément dont il est fait. Par exemple, les pioches de fer peuvent être réparées avec des lingots de fer. Cela répare l'outil de 25%. -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=L'armure compte comme un outil. Il est possible de réparer et de renommer un outil en une seule étape. -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=L'enclume a une durabilité limitée et 3 niveaux de dommages: en bon état, légèrement endommagé et très endommagé. Chaque fois que vous réparez ou renommez quelque chose, il y a 12% de chances que l'enclume soit endommagée. Les enclumes ont également une chance d'être endommagées lorsqu'elles tombent de plus d'un bloc. Si une enclume très endommagée est à nouveau endommagée, elle est détruite. -Slightly Damaged Anvil=Enclume Légèrement Endommagée -Very Damaged Anvil=Enclume Très Endommagée -Repair and rename items=Réparer et renommer des objets diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.pl.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.pl.tr deleted file mode 100644 index cf778e5542..0000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.pl.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name=Ustaw nazwę -Repair and Name=Napraw i nazwij -Inventory=Ekwipunek -Anvil=Kowadło -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=Kowadło pozwala naprawiać przedmioty i zbroje, a także nazywać przedmioty. Ma jednak ograniczoną wytrzymałość. Nie pozwól by spadło ci na głowę, bo będzie bardzo boleśnie! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Aby użyć kowadła, kliknij je prawym przyciskiem. Kowadło ma dwa miejsca wejściowe (po lewej) i jedno miejsce wyjściowe. -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Aby zmienić nazwę przedmiotów, włóż grupę przedmiotów w jedno z miejsc i zostaw drugie miejsce puste. Wpisz imię, kliknij "Ustaw imię", a następnie wyjmij przemianowane przedmioty z miejsca wyjściowego. -There are two possibilities to repair tools (and armor):=Są dwie możliwości naprawiania przedmiotów (i zbroi): -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=Narzędzie + narzędzie: Wstaw dwa narzędzia tego samego typu w miejscach wejściowych. "Życie" naprawionego w ten sposób narzędzia jest sumą "żyć" obu narzędzi wejściowych plus 12% bonusu. -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=Narzędzie + materiał: Niektóre narzędzia mogą być naprawiane przez łączenie ich z przedmiotem z którego są wykonane. Przykładowo żelazne kilofy mogą być naprawione przy użyciu sztabek żelaza. To przywraca 25% "życia" narzędzia. -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=Zbroje liczą się tu jako narzędzia. Możliwe jest jednoczesna naprawa i przemianowanie przedmiotu. -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=Kowadło ma ograniczoną wytrzymałość i trzy poziomu uszkodzenia: nieuszkodzone, lekko uszkodzone i bardzo uszkodzone. Za każdym razem gdy naprawiasz lub przemianowujesz coś jest 12% szans, że kowadło się uszkodzi. Kowadła mogą się również uszkodzić gdy spadają z wysokości większej niż jeden blok. Jeśli bardzo uszkodzone kowadło zostanie uszkodzone jeszcze raz, zostanie zniszczone. -Slightly Damaged Anvil=Lekko uszkodzone kowadło -Very Damaged Anvil=Bardzo uszkodzone kowadło -Repair and rename items=Napraw i przemianuj przedmioty diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.ru.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.ru.tr deleted file mode 100644 index 20281bd6bb..0000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.ru.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name=Дать имя -Repair and Name=Починить и дать имя -Inventory=Инвентарь -Anvil=Наковальня -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=Наковальня позволяет ремонтировать инструменты и защиту, а также давать имена предметам. Но она имеет ограниченный срок службы. Не дайте ей упасть вам на голову, это может быть больно! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=Чтобы воспользоваться наковальней, кликните по ней правой кнопкой. Наковальня имеет два входных отсека (слева) и один выходной. -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=Для переименования положите стопку предметов в один отсек, второй оставьте пустым. Наберите имя, нажмите [Enter] или “Дать имя” и заберите переименованные предметы из выходного отсека. -There are two possibilities to repair tools (and armor):=Есть два способа отремонтировать инструменты (и защиту): -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• Инструмент + Инструмент: Положите два инструмента одного типа во входные отсеки. “Здоровье” отремонтированного инструмента будет равно сумме “здоровья” каждого из них, плюс 12% бонус. -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• Инструмент + Материал: Некоторые инструменты можно также ремонтировать, добавляя к ним предмет, из которого они сделаны. Например, железные кирки ремонтируются добавлением слитков железа. Таким способом инструмент восстанавливается на 25%. -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=Защиты считается за инструмент. Можно ремонтировать и переименовывать за одно действие. -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=Наковальня имеет ограниченный срок службы и 3 уровня износа: новая, немного изношенная, сильно повреждённая. Каждый раз, ремонтируя или переименовывая что-либо, вы имеете 12-процентный шанс повредить наковальню. Наковальни также могут повреждаться, когда они падают с высоте более 1 блока. Если повреждённая наковальня повреждается снова, то она уничтожается. -Slightly Damaged Anvil=Немного изношенная наковальня -Very Damaged Anvil=Сильно повреждённая наковальня -Repair and rename items=Ремонтирует и переименовывает предметы diff --git a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.zh_TW.tr b/mods/ITEMS/mcl_anvils/locale/mcl_anvils.zh_TW.tr deleted file mode 100644 index 8ddf546a90..0000000000 --- a/mods/ITEMS/mcl_anvils/locale/mcl_anvils.zh_TW.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name=命名 -Repair and Name=修復與命名 -Inventory=物品欄 -Anvil=鐵砧 -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!=鐵砧允許你修理工具和盔甲,並為物品命名。然而,它的耐久性有限。不要讓它落在你的頭上,這可能是相當痛苦的! -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.=要使用一個鐵砧,右擊它。一個鐵砧有兩個輸入槽(在左邊)和一個輸出槽。 -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.=要重新命名物品,在其中一個物品槽裡放一個物品,同時保持另一個輸入槽為空。鍵入名稱,點擊回車或「設置名稱」,然後從輸出槽中取出重命名後的物品。 -There are two possibilities to repair tools (and armor):=有兩種維修工具(和裝甲)的可能性: -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.=• 工具+工具。在輸入槽中放置兩個相同類型的工具。修復後的工具的耐久力是兩個輸入工具的耐久力之和,加上12%的獎勵。 -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.=• 工具+材料。有些工具也可以通過與它所製成的物品結合起來進行修理。例如,鐵鎬可以用鐵錠修復。這可以使工具的修復率提高25%。 -Armor counts as a tool. It is possible to repair and rename a tool in a single step.=盔甲算作是一種工具。可以在一個步驟中修復和重命名一個工具。 -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.=鐵砧的耐用性有限,有3個損壞等級:未損壞、微損的和耗損的。每次你修復或重命名某物時,有12%的機會使鐵砧受損。當鐵砧跌落超過1塊時,也有機會被損壞。如果一個耗損的鐵砧再次受損,它就會被摧毀。 -Slightly Damaged Anvil=微損的鐵砧 -Very Damaged Anvil=耗損的鐵砧 -Repair and rename items=修復與命名物品 diff --git a/mods/ITEMS/mcl_anvils/locale/template.txt b/mods/ITEMS/mcl_anvils/locale/template.txt deleted file mode 100644 index ebc741c005..0000000000 --- a/mods/ITEMS/mcl_anvils/locale/template.txt +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_anvils -Set Name= -Repair and Name= -Inventory= -Anvil= -The anvil allows you to repair tools and armor, and to give names to items. It has a limited durability, however. Don't let it fall on your head, it could be quite painful!= -To use an anvil, rightclick it. An anvil has 2 input slots (on the left) and one output slot.= -To rename items, put an item stack in one of the item slots while keeping the other input slot empty. Type in a name, hit enter or “Set Name”, then take the renamed item from the output slot.= -There are two possibilities to repair tools (and armor):= -• Tool + Tool: Place two tools of the same type in the input slots. The “health” of the repaired tool is the sum of the “health” of both input tools, plus a 12% bonus.= -• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.= -Armor counts as a tool. It is possible to repair and rename a tool in a single step.= -The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.= -Slightly Damaged Anvil= -Very Damaged Anvil= -Repair and rename items= diff --git a/mods/ITEMS/mcl_anvils/mod.conf b/mods/ITEMS/mcl_anvils/mod.conf deleted file mode 100644 index cd4fa02a83..0000000000 --- a/mods/ITEMS/mcl_anvils/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_anvils -author = Wuzzy -description = Anvils mods for MCL2 -depends = mcl_init, mcl_formspec, mcl_sounds, tt, mcl_enchanting -optional_depends = mcl_core, screwdriver diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_base.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_base.png deleted file mode 100644 index 7e6440a57e..0000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_side.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_side.png deleted file mode 100644 index 25d85b69db..0000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_0.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_0.png deleted file mode 100644 index 43938aa726..0000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_1.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_1.png deleted file mode 100644 index e8cfbe5b7b..0000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_2.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_2.png deleted file mode 100644 index 096f65eac2..0000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_anvil_top_damaged_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_inventory.png b/mods/ITEMS/mcl_anvils/textures/mcl_anvils_inventory.png deleted file mode 100644 index fdbb706d10..0000000000 Binary files a/mods/ITEMS/mcl_anvils/textures/mcl_anvils_inventory.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/README.txt b/mods/ITEMS/mcl_banners/README.txt deleted file mode 100644 index 4de3ce4395..0000000000 --- a/mods/ITEMS/mcl_banners/README.txt +++ /dev/null @@ -1,7 +0,0 @@ -License of code: WTFPL - -License of textures: See README.md in top directory of MineClone 2. - -License of models: GPLv3 (https://www.gnu.org/licenses/gpl-3.0.html) -Models author: 22i. -Source: https://github.com/22i/amc diff --git a/mods/ITEMS/mcl_banners/init.lua b/mods/ITEMS/mcl_banners/init.lua deleted file mode 100644 index cc0e02e665..0000000000 --- a/mods/ITEMS/mcl_banners/init.lua +++ /dev/null @@ -1,675 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) -local N = function(s) return s end - -local mod_mcl_core = minetest.get_modpath("mcl_core") -local mod_doc = minetest.get_modpath("doc") - -local node_sounds -if minetest.get_modpath("mcl_sounds") then - node_sounds = mcl_sounds.node_sound_wood_defaults() -end - --- Helper function -local function round(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult -end - -mcl_banners = {} - -mcl_banners.colors = { - -- Format: - -- [ID] = { banner description, wool, unified dyes color group, overlay color, dye, color name for emblazonings } - ["unicolor_white"] = {"white", S("White Banner"), "mcl_wool:white", "#FFFFFF", "mcl_dye:white", N("White") }, - ["unicolor_darkgrey"] = {"grey", S("Grey Banner"), "mcl_wool:grey", "#303030", "mcl_dye:dark_grey", N("Grey") }, - ["unicolor_grey"] = {"silver", S("Light Grey Banner"), "mcl_wool:silver", "#5B5B5B", "mcl_dye:grey", N("Light Grey") }, - ["unicolor_black"] = {"black", S("Black Banner"), "mcl_wool:black", "#000000", "mcl_dye:black", N("Black") }, - ["unicolor_red"] = {"red", S("Red Banner"), "mcl_wool:red", "#BC0000", "mcl_dye:red", N("Red") }, - ["unicolor_yellow"] = {"yellow", S("Yellow Banner"), "mcl_wool:yellow", "#E6CD00", "mcl_dye:yellow", N("Yellow") }, - ["unicolor_dark_green"] = {"green", S("Green Banner"), "mcl_wool:green", "#006000", "mcl_dye:dark_green", N("Green") }, - ["unicolor_cyan"] = {"cyan", S("Cyan Banner"), "mcl_wool:cyan", "#00ACAC", "mcl_dye:cyan", N("Cyan") }, - ["unicolor_blue"] = {"blue", S("Blue Banner"), "mcl_wool:blue", "#0000AC", "mcl_dye:blue", N("Blue") }, - ["unicolor_red_violet"] = {"magenta", S("Magenta Banner"), "mcl_wool:magenta", "#AC007C", "mcl_dye:magenta", N("Magenta")}, - ["unicolor_orange"] = {"orange", S("Orange Banner"), "mcl_wool:orange", "#E67300", "mcl_dye:orange", N("Orange") }, - ["unicolor_violet"] = {"purple", S("Purple Banner"), "mcl_wool:purple", "#6400AC", "mcl_dye:violet", N("Violet") }, - ["unicolor_brown"] = {"brown", S("Brown Banner"), "mcl_wool:brown", "#603000", "mcl_dye:brown", N("Brown") }, - ["unicolor_pink"] = {"pink", S("Pink Banner"), "mcl_wool:pink", "#DE557C", "mcl_dye:pink", N("Pink") }, - ["unicolor_lime"] = {"lime", S("Lime Banner"), "mcl_wool:lime", "#30AC00", "mcl_dye:green", N("Lime") }, - ["unicolor_light_blue"] = {"light_blue", S("Light Blue Banner"), "mcl_wool:light_blue", "#4040CF", "mcl_dye:lightblue", N("Light Blue") }, -} - - -local pattern_names = { - "", - "border", - "bricks", - "circle", - "creeper", - "cross", - "curly_border", - "diagonal_up_left", - "diagonal_up_right", - "diagonal_right", - "diagonal_left", - "flower", - "gradient", - "gradient_up", - "half_horizontal_bottom", - "half_horizontal", - "half_vertical", - "half_vertical_right", - "thing", - "rhombus", - "skull", - "small_stripes", - "square_bottom_left", - "square_bottom_right", - "square_top_left", - "square_top_right", - "straight_cross", - "stripe_bottom", - "stripe_center", - "stripe_downleft", - "stripe_downright", - "stripe_left", - "stripe_middle", - "stripe_right", - "stripe_top", - "triangle_bottom", - "triangle_top", - "triangles_bottom", - "triangles_top", -} - -local colors_reverse = {} -for k,v in pairs(mcl_banners.colors) do - colors_reverse["mcl_banners:banner_item_"..v[1]] = k -end - -function mcl_banners.color_reverse(itemname) - return colors_reverse[itemname] -end - --- Add pattern/emblazoning crafting recipes -dofile(modpath.."/patterncraft.lua") - --- Overlay ratios (0-255) -local base_color_ratio = 224 -local layer_ratio = 255 - -local standing_banner_entity_offset = { x=0, y=-0.499, z=0 } -local hanging_banner_entity_offset = { x=0, y=-1.7, z=0 } - -local function rotation_level_to_yaw(rotation_level) - return (rotation_level * (math.pi/8)) + math.pi -end - -local function on_dig_banner(pos, node, digger) - -- Check protection - local name = digger:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - -- Drop item - local meta = minetest.get_meta(pos) - local item = meta:get_inventory():get_stack("banner", 1) - if not item:is_empty() then - minetest.handle_node_drops(pos, {item:to_string()}, digger) - else - minetest.handle_node_drops(pos, {"mcl_banners:banner_item_white"}, digger) - end - -- Remove node - minetest.remove_node(pos) -end - -local function on_destruct_banner(pos, hanging) - local offset, nodename - if hanging then - offset = hanging_banner_entity_offset - nodename = "mcl_banners:hanging_banner" - else - offset = standing_banner_entity_offset - nodename = "mcl_banners:standing_banner" - end - -- Find this node's banner entity and remove it - local checkpos = vector.add(pos, offset) - local objects = minetest.get_objects_inside_radius(checkpos, 0.5) - for _, v in ipairs(objects) do - local ent = v:get_luaentity() - if ent and ent.name == nodename then - v:remove() - end - end -end - -local function on_destruct_standing_banner(pos) - return on_destruct_banner(pos, false) -end - -local function on_destruct_hanging_banner(pos) - return on_destruct_banner(pos, true) -end - -function mcl_banners.make_banner_texture(base_color, layers) - local colorize - if mcl_banners.colors[base_color] then - colorize = mcl_banners.colors[base_color][4] - end - if colorize then - -- Base texture with base color - local base = "(mcl_banners_banner_base.png^[mask:mcl_banners_base_inverted.png)^((mcl_banners_banner_base.png^[colorize:"..colorize..":"..base_color_ratio..")^[mask:mcl_banners_base.png)" - - -- Optional pattern layers - if layers then - local finished_banner = base - for l=1, #layers do - local layerinfo = layers[l] - local pattern = "mcl_banners_" .. layerinfo.pattern .. ".png" - local color = mcl_banners.colors[layerinfo.color][4] - - -- Generate layer texture - local layer = "(("..pattern.."^[colorize:"..color..":"..layer_ratio..")^[mask:"..pattern..")" - - finished_banner = finished_banner .. "^" .. layer - end - return finished_banner - end - return base - else - return "mcl_banners_banner_base.png" - end -end - -local function spawn_banner_entity(pos, hanging, itemstack) - local banner - if hanging then - banner = minetest.add_entity(pos, "mcl_banners:hanging_banner") - else - banner = minetest.add_entity(pos, "mcl_banners:standing_banner") - end - if banner == nil then - return banner - end - local imeta = itemstack:get_meta() - local layers_raw = imeta:get_string("layers") - local layers = minetest.deserialize(layers_raw) - local colorid = mcl_banners.color_reverse(itemstack:get_name()) - banner:get_luaentity():_set_textures(colorid, layers) - local mname = imeta:get_string("name") - if mname and mname ~= "" then - banner:get_luaentity()._item_name = mname - banner:get_luaentity()._item_description = imeta:get_string("description") - end - - return banner -end - -local function respawn_banner_entity(pos, node, force) - local hanging = node.name == "mcl_banners:hanging_banner" - local offset - if hanging then - offset = hanging_banner_entity_offset - else - offset = standing_banner_entity_offset - end - -- Check if a banner entity already exists - local bpos = vector.add(pos, offset) - local objects = minetest.get_objects_inside_radius(bpos, 0.5) - for _, v in ipairs(objects) do - local ent = v:get_luaentity() - if ent and (ent.name == "mcl_banners:standing_banner" or ent.name == "mcl_banners:hanging_banner") then - if force then - v:remove() - else - return - end - end - end - -- Spawn new entity - local meta = minetest.get_meta(pos) - local banner_item = meta:get_inventory():get_stack("banner", 1) - local banner_entity = spawn_banner_entity(bpos, hanging, banner_item) - - -- Set rotation - local rotation_level = meta:get_int("rotation_level") - local final_yaw = rotation_level_to_yaw(rotation_level) - banner_entity:set_yaw(final_yaw) -end - --- Banner nodes. --- These are an invisible nodes which are only used to destroy the banner entity. --- All the important banner information (such as color) is stored in the entity. --- It is used only used internally. - --- Standing banner node --- This one is also used for the help entry to avoid spamming the help with 16 entries. -minetest.register_node("mcl_banners:standing_banner", { - _doc_items_entry_name = S("Banner"), - _doc_items_image = "mcl_banners_item_base.png^mcl_banners_item_overlay.png", - _doc_items_longdesc = S("Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting."), - _doc_items_usagehelp = S("Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.").."\n".. -S("You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer."), - walkable = false, - is_ground_content = false, - paramtype = "light", - sunlight_propagates = true, - drawtype = "nodebox", - -- Nodebox is drawn as fallback when the entity is missing, so that the - -- banner node is never truly invisible. - -- If the entity is drawn, the nodebox disappears within the real banner mesh. - node_box = { - type = "fixed", - fixed = { -1/32, -0.49, -1/32, 1/32, 1.49, 1/32 }, - }, - -- This texture is based on the banner base texture - tiles = { "mcl_banners_fallback_wood.png" }, - - inventory_image = "mcl_banners_item_base.png", - wield_image = "mcl_banners_item_base.png", - - selection_box = {type = "fixed", fixed= {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} }, - groups = {axey=1,handy=1, attached_node = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1, material_wood=1, dig_by_piston=1, flammable=-1 }, - stack_max = 16, - sounds = node_sounds, - drop = "", -- Item drops are handled in entity code - - on_dig = on_dig_banner, - on_destruct = on_destruct_standing_banner, - on_punch = function(pos, node) - respawn_banner_entity(pos, node) - end, - _mcl_hardness = 1, - _mcl_blast_resistance = 1, - on_rotate = function(pos, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local meta = minetest.get_meta(pos) - local rot = meta:get_int("rotation_level") - rot = (rot - 1) % 16 - meta:set_int("rotation_level", rot) - respawn_banner_entity(pos, node, true) - return true - else - return false - end - end, -}) - --- Hanging banner node -minetest.register_node("mcl_banners:hanging_banner", { - walkable = false, - is_ground_content = false, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - drawtype = "nodebox", - inventory_image = "mcl_banners_item_base.png", - wield_image = "mcl_banners_item_base.png", - tiles = { "mcl_banners_fallback_wood.png" }, - node_box = { - type = "wallmounted", - wall_side = { -0.49, 0.41, -0.49, -0.41, 0.49, 0.49 }, - wall_top = { -0.49, 0.41, -0.49, -0.41, 0.49, 0.49 }, - wall_bottom = { -0.49, -0.49, -0.49, -0.41, -0.41, 0.49 }, - }, - selection_box = {type = "wallmounted", wall_side = {-0.5, -0.5, -0.5, -4/16, 0.5, 0.5} }, - groups = {axey=1,handy=1, attached_node = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1, material_wood=1, flammable=-1 }, - stack_max = 16, - sounds = node_sounds, - drop = "", -- Item drops are handled in entity code - - on_dig = on_dig_banner, - on_destruct = on_destruct_hanging_banner, - on_punch = function(pos, node) - respawn_banner_entity(pos, node) - end, - _mcl_hardness = 1, - _mcl_blast_resistance = 1, - on_rotate = function(pos, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local r = screwdriver.rotate.wallmounted(pos, node, mode) - node.param2 = r - minetest.swap_node(pos, node) - local meta = minetest.get_meta(pos) - local rot = 0 - if node.param2 == 2 then - rot = 12 - elseif node.param2 == 3 then - rot = 4 - elseif node.param2 == 4 then - rot = 0 - elseif node.param2 == 5 then - rot = 8 - end - meta:set_int("rotation_level", rot) - respawn_banner_entity(pos, node, true) - return true - else - return false - end - end, -}) - --- for pattern_name, pattern in pairs(patterns) do -for colorid, colortab in pairs(mcl_banners.colors) do - for i, pattern_name in ipairs(pattern_names) do - local itemid = colortab[1] - local desc = colortab[2] - local wool = colortab[3] - local colorize = colortab[4] - - local itemstring - if pattern_name == "" then - itemstring = "mcl_banners:banner_item_" .. itemid - else - itemstring = "mcl_banners:banner_preview" .. "_" .. pattern_name .. "_" .. itemid - end - - local inv - local base - local finished_banner - if pattern_name == "" then - if colorize then - -- Base texture with base color - base = "mcl_banners_item_base.png^(mcl_banners_item_overlay.png^[colorize:"..colorize..")^[resize:32x32" - else - base = "mcl_banners_item_base.png^mcl_banners_item_overlay.png^[resize:32x32" - end - finished_banner = base - else - -- Banner item preview background - base = "mcl_banners_item_base.png^(mcl_banners_item_overlay.png^[colorize:#CCCCCC)^[resize:32x32" - - desc = S("Preview Banner") - - local pattern = "mcl_banners_" .. pattern_name .. ".png" - local color = colorize - - -- Generate layer texture - - -- TODO: The layer texture in the icon is squished - -- weirdly because the width/height aspect ratio of - -- the banner icon is 1:1.5, whereas the aspect ratio - -- of the banner entity is 1:2. A solution would be to - -- redraw the pattern textures as low-resolution pixel - -- art and use that instead. - - local layer = "(([combine:20x40:-2,-2="..pattern.."^[resize:16x24^[colorize:"..color..":"..layer_ratio.."))" - - function escape(text) - return text:gsub("%^", "\\%^"):gsub(":", "\\:") -- :gsub("%(", "\\%("):gsub("%)", "\\%)") - end - - finished_banner = "[combine:32x32:0,0=" .. escape(base) .. ":8,4=" .. escape(layer) - end - - inv = finished_banner - - -- Banner items. - -- This is the player-visible banner item. It comes in 16 base colors with a lot of patterns. - -- The multiple items are really only needed for the different item images. - -- TODO: Combine the items into only 1 item. - local groups - if pattern_name == "" then - groups = { banner = 1, deco_block = 1, flammable = -1 } - else - groups = { not_in_creative_inventory = 1 } - end - - minetest.register_craftitem(itemstring, { - description = desc, - _tt_help = S("Paintable decoration"), - _doc_items_create_entry = false, - inventory_image = inv, - wield_image = inv, - -- Banner group groups together the banner items, but not the nodes. - -- Used for crafting. - groups = groups, - stack_max = 16, - - on_place = function(itemstack, placer, pointed_thing) - local above = pointed_thing.above - local under = pointed_thing.under - - local node_under = minetest.get_node(under) - if placer and not placer:get_player_control().sneak then - -- Use pointed node's on_rightclick function first, if present - if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then - return minetest.registered_nodes[node_under.name].on_rightclick(under, node_under, placer, itemstack) or itemstack - end - - if minetest.get_modpath("mcl_cauldrons") then - -- Use banner on cauldron to remove the top-most layer. This reduces the water level by 1. - local new_node - if node_under.name == "mcl_cauldrons:cauldron_3" then - new_node = "mcl_cauldrons:cauldron_2" - elseif node_under.name == "mcl_cauldrons:cauldron_2" then - new_node = "mcl_cauldrons:cauldron_1" - elseif node_under.name == "mcl_cauldrons:cauldron_1" then - new_node = "mcl_cauldrons:cauldron" - elseif node_under.name == "mcl_cauldrons:cauldron_3r" then - new_node = "mcl_cauldrons:cauldron_2r" - elseif node_under.name == "mcl_cauldrons:cauldron_2r" then - new_node = "mcl_cauldrons:cauldron_1r" - elseif node_under.name == "mcl_cauldrons:cauldron_1r" then - new_node = "mcl_cauldrons:cauldron" - end - if new_node then - local imeta = itemstack:get_meta() - local layers_raw = imeta:get_string("layers") - local layers = minetest.deserialize(layers_raw) - if type(layers) == "table" and #layers > 0 then - table.remove(layers) - imeta:set_string("layers", minetest.serialize(layers)) - local newdesc = mcl_banners.make_advanced_banner_description(itemstack:get_definition().description, layers) - local mname = imeta:get_string("name") - -- Don't change description if item has a name - if mname == "" then - imeta:set_string("description", newdesc) - end - end - - -- Washing off reduces the water level by 1. - -- (It is possible to waste water if the banner had 0 layers.) - minetest.set_node(pointed_thing.under, {name=new_node}) - - -- Play sound (from mcl_potions mod) - minetest.sound_play("mcl_potions_bottle_pour", {pos=pointed_thing.under, gain=0.5, max_hear_range=16}, true) - - return itemstack - end - end - end - - -- Place the node! - local hanging = false - - -- Standing or hanging banner. The placement rules are enforced by the node definitions - local _, success = minetest.item_place_node(ItemStack("mcl_banners:standing_banner"), placer, pointed_thing) - if not success then - -- Forbidden on ceiling - if pointed_thing.under.y ~= pointed_thing.above.y then - return itemstack - end - _, success = minetest.item_place_node(ItemStack("mcl_banners:hanging_banner"), placer, pointed_thing) - if not success then - return itemstack - end - hanging = true - end - local place_pos - if minetest.registered_nodes[node_under.name].buildable_to then - place_pos = under - else - place_pos = above - end - local bnode = minetest.get_node(place_pos) - if bnode.name ~= "mcl_banners:standing_banner" and bnode.name ~= "mcl_banners:hanging_banner" then - minetest.log("error", "[mcl_banners] The placed banner node is not what the mod expected!") - return itemstack - end - local meta = minetest.get_meta(place_pos) - local inv = meta:get_inventory() - inv:set_size("banner", 1) - local store_stack = ItemStack(itemstack) - store_stack:set_count(1) - inv:set_stack("banner", 1, store_stack) - - -- Spawn entity - local entity_place_pos - if hanging then - entity_place_pos = vector.add(place_pos, hanging_banner_entity_offset) - else - entity_place_pos = vector.add(place_pos, standing_banner_entity_offset) - end - local banner_entity = spawn_banner_entity(entity_place_pos, hanging, itemstack) - -- Set rotation - local final_yaw, rotation_level - if hanging then - local pdir = vector.direction(pointed_thing.under, pointed_thing.above) - final_yaw = minetest.dir_to_yaw(pdir) - if pdir.x > 0 then - rotation_level = 4 - elseif pdir.z > 0 then - rotation_level = 8 - elseif pdir.x < 0 then - rotation_level = 12 - else - rotation_level = 0 - end - else - -- Determine the rotation based on player's yaw - local yaw = placer:get_look_horizontal() - -- Select one of 16 possible rotations (0-15) - rotation_level = round((yaw / (math.pi*2)) * 16) - if rotation_level >= 16 then - rotation_level = 0 - end - final_yaw = rotation_level_to_yaw(rotation_level) - end - meta:set_int("rotation_level", rotation_level) - - if banner_entity then - banner_entity:set_yaw(final_yaw) - end - - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - minetest.sound_play({name="default_place_node_hard", gain=1.0}, {pos = place_pos}, true) - - return itemstack - end, - - _mcl_generate_description = function(itemstack) - local meta = itemstack:get_meta() - local layers_raw = meta:get_string("layers") - if not layers_raw then - return nil - end - local layers = minetest.deserialize(layers_raw) - local desc = itemstack:get_definition().description - local newdesc = mcl_banners.make_advanced_banner_description(desc, layers) - meta:set_string("description", newdesc) - return newdesc - end, - }) - - if mod_mcl_core and minetest.get_modpath("mcl_wool") and pattern_name == "" then - minetest.register_craft({ - output = itemstring, - recipe = { - { wool, wool, wool }, - { wool, wool, wool }, - { "", "mcl_core:stick", "" }, - } - }) - end - - if mod_doc then - -- Add item to node alias - doc.add_entry_alias("nodes", "mcl_banners:standing_banner", "craftitems", itemstring) - end - end -end - -if mod_doc then - -- Add item to node alias - doc.add_entry_alias("nodes", "mcl_banners:standing_banner", "nodes", "mcl_banners:hanging_banner") -end - - --- Banner entities. -local entity_standing = { - physical = false, - collide_with_objects = false, - visual = "mesh", - mesh = "amc_banner.b3d", - visual_size = { x=2.499, y=2.499 }, - textures = {mcl_banners.make_banner_texture()}, - pointable = false, - - _base_color = nil, -- base color of banner - _layers = nil, -- table of layers painted over the base color. - -- This is a table of tables with each table having the following fields: - -- color: layer color ID (see colors table above) - -- pattern: name of pattern (see list above) - - get_staticdata = function(self) - local out = { _base_color = self._base_color, _layers = self._layers, _name = self._name } - return minetest.serialize(out) - end, - on_activate = function(self, staticdata) - if staticdata and staticdata ~= "" then - local inp = minetest.deserialize(staticdata) - self._base_color = inp._base_color - self._layers = inp._layers - self._name = inp._name - self.object:set_properties({ - textures = {mcl_banners.make_banner_texture(self._base_color, self._layers)}, - }) - end - -- Make banner slowly swing - self.object:set_animation({x=0, y=80}, 25) - self.object:set_armor_groups({immortal=1}) - end, - - -- Set the banner textures. This function can be used by external mods. - -- Meaning of parameters: - -- * self: Lua entity reference to entity. - -- * other parameters: Same meaning as in mcl_banners.make_banner_texture - _set_textures = function(self, base_color, layers) - if base_color then - self._base_color = base_color - end - if layers then - self._layers = layers - end - self.object:set_properties({textures = {mcl_banners.make_banner_texture(self._base_color, self._layers)}}) - end, -} -minetest.register_entity("mcl_banners:standing_banner", entity_standing) - -local entity_hanging = table.copy(entity_standing) -entity_hanging.mesh = "amc_banner_hanging.b3d" -minetest.register_entity("mcl_banners:hanging_banner", entity_hanging) - --- FIXME: Prevent entity destruction by /clearobjects -minetest.register_lbm({ - label = "Respawn banner entities", - name = "mcl_banners:respawn_entities", - run_at_every_load = true, - nodenames = {"mcl_banners:standing_banner", "mcl_banners:hanging_banner"}, - action = function(pos, node) - respawn_banner_entity(pos, node) - end, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:banner", - burntime = 15, -}) - diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.de.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.de.tr deleted file mode 100644 index d5077dc751..0000000000 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.de.tr +++ /dev/null @@ -1,77 +0,0 @@ -# textdomain: mcl_banners -White Banner=Weißes Banner -White=weiß -Grey Banner=Graues Banner -Grey=grau -Light Grey Banner=Hellgraues Banner -Light Grey=hellgrau -Black Banner=Schwarzes Banner -Black=schwarz -Red Banner=Rotes Banner -Red=rot -Yellow Banner=Gelbes Banner -Yellow=gelb -Green Banner=Grünes Banner -Green=grün -Cyan Banner=Türkises Banner -Cyan=türkis -Blue Banner=Blaues Banner -Blue=blau -Magenta Banner=Magenta Banner -Magenta=magenta -Orange Banner=Orange Banner -Orange=orange -Purple Banner=Violettes Banner -Violet=violett -Brown Banner=Braunes Banner -Brown=braun -Pink Banner=Rosa Banner -Pink=rosa -Lime Banner=Lindgrünes Banner -Lime=lindgrün -Light Blue Banner=Hellblaues Banner -Light Blue=hellblau -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Banner sind hohe farbige dekorative Blöcke. Sie können auf dem Boden und an Wände platziert werden. Banner können mit einer Vielzahl von Mustern mit Hilfe von Farbstoffen in der Fertigung bemalt werden. -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Benutzen Sie die Fertigung, um ein Muster auf einem Banner zu malen. Bemalte Banner können erneut bemalt werden, um verschiedene Muster zu ergeben. Sie können bis zu 12 Schichten auf einen Banner malen. Wenn ein Banner einen Farbverlauf hat, sind nur 3 Schichten möglich. -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Sie können ein Muster eines Banners kopieren, indem Sie zwei Banner der selben Grundfarbe in das Fertigungsgitter platzieren: Das eine muss bemalt sein, das andere leer. Außerdem können Sie ein Banner an einem Kessel mit Wasser benutzen, um seine oberste Schicht abzuwaschen. -@1 Bordure=Bord (@1) -@1 Bricks=Ziegel (@1) -@1 Roundel=Kugel (@1) -@1 Creeper Charge=Creeper-Figur (@1) -@1 Saltire=Andreaskreuz (@1) -@1 Bordure Indented=Gewellter Bord (@1) -@1 Per Bend Inverted=Schräglinke umgekehrte Teilung (@1) -@1 Per Bend Sinister Inverted=Schrägrechte umgekehrte Teilung (@1) -@1 Per Bend=Schräglinke Teilung (@1) -@1 Per Bend Sinister=Schrägrechte Teilung (@1) -@1 Flower Charge=Blumenfigur (@1) -@1 Gradient=Farbverlauf (@1) -@1 Base Gradient=Fußfarbverlauf (@1) -@1 Per Fess Inverted=Umgekehrte Teilung (@1) -@1 Per Fess=Teilung (@1) -@1 Per Pale=Spaltung (@1) -@1 Per Pale Inverted=Umgekehrte Spaltung (@1) -@1 Thing Charge=Dingsfigur (@1) -@1 Lozenge=Raute (@1) -@1 Skull Charge=Totenkopffigur (@1) -@1 Paly=Pfähle (@1) -@1 Base Dexter Canton=Rechtes Untereck (@1) -@1 Base Sinister Canton=Linkes Untereck (@1) -@1 Chief Dexter Canton=Rechtes Obereck (@1) -@1 Chief Sinister Canton=Linkes Obereck (@1) -@1 Cross=Kreuz (@1) -@1 Base=Fuß (@1) -@1 Pale=Pfahl (@1) -@1 Bend Sinister=Schräglinksbalken (@1) -@1 Bend=Schrägbalken (@1) -@1 Pale Dexter=Rechte Flanke (@1) -@1 Fess=Balken (@1) -@1 Pale Sinister=Linke Flanke (@1) -@1 Chief=Haupt (@1) -@1 Chevron=Sparren (@1) -@1 Chevron Inverted=Gegensparren (@1) -@1 Base Indented=Gezackter Fuß (@1) -@1 Chief Indented=Gezacktes Haupt (@1) -And one additional layer=Und eine zusätzliche Schicht -And @1 additional layers=Und @1 zusätzliche Schichten -Paintable decoration=Bemalbare Dekoration diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.es.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.es.tr deleted file mode 100644 index 1368bc5a16..0000000000 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.es.tr +++ /dev/null @@ -1,76 +0,0 @@ -# textdomain: mcl_banners -White Banner=Estandarte blanco -White=Blanco -Grey Banner=Estandarte gris -Grey=Gris -Light Grey Banner=Estandarte gris claro -Light Grey=Gris claro -Black Banner=Estandarte negro -Black=Negro -Red Banner=Estandarte roja -Red=Rojo -Yellow Banner=Estandarte amarilla -Yellow=Amarillo -Green Banner=Estandarte verde -Green=Verde -Cyan Banner=Estandarte cian -Cyan=Cian -Blue Banner=Estandarte azul -Blue=Azul -Magenta Banner=Estandarte magenta -Magenta=Magenta -Orange Banner=Estandarte naranja -Orange=Naranja -Purple Banner=Estandarte morada -Purple=Morado -Brown Banner=Estandarte marrón -Brown=Marrón -Pink Banner=Estandarte rosa -Pink=Rosa -Lime Banner=Estandarte verde lima -Lime=Verde lima -Light Blue Banner=Estandarte azul claro -Light Blue=Azul claro -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Los estandartes son bloques decorativos altos y coloridos. Se pueden colocar en el suelo y en las paredes. Los estandartes se pueden estampar con una variedad de patrones usando mucho tinte en la elaboración. -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Usa la elaboración para dibujar un patrón en la parte superior del estandarte. Los estandartes estampados pueden volver a estamparse para combinar varios patrones. Puede dibujar hasta 12 capas en un estandarte de esa manera. Si la pancarta incluye un degradado, solo son posibles 3 capas. -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Puede copiar el patrón de un estandarte colocando dos estandartes del mismo color en la cuadrícula de fabricación: una debe ser estampada, la otra debe estar limpia. Finalmente, puede usar un estandarte en un caldero con agua para lavar su capa superior. -@1 Bordure=Borde (@1) -@1 Bricks=Bloque (@1) -@1 Roundel=Medallón (@1) -@1 Creeper Charge=Carga de enredadera (@1) -@1 Saltire=Saltire (@1) -@1 Bordure Indented=Sangrado del borde (@1) -@1 Per Bend Inverted=Curva invertida (@1) -@1 Per Bend Sinister Inverted=Curva siniestra invertida (@1) -@1 Per Bend=Curva (@1) -@1 Per Bend Sinister=Curva siniestra (@1) -@1 Flower Charge=Carga de la flor (@1) -@1 Gradient=Farbverlauf (@1) -@1 Base Gradient=Zócalo Degradado (@1) -@1 Per Fess Inverted=División invertida (@1) -@1 Per Fess=División (@1) -@1 Per Pale=Palidez (@1) -@1 Per Pale Inverted=Palidez invertida (@1) -@1 Thing Charge=Carga de objeto (@1) -@1 Lozenge=Rombo (@1) -@1 Skull Charge=Carga de calabera (@1) -@1 Paly=Poster (@1) -@1 Base Dexter Canton=Zócalo inferior derecho (@1) -@1 Base Sinister Canton=Zócalo inferior izquierdo (@1) -@1 Chief Dexter Canton=Encabezado superior derecho (@1) -@1 Chief Sinister Canton=Encabezado superior izquierdo (@1) -@1 Cross=Cruce (@1) -@1 Base=Zócalo (@1) -@1 Pale=Palidez (@1) -@1 Bend Sinister=Curva siniestra (@1) -@1 Bend=Curva (@1) -@1 Pale Dexter=Palidez derecho (@1) -@1 Fess=División (@1) -@1 Pale Sinister=Palidez siniestra (@1) -@1 Chief=Encabezado (@1) -@1 Chevron=Viga (@1) -@1 Chevron Inverted=Viga invertida (@1) -@1 Base Indented=Zócalo sangrada (@1) -@1 Chief Indented=Sangrado del encabezado (@1) -And one additional layer=Y una capa adicional -And @1 additional layers=Y @1 capas adicionales diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.fr.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.fr.tr deleted file mode 100644 index cadf37c37a..0000000000 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.fr.tr +++ /dev/null @@ -1,77 +0,0 @@ -# textdomain: mcl_banners -White Banner=Bannière Blanche -White=Blanc -Grey Banner=Bannière Grise -Grey=Gris -Light Grey Banner=Bannière Gris Clair -Light Grey=Gris Clair -Black Banner=Bannière Noir -Black=Noir -Red Banner=Bannière Rouge -Red=Rouge -Yellow Banner=Bannière Jaune -Yellow=Jaune -Green Banner=Bannière Verte -Green=Vert -Cyan Banner=Bannière Cyan -Cyan=Cyan -Blue Banner=Bannière Bleue -Blue=Blue -Magenta Banner=Bannière Magenta -Magenta=Magenta -Orange Banner=Bannière Orange -Orange=Orange -Purple Banner=Bannière Violette -Violet=Violet -Brown Banner=Bannière Marron -Brown=Marron -Pink Banner=Bannière Rose -Pink=Rose -Lime Banner=Bannière Vert Clair -Lime=Vert Clair -Light Blue Banner=Bannière Bleue Clair -Light Blue=Bleu Clair -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Les bannières sont de grands blocs décoratifs colorés. Ils peuvent être placés au sol et aux murs. Les bannières peuvent arborées une variété de motifs en utilisant beaucoup de colorant dans l'artisanat. -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Utilisez l'artisanat pour dessiner un motif sur le dessus de la bannière. Les bannières blasonnées peuvent être à nouveau blasonnées pour combiner différents motifs. Vous pouvez dessiner jusqu'à 12 couches sur une bannière de cette façon. Si la bannière comprend un dégradé, seulement 3 couches sont possibles. -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Vous pouvez copier le motif d'une bannière en plaçant deux bannières de la même couleur dans la grille de fabrication: l'une doit être décorée, l'autre doit être propre. Enfin, vous pouvez utiliser une bannière sur un chaudron avec de l'eau pour laver sa couche la plus haute. -@1 Bordure=Bordure (@1) -@1 Bricks=Blocs (@1) -@1 Roundel=Cocarde (@1) -@1 Creeper Charge=Face de Creeper (@1) -@1 Saltire=Saltire (@1) -@1 Bordure Indented=Bordure en retrait (@1) -@1 Per Bend Inverted=Division inclinée inversé (@1) -@1 Per Bend Sinister Inverted=Division oblique inversé (@1) -@1 Per Bend=Division inclinée (@1) -@1 Per Bend Sinister=Division oblique (@1) -@1 Flower Charge=Figure Fleur (@1) -@1 Gradient=Dégradé (@1) -@1 Base Gradient=Dégradé de couleurs (@1) -@1 Per Fess Inverted=Division inverse (@1) -@1 Per Fess=Division (@1) -@1 Per Pale=Division (@1) -@1 Per Pale Inverted=Division inverse (@1) -@1 Thing Charge=Chose (@ 1) -@1 Lozenge=Rhombus (@1) -@1 Skull Charge=Figure de crâne (@1) -@1 Paly=Pieux (@1) -@1 Base Dexter Canton=Coin inférieur droit (@1) -@1 Base Sinister Canton=Coin inférieur gauche (@1) -@1 Chief Dexter Canton=Coin supérieur droit (@1) -@1 Chief Sinister Canton=Coin supérieur gauche (@1) -@1 Cross=Croix (@1) -@1 Base=Pieds (@1) -@1 Pale=Mise (@1) -@1 Bend Sinister=Barre gauche inclinée (@1) -@1 Bend=Barre inclinée (@1) -@1 Pale Dexter=Flanc droit (@1) -@1 Fess=Bar (@1) -@1 Pale Sinister=Flanc gauche (@1) -@1 Chief=Principal (@1) -@1 Chevron=Chevron (@1) -@1 Chevron Inverted=Contre-chevrons (@1) -@1 Base Indented=Pied dentelé (@1)t -@1 Chief Indented=Tête dentelée (@1) -And one additional layer=Et une couche supplémentaire -And @1 additional layers=Et @1 couches supplémentaires -Paintable decoration=Décoration à peindre diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.pl.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.pl.tr deleted file mode 100644 index 9a21c08cf7..0000000000 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.pl.tr +++ /dev/null @@ -1,77 +0,0 @@ -# textdomain: mcl_banners -White Banner=Biały sztandar -White=Biały -Grey Banner=Szary sztandar -Grey=Szary -Light Grey Banner=Jasnoszary sztandar -Light Grey=Jasnoszary -Black Banner=Czarny sztandar -Black=Czarny -Red Banner=Czerwony sztandar -Red=Czerwony -Yellow Banner=Żółty sztandar -Yellow=Żółty -Green Banner=Zielony sztandar -Green=Zielony -Cyan Banner=Błękitny sztandar -Cyan=Błękitny -Blue Banner=Niebieski sztandar -Blue=Niebieski -Magenta Banner=Karmazynowy sztandar -Magenta=Karmazynowy -Orange Banner=Pomarańczowy sztandar -Orange=Pomarańczowy -Purple Banner=Fioletowy sztandar -Violet=Fioletowy -Brown Banner=Brązowy sztandar -Brown=Brązowy -Pink Banner=Różowy sztandar -Pink=Różowy -Lime Banner=Jasnozielony sztandar -Lime=Jasnozielony -Light Blue Banner=Jasnoniebieski sztandar -Light Blue=Jasnoniebieski -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Sztandary są kolorowymi dekoracyjnymi blokami. Mogą być postawione na ziemi i na ścianach. Sztandary mogą być upiększone różnymi wzorami przy użyciu sporej ilości farby podczas wytwarzania. -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Użyj wytwarzania aby narysować wzór na górze sztandaru. Upiększone sztandary mogą być upiększone ponownie by połączyć kilka wzorów. Możesz narysować do 12 warstw na sztandarze w ten sposób. Jeśli baner zawiera gradient tylko 3 warstwy są możliwe. -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Możesz skopiować wzór sztandaru kładąc dwa sztandary tego samego koloru w siatce wytwarzania. Jeden z nich musi być upiększony, drugi czysty. Możesz również użyć sztandar na kociołku z wodą aby zmyć górną warstwę. -@1 Bordure=@1 z obramowaniem -@1 Bricks=@1 murowany -@1 Roundel=@1 krąg -@1 Creeper Charge=@1 creeper -@1 Saltire=@1 skośny krzyż -@1 Bordure Indented=@1 z ząbkowanym obramowaniem -@1 Per Bend Inverted=@1 z lewą dolną połową -@1 Per Bend Sinister Inverted=@1 z prawą dolną połową -@1 Per Bend=@1 z prawą górną połową -@1 Per Bend Sinister=@1 z lewą górną połową -@1 Flower Charge=@1 kwiat -@1 Gradient=@1 gradient -@1 Base Gradient=@1 odwrócony -@1 Per Fess Inverted=@1 z dolną połową -@1 Per Fess=@1 z górną połową -@1 Per Pale=@1 z lewą połową -@1 Per Pale Inverted=@1 z prawą połową -@1 Thing Charge=@1 kształt czegoś -@1 Lozenge=@1 romb -@1 Skull Charge=@1 kształt czaszki -@1 Paly=@1 z pionowymi paskami -@1 Base Dexter Canton=@1 lewy dolny róg -@1 Base Sinister Canton=@1 prawy dolny róg -@1 Chief Dexter Canton=@1 lewy górny róg -@1 Chief Sinister Canton=@1 prawy górny róg -@1 Cross=@1 krzyż -@1 Base=@1 dolny -@1 Pale=@1 pionowy pasek -@1 Bend Sinister=@1 odwrócony skos -@1 Bend=@1 skos -@1 Pale Dexter=@1 lewy -@1 Fess=@1 poziomy pasek -@1 Pale Sinister=@1 prawy -@1 Chief=@1 górny -@1 Chevron=@1 dolny trójkąt -@1 Chevron Inverted=@1 górny trójkąt -@1 Base Indented=@1 ząbkowany dolny -@1 Chief Indented=@1 ząbkowany górny -And one additional layer=I jedna dodatkowa warstwa -And @1 additional layers=I @1 dodatkowych warstw -Paintable decoration=Dekoracja do malowania diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr deleted file mode 100644 index a6cee5a671..0000000000 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr +++ /dev/null @@ -1,77 +0,0 @@ -# textdomain: mcl_banners -White Banner=Белый флаг -White=Белый -Grey Banner=Серый флаг -Grey=Серый -Light Grey Banner=Светло-серый флаг -Light Grey=Светло-серый -Black Banner=Чёрный флаг -Black=Чёрный -Red Banner=Красный флаг -Red=Красный -Yellow Banner=Жёлтый флаг -Yellow=Жёлтый -Green Banner=Зелёный флаг -Green=Зелёный -Cyan Banner=Голубой флаг -Cyan=Голубой -Blue Banner=Синий флаг -Blue=Синий -Magenta Banner=Фиолетовый флаг -Magenta=Фиолетовый -Orange Banner=Оранжевый флаг -Orange=Оранжевый -Purple Banner=Пурпурный флаг -Violet=Пурпурный -Brown Banner=Коричневый флаг -Brown=Коричневый -Pink Banner=Розовый флаг -Pink=Розовый -Lime Banner=Зелёный лаймовый флаг -Lime=Зелёный лаймовый -Light Blue Banner=Светло-голубой флаг -Light Blue=Светло-голубой -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Баннеры - высокие цветные декоративные блоки. Их можно размещать на полу и на стенах. Флаги можно украшать разнообразными узорами при помощью красителей во время создания. -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Используйте крафтинг, чтобы нарисовать узор поверх флага. Украшенные флаги можно украсить повторно, чтобы сочетать разные узоры. Таким способом вы можете нарисовать до 12 слоев на одном флаге. Если флаг содержит градиент, возможно только 3 слоя. -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Вы можете скопировать рисунок флага, поместив два флага одного цвета в крафтинговую решётку - один должен быть украшенный, другой - чистый. Наконец, вы можете [использовать] флаг на котле с водой для смывания верхнего слоя. -@1 Bordure=@1 Кайма -@1 Bricks=@1 Кирпичи -@1 Roundel=@1 Рондо -@1 Creeper Charge=@1 Атака крипера -@1 Saltire=@1 Андреевский крест -@1 Bordure Indented=@1 Кайма с отступом -@1 Per Bend Inverted=@1 Повторяющийся изгиб поворотом -@1 Per Bend Sinister Inverted=@1 Повторяющийся зловещий изгиб с поворотом -@1 Per Bend=@1 Повторяющийся изгиб -@1 Per Bend Sinister=@1 Зловещий изгиб -@1 Flower Charge=@1 Забота о цветке -@1 Gradient=@1 Градиент -@1 Base Gradient=@1 Основной градиент -@1 Per Fess Inverted=@1 Обратное деление щита -@1 Per Fess=@1 Деление щита -@1 Per Pale=@1 Вертикальное деление щита -@1 Per Pale Inverted=@1 Вертикальное обратное деление -@1 Thing Charge=@1 Атака существа -@1 Lozenge=@1 Ромб -@1 Skull Charge=@1 Атака черепа -@1 Paly=@1 Бледный -@1 Base Dexter Canton=@1 Основной правый кант -@1 Base Sinister Canton=@1 Основной зловещий кант -@1 Chief Dexter Canton=@1 Главный правый кант -@1 Chief Sinister Canton=@1 Главный зловещий кант -@1 Cross=@1 Крест -@1 Base=@1 Основа -@1 Pale=@1 Черта -@1 Bend Sinister=@1 Зловещий изгиб -@1 Bend=@1 Изгиб -@1 Pale Dexter=@1 Черты справа -@1 Fess=@1 Разделение -@1 Pale Sinister=@1 Бледный зловещий -@1 Chief=@1 Главный -@1 Chevron=@1 Шеврон -@1 Chevron Inverted=@1 Инвертированный шеврон -@1 Base Indented=@1 Инвертированный основной -@1 Chief Indented=@1 Инвертированный главный -And one additional layer=И один индивидуальный слой -And @1 additional layers=И @1 дополнительныйх слойёв -Paintable decoration=Художественное украшение diff --git a/mods/ITEMS/mcl_banners/locale/template.txt b/mods/ITEMS/mcl_banners/locale/template.txt deleted file mode 100644 index cb8ec0b0c6..0000000000 --- a/mods/ITEMS/mcl_banners/locale/template.txt +++ /dev/null @@ -1,77 +0,0 @@ -# textdomain: mcl_banners -White Banner= -White= -Grey Banner= -Grey= -Light Grey Banner= -Light Grey= -Black Banner= -Black= -Red Banner= -Red= -Yellow Banner= -Yellow= -Green Banner= -Green= -Cyan Banner= -Cyan= -Blue Banner= -Blue= -Magenta Banner= -Magenta= -Orange Banner= -Orange= -Purple Banner= -Violet= -Brown Banner= -Brown= -Pink Banner= -Pink= -Lime Banner= -Lime= -Light Blue Banner= -Light Blue= -Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.= -Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.= -You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.= -@1 Bordure= -@1 Bricks= -@1 Roundel= -@1 Creeper Charge= -@1 Saltire= -@1 Bordure Indented= -@1 Per Bend Inverted= -@1 Per Bend Sinister Inverted= -@1 Per Bend= -@1 Per Bend Sinister= -@1 Flower Charge= -@1 Gradient= -@1 Base Gradient= -@1 Per Fess Inverted= -@1 Per Fess= -@1 Per Pale= -@1 Per Pale Inverted= -@1 Thing Charge= -@1 Lozenge= -@1 Skull Charge= -@1 Paly= -@1 Base Dexter Canton= -@1 Base Sinister Canton= -@1 Chief Dexter Canton= -@1 Chief Sinister Canton= -@1 Cross= -@1 Base= -@1 Pale= -@1 Bend Sinister= -@1 Bend= -@1 Pale Dexter= -@1 Fess= -@1 Pale Sinister= -@1 Chief= -@1 Chevron= -@1 Chevron Inverted= -@1 Base Indented= -@1 Chief Indented= -And one additional layer= -And @1 additional layers= -Paintable decoration= diff --git a/mods/ITEMS/mcl_banners/mod.conf b/mods/ITEMS/mcl_banners/mod.conf deleted file mode 100644 index 8c3117206c..0000000000 --- a/mods/ITEMS/mcl_banners/mod.conf +++ /dev/null @@ -1,5 +0,0 @@ -name = mcl_banners -author = 22i -description = Adds decorative banners in different colors which can be emblazoned with patterns, offering a countless number of combinations. -depends = mcl_colors -optional_depends = mcl_sounds, mcl_core, mcl_wool, mcl_cauldrons, doc, screwdriver diff --git a/mods/ITEMS/mcl_banners/models/amc_banner.b3d b/mods/ITEMS/mcl_banners/models/amc_banner.b3d deleted file mode 100644 index 0e0d6d1c9e..0000000000 Binary files a/mods/ITEMS/mcl_banners/models/amc_banner.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/models/amc_banner_hanging.b3d b/mods/ITEMS/mcl_banners/models/amc_banner_hanging.b3d deleted file mode 100644 index 86ec07a038..0000000000 Binary files a/mods/ITEMS/mcl_banners/models/amc_banner_hanging.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/patterncraft.lua b/mods/ITEMS/mcl_banners/patterncraft.lua deleted file mode 100644 index 767235b1e2..0000000000 --- a/mods/ITEMS/mcl_banners/patterncraft.lua +++ /dev/null @@ -1,558 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local N = function(s) return s end - --- Pattern crafting. This file contains the code for crafting all the --- emblazonings you can put on the banners. It's quite complicated; --- run-of-the-mill crafting won't work here. - --- Maximum number of layers which can be put on a banner by crafting. -local max_layers_crafting = 12 - --- Max. number lines in the descriptions for the banner layers. --- This is done to avoid huge tooltips. -local max_layer_lines = 6 - --- List of patterns with crafting rules -local d = "group:dye" -- dye -local e = "" -- empty slot (one of them must contain the banner) -local patterns = { - ["border"] = { - name = N("@1 Bordure"), - { d, d, d }, - { d, e, d }, - { d, d, d }, - }, - ["bricks"] = { - name = N("@1 Bricks"), - type = "shapeless", - { e, "mcl_core:brick_block", d }, - }, - ["circle"] = { - name = N("@1 Roundel"), - { e, e, e }, - { e, d, e }, - { e, e, e }, - }, - ["creeper"] = { - name = N("@1 Creeper Charge"), - type = "shapeless", - { e, "mcl_heads:creeper", d }, - }, - ["cross"] = { - name = N("@1 Saltire"), - { d, e, d }, - { e, d, e }, - { d, e, d }, - }, - ["curly_border"] = { - name = N("@1 Bordure Indented"), - type = "shapeless", - { e, "mcl_core:vine", d }, - }, - ["diagonal_up_left"] = { - name = N("@1 Per Bend Inverted"), - { e, e, e }, - { d, e, e }, - { d, d, e }, - }, - ["diagonal_up_right"] = { - name = N("@1 Per Bend Sinister Inverted"), - { e, e, e }, - { e, e, d }, - { e, d, d }, - }, - ["diagonal_right"] = { - name = N("@1 Per Bend"), - { e, d, d }, - { e, e, d }, - { e, e, e }, - }, - ["diagonal_left"] = { - name = N("@1 Per Bend Sinister"), - { d, d, e }, - { d, e, e }, - { e, e, e }, - }, - ["flower"] = { - name = N("@1 Flower Charge"), - type = "shapeless", - { e, "mcl_flowers:oxeye_daisy", d }, - }, - ["gradient"] = { - name = N("@1 Gradient"), - { d, e, d }, - { e, d, e }, - { e, d, e }, - }, - ["gradient_up"] = { - name = N("@1 Base Gradient"), - { e, d, e }, - { e, d, e }, - { d, e, d }, - }, - ["half_horizontal_bottom"] = { - name = N("@1 Per Fess Inverted"), - { e, e, e }, - { d, d, d }, - { d, d, d }, - }, - ["half_horizontal"] = { - name = N("@1 Per Fess"), - { d, d, d }, - { d, d, d }, - { e, e, e }, - }, - ["half_vertical"] = { - name = N("@1 Per Pale"), - { d, d, e }, - { d, d, e }, - { d, d, e }, - }, - ["half_vertical_right"] = { - name = N("@1 Per Pale Inverted"), - { e, d, d }, - { e, d, d }, - { e, d, d }, - }, - ["thing"] = { - -- Symbol used for the “Thing”: U+1F65D 🙝 - - name = N("@1 Thing Charge"), - type = "shapeless", - { e, "mcl_core:apple_gold_enchanted", d }, - }, - ["rhombus"] = { - name = N("@1 Lozenge"), - { e, d, e }, - { d, e, d }, - { e, d, e }, - }, - ["skull"] = { - name = N("@1 Skull Charge"), - type = "shapeless", - { e, "mcl_heads:wither_skeleton", d }, - }, - ["small_stripes"] = { - name = N("@1 Paly"), - { d, e, d }, - { d, e, d }, - { e, e, e }, - }, - ["square_bottom_left"] = { - name = N("@1 Base Dexter Canton"), - { e, e, e }, - { e, e, e }, - { d, e, e }, - }, - ["square_bottom_right"] = { - name = N("@1 Base Sinister Canton"), - { e, e, e }, - { e, e, e }, - { e, e, d }, - }, - ["square_top_left"] = { - name = N("@1 Chief Dexter Canton"), - { d, e, e }, - { e, e, e }, - { e, e, e }, - }, - ["square_top_right"] = { - name = N("@1 Chief Sinister Canton"), - { e, e, d }, - { e, e, e }, - { e, e, e }, - }, - ["straight_cross"] = { - name = N("@1 Cross"), - { e, d, e }, - { d, d, d }, - { e, d, e }, - }, - ["stripe_bottom"] = { - name = N("@1 Base"), - { e, e, e }, - { e, e, e }, - { d, d, d }, - }, - ["stripe_center"] = { - name = N("@1 Pale"), - { e, d, e }, - { e, d, e }, - { e, d, e }, - }, - ["stripe_downleft"] = { - name = N("@1 Bend Sinister"), - { e, e, d }, - { e, d, e }, - { d, e, e }, - }, - ["stripe_downright"] = { - name = N("@1 Bend"), - { d, e, e }, - { e, d, e }, - { e, e, d }, - }, - ["stripe_left"] = { - name = N("@1 Pale Dexter"), - { d, e, e }, - { d, e, e }, - { d, e, e }, - }, - ["stripe_middle"] = { - name = N("@1 Fess"), - { e, e, e }, - { d, d, d }, - { e, e, e }, - }, - ["stripe_right"] = { - name = N("@1 Pale Sinister"), - { e, e, d }, - { e, e, d }, - { e, e, d }, - }, - ["stripe_top"] = { - name = N("@1 Chief"), - { d, d, d }, - { e, e, e }, - { e, e, e }, - }, - ["triangle_bottom"] = { - name = N("@1 Chevron"), - { e, e, e }, - { e, d, e }, - { d, e, d }, - }, - ["triangle_top"] = { - name = N("@1 Chevron Inverted"), - { d, e, d }, - { e, d, e }, - { e, e, e }, - }, - ["triangles_bottom"] = { - name = N("@1 Base Indented"), - { e, e, e }, - { d, e, d }, - { e, d, e }, - }, - ["triangles_top"] = { - name = N("@1 Chief Indented"), - { e, d, e }, - { d, e, d }, - { e, e, e }, - }, -} - --- Just a simple reverse-lookup table from dye itemstring to banner color ID --- to avoid some pointless future iterations. -local dye_to_colorid_mapping = {} -for colorid, colortab in pairs(mcl_banners.colors) do - dye_to_colorid_mapping[colortab[5]] = colorid -end - -local dye_to_itemid_mapping = {} -for colorid, colortab in pairs(mcl_banners.colors) do - dye_to_itemid_mapping[colortab[5]] = colortab[1] -end - --- Create a banner description containing all the layer names -function mcl_banners.make_advanced_banner_description(description, layers) - if layers == nil or #layers == 0 then - -- No layers, revert to default - return "" - else - local layerstrings = {} - for l=1, #layers do - -- Prevent excess length description - if l > max_layer_lines then - break - end - -- Layer text line. - local color = mcl_banners.colors[layers[l].color][6] - local pattern_name = patterns[layers[l].pattern].name - -- The pattern name is a format string - -- (e.g. “@1 Base” → “Yellow Base”) - table.insert(layerstrings, S(pattern_name, S(color))) - end - -- Warn about missing information - if #layers == max_layer_lines + 1 then - table.insert(layerstrings, S("And one additional layer")) - elseif #layers > max_layer_lines + 1 then - table.insert(layerstrings, S("And @1 additional layers", #layers - max_layer_lines)) - end - - -- Final string concatenations: Just a list of strings - local append = table.concat(layerstrings, "\n") - description = description .. "\n" .. minetest.colorize(mcl_colors.GRAY, append) - return description - end -end - ---[[ This is for handling all those complex pattern crafting recipes. -Parameters same as for minetest.register_craft_predict. -craft_predict is set true when called from minetest.craft_preview, in this case, this function -MUST NOT change the crafting grid. -]] -local function banner_pattern_craft(itemstack, player, old_craft_grid, craft_inv, craft_predict) - if minetest.get_item_group(itemstack:get_name(), "banner") ~= 1 then - return - end - - --[[ Basic item checks: Banners and dyes ]] - local banner -- banner item - local banner2 -- second banner item (used when copying) - local dye -- itemstring of the dye being used - local banner_index -- crafting inventory index of the banner - local banner2_index - for i = 1, player:get_inventory():get_size("craft") do - local itemname = old_craft_grid[i]:get_name() - if minetest.get_item_group(itemname, "banner") == 1 then - if not banner then - banner = old_craft_grid[i] - banner_index = i - elseif not banner2 then - banner2 = old_craft_grid[i] - banner2_index = i - else - return - end - -- Check if all dyes are equal - elseif minetest.get_item_group(itemname, "dye") == 1 then - if dye == nil then - dye = itemname - elseif itemname ~= dye then - return ItemStack("") - end - end - end - if not banner then - return - end - - --[[ Check copy ]] - if banner2 then - -- Two banners found: This means copying! - - local b1meta = banner:get_meta() - local b2meta = banner2:get_meta() - local b1layers_raw = b1meta:get_string("layers") - local b2layers_raw = b2meta:get_string("layers") - local b1layers = minetest.deserialize(b1layers_raw) - local b2layers = minetest.deserialize(b2layers_raw) - if type(b1layers) ~= "table" then - b1layers = {} - end - if type(b2layers) ~= "table" then - b2layers = {} - end - - -- For copying to be allowed, one banner has to have no layers while the other one has at least 1 layer. - -- The banner with layers will be used as a source. - local src_banner, src_layers, src_layers_raw, src_desc, src_index - if #b1layers == 0 and #b2layers > 0 then - src_banner = banner2 - src_layers = b2layers - src_layers_raw = b2layers_raw - src_desc = minetest.registered_items[src_banner:get_name()].description - src_index = banner2_index - elseif #b2layers == 0 and #b1layers > 0 then - src_banner = banner - src_layers = b1layers - src_layers_raw = b1layers_raw - src_desc = minetest.registered_items[src_banner:get_name()].description - src_index = banner_index - else - return ItemStack("") - end - - -- Set output metadata - local imeta = itemstack:get_meta() - imeta:set_string("layers", src_layers_raw) - -- Generate new description. This clears any (anvil) name from the original banners. - imeta:set_string("description", mcl_banners.make_advanced_banner_description(src_desc, src_layers)) - - if not craft_predict then - -- Don't destroy source banner so this recipe is a true copy - craft_inv:set_stack("craft", src_index, src_banner) - end - - return itemstack - end - - -- No two banners found - -- From here on we check which banner pattern should be added - - --[[ Check patterns ]] - - -- Get old layers - local ometa = banner:get_meta() - local layers_raw = ometa:get_string("layers") - local layers = minetest.deserialize(layers_raw) - if type(layers) ~= "table" then - layers = {} - end - -- Disallow crafting when a certain number of layers is reached or exceeded - if #layers >= max_layers_crafting then - return ItemStack("") - end - - local matching_pattern - local max_i = player:get_inventory():get_size("craft") - -- Find the matching pattern - for pattern_name, pattern in pairs(patterns) do - -- Shaped / fixed - if pattern.type == nil then - local pattern_ok = true - local inv_i = 1 - -- This complex code just iterates through the pattern slots one-by-one and compares them with the pattern - for p=1, #pattern do - local row = pattern[p] - for r=1, #row do - local itemname = old_craft_grid[inv_i]:get_name() - local pitem = row[r] - if (pitem == d and minetest.get_item_group(itemname, "dye") == 0) or (pitem == e and itemname ~= e and inv_i ~= banner_index) then - pattern_ok = false - break - end - inv_i = inv_i + 1 - if inv_i > max_i then - break - end - end - if inv_i > max_i then - break - end - end - -- Everything matched! We found our pattern! - if pattern_ok then - matching_pattern = pattern_name - break - end - - elseif pattern.type == "shapeless" then - local orig = pattern[1] - local no_mismatches_so_far = true - -- This code compares the craft grid with the required items - for o=1, #orig do - local item_ok = false - for i=1, max_i do - local itemname = old_craft_grid[i]:get_name() - if (orig[o] == e) or -- Empty slot: Always wins - (orig[o] ~= e and orig[o] == itemname) or -- non-empty slot: Exact item match required - (orig[o] == d and minetest.get_item_group(itemname, "dye") == 1) then -- Dye slot - item_ok = true - break - end - end - -- Sorry, item not found. :-( - if not item_ok then - no_mismatches_so_far = false - break - end - end - -- Ladies and Gentlemen, we have a winner! - if no_mismatches_so_far then - matching_pattern = pattern_name - break - end - end - - if matching_pattern then - break - end - end - if not matching_pattern then - return ItemStack("") - end - - -- Add the new layer and update other metadata - local color = dye_to_colorid_mapping[dye] - table.insert(layers, {pattern=matching_pattern, color=color}) - - local imeta = itemstack:get_meta() - imeta:set_string("layers", minetest.serialize(layers)) - - local mname = ometa:get_string("name") - -- Only change description if banner does not have a name - if mname == "" then - local odesc = itemstack:get_definition().description - local description = mcl_banners.make_advanced_banner_description(odesc, layers) - imeta:set_string("description", description) - else - imeta:set_string("description", ometa:get_string("description")) - imeta:set_string("name", mname) - end - - if craft_predict then - local itemid_prefix = "mcl_banners:banner_preview" - local coloritemid = dye_to_itemid_mapping[dye] - return ItemStack(itemid_prefix .. "_" .. matching_pattern .. "_" .. coloritemid) - else - return itemstack - end -end - -minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv) - return banner_pattern_craft(itemstack, player, old_craft_grid, craft_inv, true) -end) -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - return banner_pattern_craft(itemstack, player, old_craft_grid, craft_inv, false) -end) - --- Register crafting recipes for all the patterns -for pattern_name, pattern in pairs(patterns) do - -- Shaped and fixed recipes - if pattern.type == nil then - for colorid, colortab in pairs(mcl_banners.colors) do - local banner = "mcl_banners:banner_item_"..colortab[1] - local bannered = false - local recipe = {} - for row_id=1, #pattern do - local row = pattern[row_id] - local newrow = {} - for r=1, #row do - if row[r] == e and not bannered then - newrow[r] = banner - bannered = true - else - newrow[r] = row[r] - end - end - table.insert(recipe, newrow) - end - minetest.register_craft({ - output = banner, - recipe = recipe, - }) - end - -- Shapeless recipes - elseif pattern.type == "shapeless" then - for colorid, colortab in pairs(mcl_banners.colors) do - local banner = "mcl_banners:banner_item_"..colortab[1] - local orig = pattern[1] - local recipe = {} - for r=1, #orig do - if orig[r] == e then - recipe[r] = banner - else - recipe[r] = orig[r] - end - end - - minetest.register_craft({ - type = "shapeless", - output = banner, - recipe = recipe, - }) - end - end -end - --- Register crafting recipe for copying the banner pattern -for colorid, colortab in pairs(mcl_banners.colors) do - local banner = "mcl_banners:banner_item_"..colortab[1] - minetest.register_craft({ - type = "shapeless", - output = banner, - recipe = { banner, banner }, - }) -end diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_banner_base.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_banner_base.png deleted file mode 100644 index 3ccd925645..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_banner_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_base.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_base.png deleted file mode 100644 index 4a912ade69..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_base_inverted.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_base_inverted.png deleted file mode 100644 index d8365a4de8..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_base_inverted.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_border.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_border.png deleted file mode 100644 index 411282ec3e..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_border.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_bricks.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_bricks.png deleted file mode 100644 index e44eb051fd..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_circle.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_circle.png deleted file mode 100644 index 1ae3d39d43..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_circle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_creeper.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_creeper.png deleted file mode 100644 index 8b575d7707..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_creeper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_cross.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_cross.png deleted file mode 100644 index 314cf8e74d..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_cross.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_curly_border.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_curly_border.png deleted file mode 100644 index 2afcb0eff1..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_curly_border.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_left.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_left.png deleted file mode 100644 index 4dbf324fc3..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_right.png deleted file mode 100644 index 4dc0e321c3..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_left.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_left.png deleted file mode 100644 index 4e92f0102e..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_right.png deleted file mode 100644 index 3c6958cbf3..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_diagonal_up_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_fallback_wood.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_fallback_wood.png deleted file mode 100644 index 4960f4fc5d..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_fallback_wood.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_flower.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_flower.png deleted file mode 100644 index 7a0ae2615a..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_flower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient.png deleted file mode 100644 index 80aa50a288..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient_up.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient_up.png deleted file mode 100644 index 11222e3f55..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_gradient_up.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal.png deleted file mode 100644 index 22db69add0..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal_bottom.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal_bottom.png deleted file mode 100644 index 018f29c219..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_horizontal_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical.png deleted file mode 100644 index 6961d6af0a..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical_right.png deleted file mode 100644 index 3536d8e825..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_half_vertical_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_item_base.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_item_base.png deleted file mode 100644 index 31a75b37b2..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_item_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_item_overlay.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_item_overlay.png deleted file mode 100644 index 9ed2c05d98..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_item_overlay.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_rhombus.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_rhombus.png deleted file mode 100644 index a4f9b63918..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_rhombus.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_skull.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_skull.png deleted file mode 100644 index 5adc119688..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_skull.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_small_stripes.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_small_stripes.png deleted file mode 100644 index 330a920210..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_small_stripes.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_left.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_left.png deleted file mode 100644 index f7c3883e73..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_right.png deleted file mode 100644 index 67c518313c..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_bottom_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_left.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_left.png deleted file mode 100644 index dc9c59d921..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_right.png deleted file mode 100644 index 928aa51ea8..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_square_top_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_straight_cross.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_straight_cross.png deleted file mode 100644 index 42175c0180..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_straight_cross.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_bottom.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_bottom.png deleted file mode 100644 index 13eb73b131..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_center.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_center.png deleted file mode 100644 index 13d352a1f9..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_center.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downleft.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downleft.png deleted file mode 100644 index 4e2f89a299..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downleft.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downright.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downright.png deleted file mode 100644 index 7759c2f505..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_downright.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_left.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_left.png deleted file mode 100644 index 8bff4b3a3e..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_middle.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_middle.png deleted file mode 100644 index 28c0ca2b02..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_middle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_right.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_right.png deleted file mode 100644 index 7e9d7b2453..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_top.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_top.png deleted file mode 100644 index 9ce1f91821..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_stripe_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_thing.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_thing.png deleted file mode 100644 index 4d28d5cb29..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_thing.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_bottom.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_bottom.png deleted file mode 100644 index 5ac7e9e2e0..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_top.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_top.png deleted file mode 100644 index 7f626c26d3..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangle_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_bottom.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_bottom.png deleted file mode 100644 index 0098f612e2..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_top.png b/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_top.png deleted file mode 100644 index 9241f87f6a..0000000000 Binary files a/mods/ITEMS/mcl_banners/textures/mcl_banners_triangles_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_barrels/init.lua b/mods/ITEMS/mcl_barrels/init.lua deleted file mode 100644 index 09b16eee39..0000000000 --- a/mods/ITEMS/mcl_barrels/init.lua +++ /dev/null @@ -1,204 +0,0 @@ -local S = minetest.get_translator("mcl_barrels") -local F = minetest.formspec_escape -local C = minetest.colorize - ---TODO: fix barrel rotation placement - -local open_barrels = {} - -local drop_content = mcl_util.drop_items_from_meta_container("main") - -local function on_blast(pos) - local node = minetest.get_node(pos) - drop_content(pos, node) - minetest.remove_node(pos) -end - --- Simple protection checking functions -local function protection_check_move(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end -end - -local function protection_check_put_take(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end -end - -local function barrel_open(pos, node, clicker) - local name = minetest.get_meta(pos):get_string("name") - - if name == "" then - name = S("Barrel") - end - - local playername = clicker:get_player_name() - - minetest.show_formspec(playername, - "mcl_barrels:barrel_"..pos.x.."_"..pos.y.."_"..pos.z, - table.concat({ - "size[9,8.75]", - "label[0,0;"..F(C("#313131", name)).."]", - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]", - mcl_formspec.get_itemslot_bg(0, 0.5, 9, 3), - "label[0,4.0;"..F(C("#313131", 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), - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]", - "listring[current_player;main]", - }) - ) - - minetest.swap_node(pos, { name = "mcl_barrels:barrel_open", param2 = node.param2 }) - open_barrels[playername] = pos -end - -local function close_forms(pos) - local players = minetest.get_connected_players() - local formname = "mcl_barrels:barrel_"..pos.x.."_"..pos.y.."_"..pos.z - for p = 1, #players do - if vector.distance(players[p]:get_pos(), pos) <= 30 then - minetest.close_formspec(players[p]:get_player_name(), formname) - end - end -end - -local function update_after_close(pos) - local node = minetest.get_node_or_nil(pos) - if not node then return end - if node.name == "mcl_barrels:barrel_open" then - minetest.swap_node(pos, {name = "mcl_barrels:barrel_closed", param2 = node.param2}) - end -end - -local function close_barrel(player) - local name = player:get_player_name() - local open = open_barrels[name] - if open == nil then - return - end - - update_after_close(open) - - open_barrels[name] = nil -end - -minetest.register_node("mcl_barrels:barrel_closed", { - description = S("Barrel"), - _tt_help = S("27 inventory slots"), - _doc_items_longdesc = S("Barrels are containers which provide 27 inventory slots."), - _doc_items_usagehelp = S("To access its inventory, rightclick it. When broken, the items will drop out."), - tiles = {"mcl_barrels_barrel_top.png^[transformR270", "mcl_barrels_barrel_bottom.png", "mcl_barrels_barrel_side.png"}, - paramtype = "light", - paramtype2 = "facedir", - on_place = function(itemstack, placer, pointed_thing) - minetest.rotate_and_place(itemstack, placer, pointed_thing, minetest.is_creative_enabled(placer:get_player_name()), {}, false) - return itemstack - end, - stack_max = 64, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {handy = 1, axey = 1, container = 2, material_wood = 1, flammable = -1, deco_block = 1}, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("main", 9*3) - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = protection_check_put_take, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in barrel at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to barrel at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from barrel at "..minetest.pos_to_string(pos)) - end, - after_dig_node = drop_content, - on_blast = on_blast, - on_rightclick = barrel_open, - on_destruct = close_forms, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, -}) - -minetest.register_node("mcl_barrels:barrel_open", { - description = S("Barrel Open"), - _tt_help = S("27 inventory slots"), - _doc_items_longdesc = S("Barrels are containers which provide 27 inventory slots."), - _doc_items_usagehelp = S("To access its inventory, rightclick it. When broken, the items will drop out."), - _doc_items_create_entry = false, - tiles = {"mcl_barrels_barrel_top_open.png", "mcl_barrels_barrel_bottom.png", "mcl_barrels_barrel_side.png"}, - paramtype = "light", - paramtype2 = "facedir", - drop = "mcl_barrels:barrel_closed", - stack_max = 64, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {handy = 1, axey = 1, container = 2, material_wood = 1, flammable = -1, deco_block = 1, not_in_creative_inventory = 1}, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = protection_check_put_take, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in barrel at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to barrel at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from barrel at "..minetest.pos_to_string(pos)) - end, - after_dig_node = drop_content, - on_blast = on_blast, - on_rightclick = barrel_open, - on_destruct = close_forms, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, -}) - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname:find("mcl_barrels:") == 1 and fields.quit then - close_barrel(player) - end -end) - -minetest.register_on_leaveplayer(function(player) - close_barrel(player) -end) - ---Minecraft Java Edition craft -minetest.register_craft({ - output = "mcl_barrels:barrel_closed", - recipe = { - {"group:wood", "group:wood_slab", "group:wood"}, - {"group:wood", "", "group:wood"}, - {"group:wood", "group:wood_slab", "group:wood"}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_barrels:barrel_closed", - burntime = 15, -}) diff --git a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.de.tr b/mods/ITEMS/mcl_barrels/locale/mcl_barrels.de.tr deleted file mode 100644 index e1fa1b603a..0000000000 --- a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel= -Barrels are containers which provide 27 inventory slots.= -To access its inventory, rightclick it. When broken, the items will drop out.= -27 inventory slots= \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.es.tr b/mods/ITEMS/mcl_barrels/locale/mcl_barrels.es.tr deleted file mode 100644 index e1fa1b603a..0000000000 --- a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.es.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel= -Barrels are containers which provide 27 inventory slots.= -To access its inventory, rightclick it. When broken, the items will drop out.= -27 inventory slots= \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.fr.tr b/mods/ITEMS/mcl_barrels/locale/mcl_barrels.fr.tr deleted file mode 100644 index 0e93d1ee5a..0000000000 --- a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel=Tonneau -Barrels are containers which provide 27 inventory slots.=Les tonneaux sont des conteneurs qui offrent 27 emplacements d'inventaire. -To access its inventory, rightclick it. When broken, the items will drop out.=Pour accéder à son inventaire, faites un clic droit dessus. Une fois cassés, les articles tomberont. -27 inventory slots=27 emplacements d'inventaire \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.pl.tr b/mods/ITEMS/mcl_barrels/locale/mcl_barrels.pl.tr deleted file mode 100644 index e1fa1b603a..0000000000 --- a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel= -Barrels are containers which provide 27 inventory slots.= -To access its inventory, rightclick it. When broken, the items will drop out.= -27 inventory slots= \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.ru.tr b/mods/ITEMS/mcl_barrels/locale/mcl_barrels.ru.tr deleted file mode 100644 index e1fa1b603a..0000000000 --- a/mods/ITEMS/mcl_barrels/locale/mcl_barrels.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel= -Barrels are containers which provide 27 inventory slots.= -To access its inventory, rightclick it. When broken, the items will drop out.= -27 inventory slots= \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/locale/template.txt b/mods/ITEMS/mcl_barrels/locale/template.txt deleted file mode 100644 index e1fa1b603a..0000000000 --- a/mods/ITEMS/mcl_barrels/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_barrels -Barrel= -Barrels are containers which provide 27 inventory slots.= -To access its inventory, rightclick it. When broken, the items will drop out.= -27 inventory slots= \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/mod.conf b/mods/ITEMS/mcl_barrels/mod.conf deleted file mode 100644 index 2b0088b79d..0000000000 --- a/mods/ITEMS/mcl_barrels/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_barrels -depends = mcl_util, mcl_formspec, mcl_sounds -author = AFCMS \ No newline at end of file diff --git a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_bottom.png b/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_bottom.png deleted file mode 100755 index 9c57880618..0000000000 Binary files a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_side.png b/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_side.png deleted file mode 100755 index 8a01cc4a9d..0000000000 Binary files a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top.png b/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top.png deleted file mode 100755 index 8af5a5c902..0000000000 Binary files a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top_open.png b/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top_open.png deleted file mode 100755 index 1d3a02be17..0000000000 Binary files a/mods/ITEMS/mcl_barrels/textures/mcl_barrels_barrel_top_open.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bells/README.md b/mods/ITEMS/mcl_bells/README.md deleted file mode 100644 index 53cba890c4..0000000000 --- a/mods/ITEMS/mcl_bells/README.md +++ /dev/null @@ -1,16 +0,0 @@ -mcl_bells ---------- -Village bells for MineClone2, originally imported from mcl5, heavily modified by cora. - -License of media files ----------------------- -* sounds/bell_stroke.ogg - cc0 http://creativecommons.org/publicdomain/zero/1.0/ - * created by edsward - * modified by sorcerykid - * obtained from https://freesound.org/people/edsward/sounds/341866/ - -* textures/mcl_bells_bell.png - cc4-by-sa https://creativecommons.org/licenses/by-sa/4.0/ - * from pixelperfection by XSSheep and NovaWostra ( https://www.planetminecraft.com/texture-pack/pixel-perfection-chorus-edit/ ) - -* textures/mcl_bells_bell_*.png - cc0 http://creativecommons.org/publicdomain/zero/1.0/ - * created by cora diff --git a/mods/ITEMS/mcl_bells/init.lua b/mods/ITEMS/mcl_bells/init.lua deleted file mode 100644 index b216c66596..0000000000 --- a/mods/ITEMS/mcl_bells/init.lua +++ /dev/null @@ -1,46 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_bells = {} - -local has_mcl_wip = minetest.get_modpath("mcl_wip") - -function mcl_bells.ring_once(pos) - minetest.sound_play( "mcl_bells_bell_stroke", { pos = pos, gain = 1.5, max_hear_distance = 150,}) - local vv=minetest.get_objects_inside_radius(pos,150) - for _,o in pairs(vv) do - if o.type == "npc" then - mcl_mobs:gopath(o:get_luaentity(),pos,function() end) - end - end -end - -minetest.register_node("mcl_bells:bell", { - description = S("Bell"), - inventory_image = "mcl_bells_bell.png", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }, - { -6/16, -6/16, -6/16, 6/16, 6/16, 6/16 }, - { -2/16, 6/16, -2/16, 2/16, 8/16, 2/16 }, - } - }, - --tiles = { "blank.png" }, - tiles = { - "mcl_bells_bell_top.png", - "mcl_bells_bell_bottom.png", - "mcl_bells_bell_side.png", - }, - is_ground_content = false, - groups = {pickaxey=2, deco_block=1 }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, - on_rightclick = mcl_bells.ring_once, - use_texture_alpha = "clip", -}) - -if has_mcl_wip then - mcl_wip.register_wip_item("mcl_bells:bell") -end diff --git a/mods/ITEMS/mcl_bells/locale/mcl_bells.fr.tr b/mods/ITEMS/mcl_bells/locale/mcl_bells.fr.tr deleted file mode 100644 index a1f7a075c1..0000000000 --- a/mods/ITEMS/mcl_bells/locale/mcl_bells.fr.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_observers -Bell=Cloche diff --git a/mods/ITEMS/mcl_bells/locale/template.txt b/mods/ITEMS/mcl_bells/locale/template.txt deleted file mode 100644 index 2f554c2a05..0000000000 --- a/mods/ITEMS/mcl_bells/locale/template.txt +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: mcl_observers -Bell= diff --git a/mods/ITEMS/mcl_bells/mod.conf b/mods/ITEMS/mcl_bells/mod.conf deleted file mode 100644 index 18e74a7a85..0000000000 --- a/mods/ITEMS/mcl_bells/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_bells -optional_depends = mcl_wip diff --git a/mods/ITEMS/mcl_bells/sounds/mcl_bells_bell_stroke.ogg b/mods/ITEMS/mcl_bells/sounds/mcl_bells_bell_stroke.ogg deleted file mode 100755 index 023d1f9462..0000000000 Binary files a/mods/ITEMS/mcl_bells/sounds/mcl_bells_bell_stroke.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell.png b/mods/ITEMS/mcl_bells/textures/mcl_bells_bell.png deleted file mode 100644 index eb135f0d4d..0000000000 Binary files a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_bottom.png b/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_bottom.png deleted file mode 100644 index ccb89540ab..0000000000 Binary files a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_side.png b/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_side.png deleted file mode 100644 index 98db2bac7f..0000000000 Binary files a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_top.png b/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_top.png deleted file mode 100644 index d018844e97..0000000000 Binary files a/mods/ITEMS/mcl_bells/textures/mcl_bells_bell_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_buckets/API.md b/mods/ITEMS/mcl_buckets/API.md deleted file mode 100644 index 94ec48de54..0000000000 --- a/mods/ITEMS/mcl_buckets/API.md +++ /dev/null @@ -1,54 +0,0 @@ -# mcl_buckets -Add an API to register buckets to mcl - -## mcl_buckets.register_liquid(def) - -Register a new liquid -Accept folowing params: -* source_place: a string or function. - * string: name of the node to place - * function(pos): will returns name of the node to place with pos being the placement position -* source_take: table of liquid source node names to take -* bucketname: itemstring of the new bucket item -* inventory_image: texture of the new bucket item (ignored if itemname == nil) -* name: user-visible bucket description -* longdesc: long explanatory description (for help) -* usagehelp: short usage explanation (for help) -* tt_help: very short tooltip help -* extra_check(pos, placer): (optional) function(pos) -* groups: optional list of item groups - - -**Usage exemple:** -```lua -mcl_buckets.register_liquid({ - bucketname = "dummy:bucket_dummy", - --source_place = "dummy:dummy_source", - source_place = function(pos) - if condition then - return "dummy:dummy_source" - else - return "dummy:dummy_source_nether" - end - end, - source_take = {"dummy:dummy_source"}, - inventory_image = "bucket_dummy.png", - name = S("Dummy liquid Bucket"), - longdesc = S("This bucket is filled with a dummy liquid."), - usagehelp = S("Place it to empty the bucket and create a dummy liquid source."), - tt_help = S("Places a dummy liquid source"), - extra_check = function(pos, placer) - --pos = pos where the liquid should be placed - --placer people who tried to place the bucket (can be nil) - - --no liquid node will be placed - --the bucket will not be emptied - --return false, false - - --liquid node will be placed - --the bucket will be emptied - return true, true - end, - groups = { dummy_group = 123 }, -}) -``` \ No newline at end of file diff --git a/mods/ITEMS/mcl_buckets/README.md b/mods/ITEMS/mcl_buckets/README.md deleted file mode 100644 index b783cc1337..0000000000 --- a/mods/ITEMS/mcl_buckets/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# MineClone2 Bucket (`mcl_bucket`) -Originally taken from Minetest Game, adapted for MineClone2. - -This mod add buckets to the game, including an API to register your own (see `API.md`). - -## License - -Copyright (C) 2011-2012 Kahrl - -Copyright (C) 2011-2012 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -http://www.gnu.org/licenses/lgpl-2.1.html - - diff --git a/mods/ITEMS/mcl_buckets/init.lua b/mods/ITEMS/mcl_buckets/init.lua deleted file mode 100644 index 85215caafc..0000000000 --- a/mods/ITEMS/mcl_buckets/init.lua +++ /dev/null @@ -1,398 +0,0 @@ --- See README.txt for licensing and other information. -local modname = minetest.get_current_modname() -local S = minetest.get_translator(modname) -local modpath = minetest.get_modpath(modname) - --- Compatibility with old bucket mod -minetest.register_alias("bucket:bucket_empty", "mcl_buckets:bucket_empty") -minetest.register_alias("bucket:bucket_water", "mcl_buckets:bucket_water") -minetest.register_alias("bucket:bucket_lava", "mcl_buckets:bucket_lava") - -local mod_doc = minetest.get_modpath("doc") -local mod_mcl_core = minetest.get_modpath("mcl_core") ---local mod_mclx_core = minetest.get_modpath("mclx_core") - --- Localize some functions for faster access -local vector = vector -local math = math -local string = string - -local raycast = minetest.raycast -local get_node = minetest.get_node -local set_node = minetest.set_node -local add_node = minetest.add_node -local add_item = minetest.add_item - -local registered_nodes = minetest.registered_nodes -local get_item_group = minetest.get_item_group -local is_creative_enabled = minetest.is_creative_enabled -local is_protected = minetest.is_protected -local record_protection_violation = minetest.record_protection_violation - -if mod_mcl_core then - minetest.register_craft({ - output = "mcl_buckets:bucket_empty 1", - recipe = { - {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, - {"", "mcl_core:iron_ingot", ""}, - }, - }) -end - -mcl_buckets = { - liquids = {}, - buckets = {}, -} - --- Sound helper functions for placing and taking liquids -local function sound_place(itemname, pos) - local def = registered_nodes[itemname] - if def and def.sounds and def.sounds.place then - minetest.sound_play(def.sounds.place, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) - end -end - -local function sound_take(itemname, pos) - local def = registered_nodes[itemname] - if def and def.sounds and def.sounds.dug then - minetest.sound_play(def.sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) - end -end - -local function place_liquid(pos, itemstring) - local fullness = registered_nodes[itemstring].liquid_range - sound_place(itemstring, pos) - add_node(pos, {name=itemstring, param2=fullness}) -end - -local function give_bucket(new_bucket, itemstack, user) - local inv = user:get_inventory() - if is_creative_enabled(user:get_player_name()) then - --TODO: is a full bucket added if inv doesn't contain one? - return itemstack - else - if itemstack:get_count() == 1 then - return new_bucket - else - if inv:room_for_item("main", new_bucket) then - inv:add_item("main", new_bucket) - else - add_item(user:get_pos(), new_bucket) - end - itemstack:take_item() - return itemstack - end - end -end - -local pointable_sources = {} - -local function bucket_raycast(user) - --local pos = user:get_pos() - local pos = user:get_pos() - --local pos = vector.add(user:get_pos(), user:get_bone_position("Head_Control")) - pos.y = pos.y + user:get_properties().eye_height - local look_dir = user:get_look_dir() - look_dir = vector.multiply(look_dir, 5) - local pos2 = vector.add(pos, look_dir) - - local ray = raycast(pos, pos2, false, true) - if ray then - for pointed_thing in ray do - if pointed_thing and pointable_sources[get_node(pointed_thing.above).name] then - --minetest.chat_send_all("found!") - return {under=pointed_thing.under,above=pointed_thing.above} - end - end - end - return nil -end - -local function get_node_place(source_place, place_pos) - local node_place - if type(source_place) == "function" then - node_place = source_place(place_pos) - else - node_place = source_place - end - return node_place -end - -local function get_extra_check(check, pos, user) - local result - local take_bucket - if check then - result, take_bucket = check(pos, user) - if result == nil then result = true end - if take_bucket == nil then take_bucket = true end - else - result = true - take_bucket = true - end - return result, take_bucket -end - -local function get_bucket_drop(itemstack, user, take_bucket) - -- Handle bucket item and inventory stuff - if take_bucket and not is_creative_enabled(user:get_player_name()) then - -- Add empty bucket and put it into inventory, if possible. - -- Drop empty bucket otherwise. - local new_bucket = ItemStack("mcl_buckets:bucket_empty") - if itemstack:get_count() == 1 then - return new_bucket - else - local inv = user:get_inventory() - if inv:room_for_item("main", new_bucket) then - inv:add_item("main", new_bucket) - else - add_item(user:get_pos(), new_bucket) - end - itemstack:take_item() - return itemstack - end - else - return itemstack - end -end - -local function on_place_bucket(itemstack, user, pointed_thing, def) - -- Must be pointing to node - if pointed_thing.type ~= "node" then - return - end - -- Call on_rightclick if the pointed node defines it - local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) - if new_stack then - return new_stack - end - - local undernode = get_node(pointed_thing.under) - local abovenode = get_node(pointed_thing.above) - - if registered_nodes[undernode.name] and registered_nodes[undernode.name].buildable_to or get_item_group(undernode.name, "cauldron") == 1 then - local result, take_bucket = get_extra_check(def.extra_check, pointed_thing.under, user) - if result then - local node_place = get_node_place(def.source_place, pointed_thing.under) - local pns = user:get_player_name() - - -- Check protection - if is_protected(pointed_thing.under, pns) then - record_protection_violation(pointed_thing.under, pns) - return itemstack - end - - -- Place liquid - place_liquid(pointed_thing.under, node_place) - - -- Update doc mod - if mod_doc and doc.entry_exists("nodes", node_place) then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", node_place) - end - end - return get_bucket_drop(itemstack, user, take_bucket) - elseif registered_nodes[abovenode.name] and registered_nodes[abovenode.name].buildable_to or get_item_group(abovenode.name, "cauldron") == 1 then - local result, take_bucket = get_extra_check(def.extra_check, pointed_thing.above, user) - if result then - local node_place = get_node_place(def.source_place, pointed_thing.above) - local pns = user:get_player_name() - - -- Check protection - if is_protected(pointed_thing.above, pns) then - record_protection_violation(pointed_thing.above, pns) - return itemstack - end - - -- Place liquid - place_liquid(pointed_thing.above, node_place) - - -- Update doc mod - if mod_doc and doc.entry_exists("nodes", node_place) then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", node_place) - end - end - return get_bucket_drop(itemstack, user, take_bucket) - else - return itemstack - end -end - - -local function on_place_bucket_empty(itemstack, user, pointed_thing) - -- Must be pointing to node - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Call on_rightclick if the pointed node defines it - local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) - if new_stack then - return new_stack - end - - local node = get_node(pointed_thing.under) - local nn = node.name - - local new_bucket - local liquid_node = bucket_raycast(user) - if liquid_node then - if is_protected(liquid_node.above, user:get_player_name()) then - record_protection_violation(liquid_node.above, user:get_player_name()) - end - local liquid_name = get_node(liquid_node.above).name - if liquid_name then - local liquid_def = mcl_buckets.liquids[liquid_name] - if liquid_def then - --minetest.chat_send_all("test") - -- Fill bucket, but not in Creative Mode - -- FIXME: remove this line - --if not is_creative_enabled(user:get_player_name()) then - if not false then - new_bucket = ItemStack({name = liquid_def.bucketname}) - if liquid_def.on_take then - liquid_def.on_take(user) - end - end - add_node(liquid_node.above, {name="air"}) - sound_take(nn, liquid_node.above) - - if mod_doc and doc.entry_exists("nodes", liquid_name) then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", liquid_name) - end - if new_bucket then - return give_bucket(new_bucket, itemstack, user) - end - else - minetest.log("error", string.format("[mcl_buckets] Node [%s] has invalid group [_mcl_bucket_pointable]!", liquid_name)) - end - end - return itemstack - else - -- FIXME: replace this ugly code by cauldrons API - if nn == "mcl_cauldrons:cauldron_3" then - -- Take water out of full cauldron - set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) - if not is_creative_enabled(user:get_player_name()) then - new_bucket = ItemStack("mcl_buckets:bucket_water") - end - sound_take("mcl_core:water_source", pointed_thing.under) - elseif nn == "mcl_cauldrons:cauldron_3r" then - -- Take river water out of full cauldron - set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) - if not is_creative_enabled(user:get_player_name()) then - new_bucket = ItemStack("mcl_buckets:bucket_river_water") - end - sound_take("mclx_core:river_water_source", pointed_thing.under) - end - if new_bucket then - return give_bucket(new_bucket, itemstack, user) - end - end - return itemstack -end - -controls.register_on_press(function(player, key) - if key ~= "RMB" then - return - end - - local wielded_item = player:get_wielded_item() - local itemname = wielded_item:get_name() - local def = mcl_buckets.buckets[itemname] - - if itemname == "mcl_buckets:bucket_empty" then - local pointed_thing = mcl_util.get_pointed_thing(player, true) - - if not pointed_thing then - return - end - wielded_item = on_place_bucket_empty(wielded_item, player, pointed_thing) - elseif def then - local pointed_thing = mcl_util.get_pointed_thing(player, false) - - if not pointed_thing then - return - end - wielded_item = on_place_bucket(wielded_item, player, pointed_thing, def) - end - - player:set_wielded_item(wielded_item) -end) - -function mcl_buckets.register_liquid(def) - for _,source in ipairs(def.source_take) do - mcl_buckets.liquids[source] = { - source_place = def.source_place, - source_take = source, - on_take = def.on_take, - bucketname = def.bucketname, - } - pointable_sources[source] = true - if type(def.source_place) == "string" then - mcl_buckets.liquids[def.source_place] = mcl_buckets.liquids[source] - end - end - - mcl_buckets.buckets[def.bucketname] = def - - if def.bucketname == nil or def.bucketname == "" then - error(string.format("[mcl_bucket] Invalid itemname then registering [%s]!", def.name)) - end - - minetest.register_craftitem(def.bucketname, { - description = def.name, - _doc_items_longdesc = def.longdesc, - _doc_items_usagehelp = def.usagehelp, - _tt_help = def.tt_help, - inventory_image = def.inventory_image, - stack_max = 1, - groups = def.groups, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - local buildable = registered_nodes[dropnode.name].buildable_to or dropnode.name == "mcl_portals:portal" - if not buildable then return stack end - local result, take_bucket = get_extra_check(def.extra_check, droppos, nil) - if result then -- Fail placement of liquid if result is false - place_liquid(droppos, get_node_place(def.source_place, droppos)) - end - if take_bucket then - stack:set_name("mcl_buckets:bucket_empty") - end - return stack - end, - }) -end - -minetest.register_craftitem("mcl_buckets:bucket_empty", { - description = S("Empty Bucket"), - _doc_items_longdesc = S("A bucket can be used to collect and release liquids."), - _doc_items_usagehelp = S("Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else."), - _tt_help = S("Collects liquids"), - --liquids_pointable = true, - inventory_image = "bucket.png", - stack_max = 16, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Fill empty bucket with liquid or drop bucket if no liquid - local collect_liquid = false - - local liquiddef = mcl_buckets.liquids[dropnode.name] - local new_bucket - if liquiddef and liquiddef.bucketname and (dropnode.name == liquiddef.source_take) then - -- Fill bucket - new_bucket = ItemStack({name = liquiddef.bucketname}) - sound_take(dropnode.name, droppos) - collect_liquid = true - end - if collect_liquid then - set_node(droppos, {name="air"}) - - -- Fill bucket with liquid - stack = new_bucket - else - -- No liquid found: Drop empty bucket - add_item(droppos, stack) - stack:take_item() - end - return stack - end, -}) - -dofile(modpath.."/register.lua") diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.de.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.de.tr deleted file mode 100644 index 99d07109f0..0000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.de.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=Leerer Eimer -A bucket can be used to collect and release liquids.=Ein Eimer kann benutzt werden, um Flüssigkeiten aufzusammeln und wieder freizulassen. -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Hauen Sie auf eine Flüssigkeitsquelle, um sie aufzusammeln. Sie können den vollen Eimer dann benutzen, um die Flüssigkeit woanders zu platzieren. -Lava Bucket=Lavaeimer -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=Ein Eimer kann benutzt werden, um Flüssigkeiten aufzusammeln und wieder freizulassen. Dieser hier ist voller heißer Lava, die sicher in ihm verstaut ist. Mit Vorsicht zu handhaben. -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Gehen Sie zu einer sicheren Stelle und platzieren Sie den Eimer, um ihn zu leeren und eine Lavaquelle an dieser Stelle zu erzeugen. Verbrennen Sie sich nicht! -Water Bucket=Wassereimer -A bucket can be used to collect and release liquids. This one is filled with water.=Ein Eimer kann benutzt werden, um Flüssigkeiten aufzusammeln und wieder freizulassen. Dieser hier ist mit Wasser gefüllt. -Place it to empty the bucket and create a water source.=Platzieren Sie ihn, um den Eimer zu leeren und eine Wasserquelle zu erzeugen. -River Water Bucket=Flusswassereimer -A bucket can be used to collect and release liquids. This one is filled with river water.=Ein Eimer kann benutzt werden, um Flüssigkeiten aufzusammeln und wieder freizulassen. Dieser hier ist mit Flusswasser gefüllt. -Place it to empty the bucket and create a river water source.=Platzieren Sie ihn, um den Eimer zu leeren und eine Flusswasserquelle zu erzeugen. -Collects liquids=Sammelt Flüssigkeiten auf -Places a lava source=Platziert eine Lavaquelle -Places a water source=Platziert eine Wasserquelle -Places a river water source=Platziert eine Flusswasserquelle diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.es.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.es.tr deleted file mode 100644 index 27517a1a76..0000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.es.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=Cubo vacío -A bucket can be used to collect and release liquids.=Se puede usar un cubo para recoger y liberar líquidos. -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Golpea una fuente de líquido para recolectarla. Luego puede usar el cubo lleno para colocar el líquido en otro lugar. -Lava Bucket=Cubo con lava -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=Se puede usar un cubo para recoger y liberar líquidos. Este está lleno de lava caliente, contenida de forma segura en el interior. Usar con precaución. -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Aléjate a una distancia segura y coloca el cubo para vaciarlo y crea una fuente de lava en este lugar. ¡No te quemes! -Water Bucket=Cubo con agua -A bucket can be used to collect and release liquids. This one is filled with water.=Se puede usar un cubo para recoger y liberar líquidos. Este está lleno de agua. -Place it to empty the bucket and create a water source.=Colóquelo para vaciar el cubo y crear una fuente de agua. -River Water Bucket=Cubo de agua de río -A bucket can be used to collect and release liquids. This one is filled with river water.=Se puede usar un cubo para recoger y liberar líquidos. Este está lleno de agua de río. -Place it to empty the bucket and create a river water source.=Colóquelo para vaciar el cubo y crear una fuente de agua de río. \ No newline at end of file diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.fr.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.fr.tr deleted file mode 100644 index 4320f75092..0000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.fr.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=Seau Vide -A bucket can be used to collect and release liquids.=Un seau peut être utilisé pour recueillir et libérer les liquides. -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Frappez une source de liquide pour la collecter. Vous pouvez ensuite utiliser le seau rempli pour placer le liquide ailleurs. -Lava Bucket=Seau de Lave -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=Un seau peut être utilisé pour recueillir et libérer les liquides. Celui-ci est rempli de lave chaude, contenue en toute sécurité à l'intérieur. Utiliser avec précaution. -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Eloignez-vous et placez le seau pour le vider et créez une source de lave à cet endroit. Ne vous brûlez pas! -Water Bucket=Seau d'Eau -A bucket can be used to collect and release liquids. This one is filled with water.=Un seau peut être utilisé pour recueillir et libérer les liquides. Celui-ci est rempli d'eau. -Place it to empty the bucket and create a water source.=Placez-le pour vider le seau et créer une source d'eau. -River Water Bucket=Seau d'Eau de Rivière -A bucket can be used to collect and release liquids. This one is filled with river water.=Un seau peut être utilisé pour recueillir et libérer les liquides. Celui-ci est rempli d'eau de rivière. -Place it to empty the bucket and create a river water source.=Placez-le pour vider le seau et créer une source d'eau de rivière. -Collects liquids=Collecte des liquides -Places a lava source=Place une source de lave -Places a water source=Place une source d'eau -Places a river water source=Place une source d'eau de rivière diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.pl.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.pl.tr deleted file mode 100644 index f7593b14ef..0000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.pl.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=Puste wiadro -A bucket can be used to collect and release liquids.=Wiadro może być użyte do zbierania i wylewania płynów. -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Uderz w źródło płynu aby je zebrać. Możesz następnie użyć pełnego wiadra aby postawić płyn gdzie indziej. -Lava Bucket=Wiadro lawy -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.= Wiadro może być użyte do zbierania i wylewania płynów. To jest wypełnione lawą, bezpiecznie przechowywaną w środku. Używać z rozwagą. -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Odejdź na bezpieczną odległość i umieść wiadro aby je opróżnić i utworzyć źródło lawy w danym miejscu. Nie poparz się! -Water Bucket=Wiadro wody -A bucket can be used to collect and release liquids. This one is filled with water.=Wiadro może być użyte do zbierania i wylewania płynów. To jest wypełnione wodą. -Place it to empty the bucket and create a water source.=Umieść je aby opróżnić wiadro i utworzyć źródło wody. -River Water Bucket=Wiadro wody rzecznej -A bucket can be used to collect and release liquids. This one is filled with river water.= Wiadro może być użyte do zbierania i wylewania płynów. To jest wypełnione wodą rzeczną. -Place it to empty the bucket and create a river water source.=Umieść je aby opróżnić wiadro i utworzyć źródło wody rzecznej. -Collects liquids=Zbiera płyny -Places a lava source=Umieszcza źródło lawy -Places a water source=Umieszcza źródło wody -Places a river water source=Umieszcza źródło wody rzecznej diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.ru.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.ru.tr deleted file mode 100644 index 9c8cd0539d..0000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.ru.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=Пустое ведро -A bucket can be used to collect and release liquids.=Ведро может быть использовано для набора и выливания жидкостей. -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Ударьте источник жидкости, чтобы зачерпнуть его. После этого вы можете в ведре перенести жидкость в другое место. -Lava Bucket=Ведро лавы -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=Ведро может быть использовано для набора и выливания жидкостей. Это ведро наполнено лавой, которая безопасно хранится внутри. Используйте с осторожностью. -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Стоя на безопасном расстоянии, поместите ведро в пустоту, чтобы создать источник лавы на этом участке. -Water Bucket=Ведро воды -A bucket can be used to collect and release liquids. This one is filled with water.=Ведро может быть использовано для набора и выливания жидкостей. Это ведро наполнено водой. -Place it to empty the bucket and create a water source.=Поместите ведро на пустой участок для создания водного источника. -River Water Bucket=Ведро речной воды -A bucket can be used to collect and release liquids. This one is filled with river water.=Ведро может быть использовано для набора и выливания жидкостей. Это ведро наполнено речной водой. -Place it to empty the bucket and create a river water source.=Поместите ведро на пустой участок для создания источника речной воды. -Collects liquids=Набирает жидкости -Places a lava source=Переносит источник лавы -Places a water source=Переносит источник воды -Places a river water source=Переносит источник речной воды diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.zh_TW.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.zh_TW.tr deleted file mode 100644 index a9db929b26..0000000000 --- a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.zh_TW.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket=空桶 -A bucket can be used to collect and release liquids.=桶可以用來收集和倒出液體。 -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=擊打一個液體源頭來收集它。然後你可以用裝滿的桶把液體放在其他地方。 -Lava Bucket=熔岩桶 -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.=桶可以用來收集和釋放液體。這個桶裡裝的是熱的熔岩,安全地裝在裡面。使用時要小心! -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=在安全距離內,將熔岩倒出,在這個地方創造一個熔岩源頭。不要燒到自己! -Water Bucket=水桶 -A bucket can be used to collect and release liquids. This one is filled with water.=桶可以用來收集和倒出液體。這個桶裡裝的是水。 -Place it to empty the bucket and create a water source.=放置它以清空水桶並創建水源。 -River Water Bucket=河水桶 -A bucket can be used to collect and release liquids. This one is filled with river water.=桶可以用來收集和倒出液體。這個桶裡裝的是河水。 -Place it to empty the bucket and create a river water source.=放置它以清空水桶並創建河水源。 -Collects liquids=攜帶流體 -Places a lava source=放置熔岩源頭 -Places a water source=放置水源 -Places a river water source=放置河水源頭 diff --git a/mods/ITEMS/mcl_buckets/locale/template.txt b/mods/ITEMS/mcl_buckets/locale/template.txt deleted file mode 100644 index 174d1b76bf..0000000000 --- a/mods/ITEMS/mcl_buckets/locale/template.txt +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_buckets -Empty Bucket= -A bucket can be used to collect and release liquids.= -Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.= -Lava Bucket= -A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.= -Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!= -Water Bucket= -A bucket can be used to collect and release liquids. This one is filled with water.= -Place it to empty the bucket and create a water source.= -River Water Bucket= -A bucket can be used to collect and release liquids. This one is filled with river water.= -Place it to empty the bucket and create a river water source.= -Collects liquids= -Places a lava source= -Places a water source= -Places a river water source= diff --git a/mods/ITEMS/mcl_buckets/mod.conf b/mods/ITEMS/mcl_buckets/mod.conf deleted file mode 100644 index ba945b033b..0000000000 --- a/mods/ITEMS/mcl_buckets/mod.conf +++ /dev/null @@ -1,6 +0,0 @@ -name = mcl_buckets -author = Kahrl -description = -depends = mcl_worlds, mcl_util, controls -optional_depends = mcl_core, mclx_core, doc - diff --git a/mods/ITEMS/mcl_buckets/register.lua b/mods/ITEMS/mcl_buckets/register.lua deleted file mode 100644 index 1a7c8fe141..0000000000 --- a/mods/ITEMS/mcl_buckets/register.lua +++ /dev/null @@ -1,117 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_mcl_core = minetest.get_modpath("mcl_core") -local mod_mclx_core = minetest.get_modpath("mclx_core") -local has_awards = minetest.get_modpath("awards") - -local function sound_place(itemname, pos) - local def = minetest.registered_nodes[itemname] - if def and def.sounds and def.sounds.place then - minetest.sound_play(def.sounds.place, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) - end -end - ---[[local sound_take = function(itemname, pos) - local def = minetest.registered_nodes[itemname] - if def and def.sounds and def.sounds.dug then - minetest.sound_play(def.sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) - end -end]] - -if mod_mcl_core then - -- Lava bucket - mcl_buckets.register_liquid({ - source_place = function(pos) - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "nether" then - return "mcl_nether:nether_lava_source" - else - return "mcl_core:lava_source" - end - end, - source_take = {"mcl_core:lava_source", "mcl_nether:nether_lava_source"}, - on_take = function(user) - if has_awards and user and user:is_player() then - awards.unlock(user:get_player_name(), "mcl:hotStuff") - end - end, - bucketname = "mcl_buckets:bucket_lava", - inventory_image = "bucket_lava.png", - name = S("Lava Bucket"), - longdesc = S("A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution."), - usagehelp = S("Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!"), - tt_help = S("Places a lava source") - }) - - -- Water bucket - mcl_buckets.register_liquid({ - source_place = "mcl_core:water_source", - source_take = {"mcl_core:water_source"}, - bucketname = "mcl_buckets:bucket_water", - inventory_image = "bucket_water.png", - name = S("Water Bucket"), - longdesc = S("A bucket can be used to collect and release liquids. This one is filled with water."), - usagehelp = S("Place it to empty the bucket and create a water source."), - tt_help = S("Places a water source"), - extra_check = function(pos, placer) - local nn = minetest.get_node(pos).name - -- Pour water into cauldron - if minetest.get_item_group(nn, "cauldron") ~= 0 then - -- Put water into cauldron - if nn ~= "mcl_cauldrons:cauldron_3" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3"}) - end - sound_place("mcl_core:water_source", pos) - return false, true - -- Evaporate water if used in Nether (except on cauldron) - else - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "nether" then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - return false, true - end - end - end, - groups = { water_bucket = 1 }, - }) -end - -if mod_mclx_core then - -- River water bucket - mcl_buckets.register_liquid({ - source_place = "mclx_core:river_water_source", - source_take = {"mclx_core:river_water_source"}, - bucketname = "mcl_buckets:bucket_river_water", - inventory_image = "bucket_river_water.png", - name = S("River Water Bucket"), - longdesc = S("A bucket can be used to collect and release liquids. This one is filled with river water."), - usagehelp = S("Place it to empty the bucket and create a river water source."), - tt_help = S("Places a river water source"), - extra_check = function(pos, placer) - local nn = minetest.get_node(pos).name - -- Pour into cauldron - if minetest.get_item_group(nn, "cauldron") ~= 0 then - -- Put water into cauldron - if nn ~= "mcl_cauldrons:cauldron_3r" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3r"}) - end - sound_place("mcl_core:water_source", pos) - return false, true - else - -- Evaporate water if used in Nether (except on cauldron) - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "nether" then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - return false, true - end - end - end, - groups = { water_bucket = 1 }, - }) -end - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_buckets:bucket_lava", - burntime = 1000, - replacements = {{"mcl_buckets:bucket_lava", "mcl_buckets:bucket_empty"}}, -}) diff --git a/mods/ITEMS/mcl_buckets/textures/bucket.png b/mods/ITEMS/mcl_buckets/textures/bucket.png deleted file mode 100644 index da2126bb82..0000000000 Binary files a/mods/ITEMS/mcl_buckets/textures/bucket.png and /dev/null differ diff --git a/mods/ITEMS/mcl_buckets/textures/bucket_lava.png b/mods/ITEMS/mcl_buckets/textures/bucket_lava.png deleted file mode 100644 index 967c2ee77c..0000000000 Binary files a/mods/ITEMS/mcl_buckets/textures/bucket_lava.png and /dev/null differ diff --git a/mods/ITEMS/mcl_buckets/textures/bucket_river_water.png b/mods/ITEMS/mcl_buckets/textures/bucket_river_water.png deleted file mode 100644 index 5e58c92f48..0000000000 Binary files a/mods/ITEMS/mcl_buckets/textures/bucket_river_water.png and /dev/null differ diff --git a/mods/ITEMS/mcl_buckets/textures/bucket_water.png b/mods/ITEMS/mcl_buckets/textures/bucket_water.png deleted file mode 100644 index b730d0fa5f..0000000000 Binary files a/mods/ITEMS/mcl_buckets/textures/bucket_water.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cartography_table/README.md b/mods/ITEMS/mcl_cartography_table/README.md deleted file mode 100644 index 4818b67841..0000000000 --- a/mods/ITEMS/mcl_cartography_table/README.md +++ /dev/null @@ -1,13 +0,0 @@ -mcl_cartography_table -------------------- -Cartography Tables, by PrairieWind - -Adds Cartography Tables to MineClone 2/5. - -License of source code ----------------------- -LGPLv2.1 - -License of media ----------------- -See the main MineClone 2 README.md file. \ No newline at end of file diff --git a/mods/ITEMS/mcl_cartography_table/init.lua b/mods/ITEMS/mcl_cartography_table/init.lua deleted file mode 100644 index a7c66b4e24..0000000000 --- a/mods/ITEMS/mcl_cartography_table/init.lua +++ /dev/null @@ -1,27 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) --- Cartography Table Code. Used to create and copy maps. Needs a GUI still. - -minetest.register_node("mcl_cartography_table:cartography_table", { - description = S("Cartography Table"), - _tt_help = S("Used to create or copy maps"), - _doc_items_longdesc = S("Is used to create or copy maps for use.."), - tiles = { - "cartography_table_top.png", "cartography_table_side3.png", - "cartography_table_side3.png", "cartography_table_side2.png", - "cartography_table_side3.png", "cartography_table_side1.png" - }, - paramtype2 = "facedir", - groups = { axey = 2, handy = 1, deco_block = 1, material_wood = 1, flammable = 1 }, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5 - }) - - -minetest.register_craft({ - output = "mcl_cartography_table:cartography_table", - recipe = { - { "mcl_core:paper", "mcl_core:paper", "" }, - { "group:wood", "group:wood", "" }, - { "group:wood", "group:wood", "" }, - } -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_cartography_table/mod.conf b/mods/ITEMS/mcl_cartography_table/mod.conf deleted file mode 100644 index ebea161978..0000000000 --- a/mods/ITEMS/mcl_cartography_table/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_cartography_table -author = PrairieWind -description = Adds the cartography table villager workstation to MineClone 2/5. Used to copy and create maps. \ No newline at end of file diff --git a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side1.png b/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side1.png deleted file mode 100644 index 7573d6b989..0000000000 Binary files a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side2.png b/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side2.png deleted file mode 100644 index f5dbd7ce5d..0000000000 Binary files a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side3.png b/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side3.png deleted file mode 100644 index 740303ba10..0000000000 Binary files a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_side3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_top.png b/mods/ITEMS/mcl_cartography_table/textures/cartography_table_top.png deleted file mode 100644 index cefff1fbdf..0000000000 Binary files a/mods/ITEMS/mcl_cartography_table/textures/cartography_table_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cauldrons/init.lua b/mods/ITEMS/mcl_cauldrons/init.lua deleted file mode 100644 index 55866f5cc8..0000000000 --- a/mods/ITEMS/mcl_cauldrons/init.lua +++ /dev/null @@ -1,143 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Cauldron mod, adds cauldrons. - --- TODO: Extinguish fire of burning entities - --- Convenience function because the cauldron nodeboxes are very similar -local create_cauldron_nodebox = function(water_level) - local floor_y - if water_level == 0 then -- empty - floor_y = -0.1875 - elseif water_level == 1 then -- 1/3 filled - floor_y = 1/16 - elseif water_level == 2 then -- 2/3 filled - floor_y = 4/16 - elseif water_level == 3 then -- full - floor_y = 7/16 - end - return { - type = "fixed", - fixed = { - {-0.5, -0.1875, -0.5, -0.375, 0.5, 0.5}, -- Left wall - {0.375, -0.1875, -0.5, 0.5, 0.5, 0.5}, -- Right wall - {-0.375, -0.1875, 0.375, 0.375, 0.5, 0.5}, -- Back wall - {-0.375, -0.1875, -0.5, 0.375, 0.5, -0.375}, -- Front wall - {-0.5, -0.3125, -0.5, 0.5, floor_y, 0.5}, -- Floor - {-0.5, -0.5, -0.5, -0.375, -0.3125, -0.25}, -- Left front foot, part 1 - {-0.375, -0.5, -0.5, -0.25, -0.3125, -0.375}, -- Left front foot, part 2 - {-0.5, -0.5, 0.25, -0.375, -0.3125, 0.5}, -- Left back foot, part 1 - {-0.375, -0.5, 0.375, -0.25, -0.3125, 0.5}, -- Left back foot, part 2 - {0.375, -0.5, 0.25, 0.5, -0.3125, 0.5}, -- Right back foot, part 1 - {0.25, -0.5, 0.375, 0.375, -0.3125, 0.5}, -- Right back foot, part 2 - {0.375, -0.5, -0.5, 0.5, -0.3125, -0.25}, -- Right front foot, part 1 - {0.25, -0.5, -0.5, 0.375, -0.3125, -0.375}, -- Right front foot, part 2 - } - } -end - -local cauldron_nodeboxes = {} -for w=0,3 do - cauldron_nodeboxes[w] = create_cauldron_nodebox(w) -end - - --- Empty cauldron -minetest.register_node("mcl_cauldrons:cauldron", { - description = S("Cauldron"), - _tt_help = S("Stores water"), - _doc_items_longdesc = S("Cauldrons are used to store water and slowly fill up under rain."), - _doc_items_usagehelp = S("Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water."), - wield_image = "mcl_cauldrons_cauldron.png", - inventory_image = "mcl_cauldrons_cauldron.png", - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - groups = {pickaxey=1, deco_block=1, cauldron=1}, - node_box = cauldron_nodeboxes[0], - selection_box = { type = "regular" }, - tiles = { - "mcl_cauldrons_cauldron_inner.png^mcl_cauldrons_cauldron_top.png", - "mcl_cauldrons_cauldron_inner.png^mcl_cauldrons_cauldron_bottom.png", - "mcl_cauldrons_cauldron_side.png" - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_hardness = 2, - _mcl_blast_resistance = 2, -}) - --- Template function for cauldrons with water -local register_filled_cauldron = function(water_level, description, river_water) - local id = "mcl_cauldrons:cauldron_"..water_level - local water_tex - if river_water then - id = id .. "r" - water_tex = "default_river_water_source_animated.png^[verticalframe:16:0" - else - water_tex = "default_water_source_animated.png^[verticalframe:16:0" - end - minetest.register_node(id, { - description = description, - _doc_items_create_entry = false, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - groups = {pickaxey=1, not_in_creative_inventory=1, cauldron=(1+water_level), cauldron_filled=water_level, comparator_signal=water_level}, - node_box = cauldron_nodeboxes[water_level], - collision_box = cauldron_nodeboxes[0], - selection_box = { type = "regular" }, - tiles = { - "("..water_tex..")^mcl_cauldrons_cauldron_top.png", - "mcl_cauldrons_cauldron_inner.png^mcl_cauldrons_cauldron_bottom.png", - "mcl_cauldrons_cauldron_side.png" - }, - sounds = mcl_sounds.node_sound_metal_defaults(), - drop = "mcl_cauldrons:cauldron", - _mcl_hardness = 2, - _mcl_blast_resistance = 2, - }) - - -- Add entry aliases for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_cauldrons:cauldron", "nodes", id) - end -end - --- Filled cauldrons (3 levels) -register_filled_cauldron(1, S("Cauldron (1/3 Water)")) -register_filled_cauldron(2, S("Cauldron (2/3 Water)")) -register_filled_cauldron(3, S("Cauldron (3/3 Water)")) - -if minetest.get_modpath("mclx_core") then - register_filled_cauldron(1, S("Cauldron (1/3 River Water)"), true) - register_filled_cauldron(2, S("Cauldron (2/3 River Water)"), true) - register_filled_cauldron(3, S("Cauldron (3/3 River Water)"), true) -end - -minetest.register_craft({ - output = "mcl_cauldrons:cauldron", - recipe = { - { "mcl_core:iron_ingot", "", "mcl_core:iron_ingot" }, - { "mcl_core:iron_ingot", "", "mcl_core:iron_ingot" }, - { "mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot" }, - } -}) - -minetest.register_abm({ - label = "cauldrons", - nodenames = {"group:cauldron_filled"}, - interval = 0.5, - chance = 1, - action = function(pos, node) - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0.4)) do - if mcl_burning.is_burning(obj) then - mcl_burning.extinguish(obj) - local new_group = minetest.get_item_group(node.name, "cauldron_filled") - 1 - minetest.swap_node(pos, {name = "mcl_cauldrons:cauldron" .. (new_group == 0 and "" or "_" .. new_group)}) - break - end - end - end -}) diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.de.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.de.tr deleted file mode 100644 index fe1d9aa81a..0000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.de.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=Kessel -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Kessel werden benutzt, um Wasser zu lagern, im Regen werden sie langsam aufgefüllt. Kessel können auch verwendet werden, um Banner abzuwaschen. -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Platzieren Sie einen Wassereinmer in den Kessel, um ihn mit Wasser zu füllen. Platzieren Sie einen leeren Eimer auf einen vollen Kessel, um das Wasser aufzusammeln. Platzieren Sie eine Wasserflasche in den Kessel, um ihn zu einem Drittel mit Wasser zu füllen. Benutzen Sie ein bemaltes Banner auf den Kessel, um die oberste Schicht abzuwaschen. -Cauldron (1/3 Water)=Kessel (1/3 Wasser) -Cauldron (2/3 Water)=Kessel (2/3 Wasser) -Cauldron (3/3 Water)=Kessel (3/3 Wasser) -Cauldron (1/3 River Water)=Kessel (1/3 Wasser) -Cauldron (2/3 River Water)=Kessel (2/3 Flusswasser) -Cauldron (3/3 River Water)=Kessel (3/3 Flusswasser) -Stores water=Speichert Wasser diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.es.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.es.tr deleted file mode 100644 index 9748e61b4e..0000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=Caldera -Cauldrons are used to store water and slowly fill up under rain.=Los calderos se usan para almacenar agua y llenarse lentamente bajo la lluvia. -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water.=Coloque un cubo de agua en el caldero para llenarlo con agua. Coloque un cubo vacío en un caldero lleno para recuperar el agua. Coloque una botella de agua en el caldero para llenar el caldero hasta un tercio con agua. Coloque una botella de vidrio en un caldero con agua para recuperar un tercio del agua. -Cauldron (1/3 Water)=Caldera (1/3 de agua) -Cauldron (2/3 Water)=Caldera (2/3 de agua) -Cauldron (3/3 Water)=Caldera (3/3 de agua) -Cauldron (1/3 River Water)=Caldera (1/3 de agua de río) -Cauldron (2/3 River Water)=Caldera (2/3 de agua de río) -Cauldron (3/3 River Water)=Caldera (3/3 de agua de río) diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.pl.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.pl.tr deleted file mode 100644 index 58826d9ab4..0000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.pl.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=Kocioł -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Kotły są wykorzystywane do przechowywania wody oraz powoli wypełniają się podczas deszczu. -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Umieść wiadro wody w kotle by wypełnić go wodą. Umieść puste wiadro na pełnym kotle by odzyskać wodę. Umieść szklaną butelkę w kotle z wodą aby odzyskać jedną trzecią wody. Użyj upiększonego sztandaru na kotle z wodą aby zmyć górną warstwę. -Cauldron (1/3 Water)=Kocioł (1/3 wody) -Cauldron (2/3 Water)=Kocioł (2/3 wody) -Cauldron (3/3 Water)=Kocioł (3/3 wody) -Cauldron (1/3 River Water)=Kocioł (1/3 rzecznej wody) -Cauldron (2/3 River Water)=Kocioł (2/3 rzecznej wody) -Cauldron (3/3 River Water)=Kocioł (3/3 rzecznej wody) -Stores water=Przechowuje wodę diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.zh_TW.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.zh_TW.tr deleted file mode 100644 index ea3b97c416..0000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.zh_TW.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=鍋釜 -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=鍋釜是用來儲水的,在雨水的作用下慢慢填滿。它們也可以用來清洗旗幟。 -Place a water pucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=將水桶放入鍋釜中,使其充滿水。將一個空桶放在裝滿水的大鍋上,以取回水。將一個水瓶放入鍋釜內,使大鍋內增加三分之一的水。將一個玻璃瓶放在有水的鍋釜裡,取回三分之一的水。在有水的鍋釜上使用印有圖案的旗幟,以洗掉其上層。 -Cauldron (1/3 Water)=鍋釜(1/3 水) -Cauldron (2/3 Water)=鍋釜(2/3 水) -Cauldron (3/3 Water)=鍋釜(3/3 水) -Cauldron (1/3 River Water)=鍋釜(1/3 河水) -Cauldron (2/3 River Water)=鍋釜(2/3 河水) -Cauldron (3/3 River Water)=鍋釜(3/3 河水) -Stores water=儲存水 diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.fr.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.fr.tr deleted file mode 100644 index a241c5cb01..0000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.fr.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=Chaudrons -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Les chaudrons sont utilisés pour stocker l'eau et se remplissent lentement sous la pluie. Ils peuvent également être utilisés pour laver les bannières. -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Placez une marmite d'eau dans le chaudron pour le remplir d'eau. Placez un seau vide sur un chaudron plein pour récupérer l'eau. Placez une bouteille d'eau dans le chaudron pour remplir le chaudron au tiers avec de l'eau. Placez une bouteille en verre dans un chaudron avec de l'eau pour récupérer un tiers de l'eau. Utilisez une bannière blasonnée sur un chaudron avec de l'eau pour laver sa couche supérieure. -Cauldron (1/3 Water)=Chaudron (1/3 d'eau) -Cauldron (2/3 Water)=Chaudron (2/3 d'eau) -Cauldron (3/3 Water)=Chaudron (3/3 d'eau) -Cauldron (1/3 River Water)=Chaudron (1/3 d'eau de rivière) -Cauldron (2/3 River Water)=Chaudron (2/3 d'eau de rivière) -Cauldron (3/3 River Water)=Chaudron (3/3 d'eau de rivière) -Stores water=Stocke l'eau diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.ru.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.ru.tr deleted file mode 100644 index 6ecae1025b..0000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.ru.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron=Котёл -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Котлы используются для хранения воды и медленного наполнения под дождём. Они также могут использоваться для промывания флагов. -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Попытайтесь поместить ведро воды в котёл, чтобы наполнить его водой. Попытка поместить пустое ведро приведёт к освобождению котла. Поместите в котёл бутылку воды, чтобы наполнить его на треть. -Cauldron (1/3 Water)=Котёл (1/3 воды) -Cauldron (2/3 Water)=Котёл (2/3 воды) -Cauldron (3/3 Water)=Котёл (3/3 воды) -Cauldron (1/3 River Water)=Котёл (1/3 речной воды) -Cauldron (2/3 River Water)=Котёл (2/3 речной воды) -Cauldron (3/3 River Water)=Котёл (3/3 речной воды) -Stores water=Хранит воду diff --git a/mods/ITEMS/mcl_cauldrons/locale/template.txt b/mods/ITEMS/mcl_cauldrons/locale/template.txt deleted file mode 100644 index 5e18f32830..0000000000 --- a/mods/ITEMS/mcl_cauldrons/locale/template.txt +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_cauldron -Cauldron= -Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.= -Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.= -Cauldron (1/3 Water)= -Cauldron (2/3 Water)= -Cauldron (3/3 Water)= -Cauldron (1/3 River Water)= -Cauldron (2/3 River Water)= -Cauldron (3/3 River Water)= -Stores water= diff --git a/mods/ITEMS/mcl_cauldrons/mod.conf b/mods/ITEMS/mcl_cauldrons/mod.conf deleted file mode 100644 index 4787d60f9b..0000000000 --- a/mods/ITEMS/mcl_cauldrons/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_cauldrons -depends = mcl_core, mcl_sounds -optional_depends = mclx_core, doc diff --git a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron.png b/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron.png deleted file mode 100644 index d373012fac..0000000000 Binary files a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_bottom.png b/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_bottom.png deleted file mode 100644 index afbe33e30c..0000000000 Binary files a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_inner.png b/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_inner.png deleted file mode 100644 index 8a94bbaeba..0000000000 Binary files a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_inner.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_side.png b/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_side.png deleted file mode 100644 index cca0466f27..0000000000 Binary files a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_top.png b/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_top.png deleted file mode 100644 index 5f056982b9..0000000000 Binary files a/mods/ITEMS/mcl_cauldrons/textures/mcl_cauldrons_cauldron_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua deleted file mode 100644 index 9fe3a81e25..0000000000 --- a/mods/ITEMS/mcl_chests/init.lua +++ /dev/null @@ -1,1456 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_doc = minetest.get_modpath("doc") - --- Christmas chest setup -local it_is_christmas = false -local date = os.date("*t") -if ( - date.month == 12 and ( - date.day == 24 or - date.day == 25 or - date.day == 26 - ) -) then - it_is_christmas = true -end - -local tiles_chest_normal_small = {"mcl_chests_normal.png"} -local tiles_chest_normal_double = {"mcl_chests_normal_double.png"} - -if it_is_christmas then - tiles_chest_normal_small = {"mcl_chests_normal_present.png^mcl_chests_noise.png"} - tiles_chest_normal_double = {"mcl_chests_normal_double_present.png^mcl_chests_noise_double.png"} -end - -local tiles_chest_trapped_small = {"mcl_chests_trapped.png"} -local tiles_chest_trapped_double = {"mcl_chests_trapped_double.png"} - -if it_is_christmas then - tiles_chest_trapped_small = {"mcl_chests_trapped_present.png^mcl_chests_noise.png"} - tiles_chest_trapped_double = {"mcl_chests_trapped_double_present.png^mcl_chests_noise_double.png"} -end - -local tiles_chest_ender_small = {"mcl_chests_ender.png"} - -if it_is_christmas then - tiles_chest_ender_small = {"mcl_chests_ender_present.png^mcl_chests_noise.png"} -end - --- Chest Entity -local animate_chests = (minetest.settings:get_bool("animated_chests") ~= false) -local entity_animations = { - shulker = { - speed = 50, - open = {x = 45, y = 95}, - close = {x = 95, y = 145}, - }, - chest = { - speed = 25, - open = {x = 0, y = 7}, - close = {x = 13, y = 20}, - } -} - -minetest.register_entity("mcl_chests:chest", { - initial_properties = { - visual = "mesh", - visual_size = {x = 3, y = 3}, - pointable = false, - physical = false, - static_save = false, - }, - - set_animation = function(self, animname) - local anim_table = entity_animations[self.animation_type] - local anim = anim_table[animname] - if not anim then return end - self.object:set_animation(anim, anim_table.speed, 0, false) - end, - - open = function(self, playername) - self.players[playername] = true - if not self.is_open then - self:set_animation("open") - minetest.sound_play(self.sound_prefix .. "_open", { - pos = self.node_pos, - }) - self.is_open = true - end - end, - - close = function(self, playername) - local playerlist = self.players - playerlist[playername] = nil - if self.is_open then - if next(playerlist) then - return - end - self:set_animation("close") - minetest.sound_play(self.sound_prefix .. "_close", { - pos = self.node_pos, - }) - self.is_open = false - end - end, - - initialize = function(self, node_pos, node_name, textures, dir, double, sound_prefix, mesh_prefix, animation_type) - self.node_pos = node_pos - self.node_name = node_name - self.sound_prefix = sound_prefix - self.animation_type = animation_type - local obj = self.object - obj:set_properties({ - textures = textures, - mesh = mesh_prefix .. (double and "_double" or "") .. ".b3d", - }) - self:set_yaw(dir) - end, - - reinitialize = function(self, node_name) - self.node_name = node_name - end, - - set_yaw = function(self, dir) - self.object:set_yaw(minetest.dir_to_yaw(dir)) - end, - - check = function(self) - local node_pos, node_name = self.node_pos, self.node_name - if not node_pos or not node_name then - return false - end - local node = minetest.get_node(node_pos) - if node.name ~= node_name then - return false - end - return true - end, - - on_activate = function(self) - self.object:set_armor_groups({immortal = 1}) - self.players = {} - end, - - on_step = function(self, dtime) - if not self:check() then - self.object:remove() - end - end -}) - -local function get_entity_pos(pos, dir, double) - pos = vector.new(pos) - pos.y = pos.y - 0.49 - if double then - local add, mul, vec, cross = vector.add, vector.multiply, vector.new, vector.cross - pos = add(pos, mul(cross(dir, vec(0, 1, 0)), -0.5)) - end - return pos -end - -local function find_entity(pos) - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0)) do - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_chests:chest" then - return luaentity - end - end -end - -local function get_entity_info(pos, param2, double, dir, entity_pos) - dir = dir or minetest.facedir_to_dir(param2) - return dir, get_entity_pos(pos, dir, double) -end - -local function create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos) - dir, entity_pos = get_entity_info(pos, param2, double, dir, entity_pos) - local obj = minetest.add_entity(entity_pos, "mcl_chests:chest") - local luaentity = obj:get_luaentity() - luaentity:initialize(pos, node_name, textures, dir, double, sound_prefix, mesh_prefix, animation_type) - return luaentity -end - -local function find_or_create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos) - dir, entity_pos = get_entity_info(pos, param2, double, dir, entity_pos) - return find_entity(entity_pos) or create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos) -end - -local no_rotate, simple_rotate -if minetest.get_modpath("screwdriver") then - no_rotate = screwdriver.disallow - simple_rotate = function(pos, node, user, mode, new_param2) - if screwdriver.rotate_simple(pos, node, user, mode, new_param2) ~= false then - local nodename = node.name - local nodedef = minetest.registered_nodes[nodename] - local dir = minetest.facedir_to_dir(new_param2) - find_or_create_entity(pos, nodename, nodedef._chest_entity_textures, new_param2, false, nodedef._chest_entity_sound, nodedef._chest_entity_mesh, nodedef._chest_entity_animation_type, dir):set_yaw(dir) - else - return false - end - end -end - ---[[ List of open chests. -Key: Player name -Value: - If player is using a chest: { pos = } - Otherwise: nil ]] -local open_chests = {} - ---[[local function back_is_blocked(pos, dir) - pos = vector.add(pos, dir) - local def = minetest.registered_nodes[minetest.get_node(pos).name] - pos.y = pos.y + 1 - local def2 = minetest.registered_nodes[minetest.get_node(pos).name] - return not def or def.groups.opaque == 1 or not def2 or def2.groups.opaque == 1 -end]] - --- To be called if a player opened a chest -local function player_chest_open(player, pos, node_name, textures, param2, double, sound, mesh, shulker) - local name = player:get_player_name() - open_chests[name] = {pos = pos, node_name = node_name, textures = textures, param2 = param2, double = double, sound = sound, mesh = mesh, shulker = shulker} - if animate_chests then - local dir = minetest.facedir_to_dir(param2) - find_or_create_entity(pos, node_name, textures, param2, double, sound, mesh, shulker and "shulker" or "chest", dir):open(name) - end -end - --- Simple protection checking functions -local function protection_check_move(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end -end -local function protection_check_put_take(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end -end - -local trapped_chest_mesecons_rules = mesecon.rules.pplate - --- To be called when a chest is closed (only relevant for trapped chest atm) -local function chest_update_after_close(pos) - local node = minetest.get_node(pos) - - if node.name == "mcl_chests:trapped_chest_on_small" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_small", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_small") - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - elseif node.name == "mcl_chests:trapped_chest_on_left" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_right", param2 = node.param2}) - mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) - elseif node.name == "mcl_chests:trapped_chest_on_right" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_right", param2 = node.param2}) - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") - mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) - end -end - --- To be called if a player closed a chest -local function player_chest_close(player) - local name = player:get_player_name() - local open_chest = open_chests[name] - if open_chest == nil then - return - end - if animate_chests then - find_or_create_entity(open_chest.pos, open_chest.node_name, open_chest.textures, open_chest.param2, open_chest.double, open_chest.sound, open_chest.mesh, open_chest.shulker and "shulker" or "chest"):close(name) - end - chest_update_after_close(open_chest.pos) - - open_chests[name] = nil -end - --- This is a helper function to register both chests and trapped chests. Trapped chests will make use of the additional parameters -local function register_chest(basename, desc, longdesc, usagehelp, tt_help, tiles_table, hidden, mesecons, on_rightclick_addendum, on_rightclick_addendum_left, on_rightclick_addendum_right, drop, canonical_basename) - -- START OF register_chest FUNCTION BODY - if not drop then - drop = "mcl_chests:"..basename - else - drop = "mcl_chests:"..drop - end - -- The basename of the "canonical" version of the node, if set (e.g.: trapped_chest_on → trapped_chest). - -- Used to get a shared formspec ID and to swap the node back to the canonical version in on_construct. - if not canonical_basename then - canonical_basename = basename - end - - local function double_chest_add_item(top_inv, bottom_inv, listname, stack) - if not stack or stack:is_empty() then - return - end - - local name = stack:get_name() - - local function top_off(inv, stack) - for c, chest_stack in ipairs(inv:get_list(listname)) do - if stack:is_empty() then - break - end - - if chest_stack:get_name() == name and chest_stack:get_free_space() > 0 then - stack = chest_stack:add_item(stack) - inv:set_stack(listname, c, chest_stack) - end - end - - return stack - end - - stack = top_off(top_inv, stack) - stack = top_off(bottom_inv, stack) - - if not stack:is_empty() then - stack = top_inv:add_item(listname, stack) - if not stack:is_empty() then - bottom_inv:add_item(listname, stack) - end - end - end - - local drop_items_chest = mcl_util.drop_items_from_meta_container("main") - - local function on_chest_blast(pos) - local node = minetest.get_node(pos) - drop_items_chest(pos, node) - minetest.remove_node(pos) - end - - local function limit_put_list(stack, list) - for _, other in ipairs(list) do - stack = other:add_item(stack) - if stack:is_empty() then - break - end - end - return stack - end - - local function limit_put(stack, inv1, inv2) - local leftover = ItemStack(stack) - leftover = limit_put_list(leftover, inv1:get_list("main")) - leftover = limit_put_list(leftover, inv2:get_list("main")) - return stack:get_count() - leftover:get_count() - end - - local small_name = "mcl_chests:"..basename.."_small" - local small_textures = tiles_table.small - local left_name = "mcl_chests:"..basename.."_left" - local left_textures = tiles_table.double - - minetest.register_node("mcl_chests:"..basename, { - description = desc, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - _doc_items_hidden = hidden, - drawtype = "mesh", - mesh = "mcl_chests_chest.obj", - tiles = small_textures, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "facedir", - stack_max = 64, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {deco_block=1}, - on_construct = function(pos, node) - local node = minetest.get_node(pos) - node.name = small_name - minetest.set_node(pos, node) - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - }) - - local function close_forms(canonical_basename, pos) - local players = minetest.get_connected_players() - for p=1, #players do - if vector.distance(players[p]:get_pos(), pos) <= 30 then - minetest.close_formspec(players[p]:get_player_name(), "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z) - end - end - end - - minetest.register_node(small_name, { - description = desc, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - _doc_items_hidden = hidden, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, - }, - tiles = {"mcl_chests_blank.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - _chest_entity_textures = small_textures, - _chest_entity_sound = "default_chest", - _chest_entity_mesh = "mcl_chests_chest", - _chest_entity_animation_type = "chest", - paramtype = "light", - paramtype2 = "facedir", - stack_max = 64, - drop = drop, - groups = {handy=1,axey=1, container=2, deco_block=1, material_wood=1,flammable=-1,chest_entity=1, not_in_creative_inventory=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - local param2 = minetest.get_node(pos).param2 - local meta = minetest.get_meta(pos) - --[[ This is a workaround for Minetest issue 5894 - . - Apparently if we don't do this, large chests initially don't work when - placed at chunk borders, and some chests randomly don't work after - placing. ]] - -- FIXME: Remove this workaround when the bug has been fixed. - -- BEGIN OF WORKAROUND -- - meta:set_string("workaround", "ignore_me") - meta:set_string("workaround", nil) -- Done to keep metadata clean - -- END OF WORKAROUND -- - local inv = meta:get_inventory() - inv:set_size("main", 9*3) - --[[ The "input" list is *another* workaround (hahahaha!) around the fact that Minetest - does not support listrings to put items into an alternative list if the first one - happens to be full. See . - This list is a hidden input-only list and immediately puts items into the appropriate chest. - It is only used for listrings and hoppers. This workaround is not that bad because it only - requires a simple “inventory allows” check for large chests.]] - -- FIXME: Refactor the listrings as soon Minetest supports alternative listrings - -- BEGIN OF LISTRING WORKAROUND - inv:set_size("input", 1) - -- END OF LISTRING WORKAROUND - if minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "right")).name == "mcl_chests:"..canonical_basename.."_small" then - minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_right",param2=param2}) - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") - minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_left", param2 = param2 }) - create_entity(p, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") - elseif minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "left")).name == "mcl_chests:"..canonical_basename.."_small" then - minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_left",param2=param2}) - create_entity(pos, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") - minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_right", param2 = param2 }) - else - minetest.swap_node(pos, { name = "mcl_chests:"..canonical_basename.."_small", param2 = param2 }) - create_entity(pos, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") - end - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - after_dig_node = drop_items_chest, - on_blast = on_chest_blast, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = protection_check_put_take, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to chest at "..minetest.pos_to_string(pos)) - -- BEGIN OF LISTRING WORKAROUND - if listname == "input" then - local inv = minetest.get_inventory({type="node", pos=pos}) - inv:add_item("main", stack) - end - -- END OF LISTRING WORKAROUND - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from chest at "..minetest.pos_to_string(pos)) - end, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, - - on_rightclick = function(pos, node, clicker) - if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end - local name = minetest.get_meta(pos):get_string("name") - if name == "" then - name = S("Chest") - end - - minetest.show_formspec(clicker:get_player_name(), - "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, - "size[9,8.75]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", 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).. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]".. - "listring[current_player;main]") - - if on_rightclick_addendum then - on_rightclick_addendum(pos, node, clicker) - end - - player_chest_open(clicker, pos, small_name, small_textures, node.param2, false, "default_chest", "mcl_chests_chest") - end, - - on_destruct = function(pos) - close_forms(canonical_basename, pos) - end, - mesecons = mesecons, - on_rotate = simple_rotate, - }) - - minetest.register_node(left_name, { - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, - }, - tiles = {"mcl_chests_blank.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - _chest_entity_textures = left_textures, - _chest_entity_sound = "default_chest", - _chest_entity_mesh = "mcl_chests_chest", - _chest_entity_animation_type = "chest", - paramtype = "light", - paramtype2 = "facedir", - groups = {handy=1,axey=1, container=5,not_in_creative_inventory=1, material_wood=1,flammable=-1,chest_entity=1,double_chest=1}, - drop = drop, - is_ground_content = false, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - local n = minetest.get_node(pos) - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..canonical_basename.."_right" then - n.name = "mcl_chests:"..canonical_basename.."_small" - minetest.swap_node(pos, n) - end - create_entity(pos, left_name, left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - on_destruct = function(pos) - local n = minetest.get_node(pos) - if n.name == small_name then - return - end - - close_forms(canonical_basename, pos) - - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..basename.."_right" then - return - end - close_forms(canonical_basename, p) - - minetest.swap_node(p, { name = small_name, param2 = param2 }) - create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") - end, - after_dig_node = drop_items_chest, - on_blast = on_chest_blast, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - -- BEGIN OF LISTRING WORKAROUND - elseif listname == "input" then - local inv = minetest.get_inventory({type="node", pos=pos}) - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - return limit_put(stack, inv, other_inv) - --[[if inv:room_for_item("main", stack) then - return -1 - else - - if other_inv:room_for_item("main", stack) then - return -1 - else - return 0 - end - end]]-- - -- END OF LISTRING WORKAROUND - else - return stack:get_count() - end - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to chest at "..minetest.pos_to_string(pos)) - -- BEGIN OF LISTRING WORKAROUND - if listname == "input" then - local inv = minetest.get_inventory({type="node", pos=pos}) - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - - inv:set_stack("input", 1, nil) - - double_chest_add_item(inv, other_inv, "main", stack) - end - -- END OF LISTRING WORKAROUND - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from chest at "..minetest.pos_to_string(pos)) - end, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, - - on_rightclick = function(pos, node, clicker) - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") - local above_def = minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name] - local above_def_other = minetest.registered_nodes[minetest.get_node({x = pos_other.x, y = pos_other.y + 1, z = pos_other.z}).name] - - if not above_def or above_def.groups.opaque == 1 or not above_def_other or above_def_other.groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end - - local name = minetest.get_meta(pos):get_string("name") - if name == "" then - name = minetest.get_meta(pos_other):get_string("name") - end - if name == "" then - name = S("Large Chest") - end - - minetest.show_formspec(clicker:get_player_name(), - "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, - "size[9,11.5]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "list[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main;0,3.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,3.5,9,3).. - "label[0,7;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,7.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,7.5,9,3).. - "list[current_player;main;0,10.75;9,1;]".. - mcl_formspec.get_itemslot_bg(0,10.75,9,1).. - -- BEGIN OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";input]".. - -- END OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]".. - "listring[current_player;main]".. - "listring[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main]") - - if on_rightclick_addendum_left then - on_rightclick_addendum_left(pos, node, clicker) - end - - player_chest_open(clicker, pos, left_name, left_textures, node.param2, true, "default_chest", "mcl_chests_chest") - end, - mesecons = mesecons, - on_rotate = no_rotate, - }) - - minetest.register_node("mcl_chests:"..basename.."_right", { - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, - }, - tiles = {"mcl_chests_blank.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - groups = {handy=1,axey=1, container=6,not_in_creative_inventory=1, material_wood=1,flammable=-1,double_chest=2}, - drop = drop, - is_ground_content = false, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - local n = minetest.get_node(pos) - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..canonical_basename.."_left" then - n.name = "mcl_chests:"..canonical_basename.."_small" - minetest.swap_node(pos, n) - end - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - on_destruct = function(pos) - local n = minetest.get_node(pos) - if n.name == small_name then - return - end - - close_forms(canonical_basename, pos) - - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..basename.."_left" then - return - end - close_forms(canonical_basename, p) - - minetest.swap_node(p, { name = small_name, param2 = param2 }) - create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") - end, - after_dig_node = drop_items_chest, - on_blast = on_chest_blast, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - -- BEGIN OF LISTRING WORKAROUND - elseif listname == "input" then - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - local inv = minetest.get_inventory({type="node", pos=pos}) - --[[if other_inv:room_for_item("main", stack) then - return -1 - else - if inv:room_for_item("main", stack) then - return -1 - else - return 0 - end - end--]] - return limit_put(stack, other_inv, inv) - -- END OF LISTRING WORKAROUND - else - return stack:get_count() - end - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to chest at "..minetest.pos_to_string(pos)) - -- BEGIN OF LISTRING WORKAROUND - if listname == "input" then - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - local inv = minetest.get_inventory({type="node", pos=pos}) - - inv:set_stack("input", 1, nil) - - double_chest_add_item(other_inv, inv, "main", stack) - end - -- END OF LISTRING WORKAROUND - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from chest at "..minetest.pos_to_string(pos)) - end, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, - - on_rightclick = function(pos, node, clicker) - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") - if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 - or minetest.registered_nodes[minetest.get_node({x = pos_other.x, y = pos_other.y + 1, z = pos_other.z}).name].groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end - - local name = minetest.get_meta(pos_other):get_string("name") - if name == "" then - name = minetest.get_meta(pos):get_string("name") - end - if name == "" then - name = S("Large Chest") - end - - minetest.show_formspec(clicker:get_player_name(), - "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, - - "size[9,11.5]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,3.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,3.5,9,3).. - "label[0,7;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,7.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,7.5,9,3).. - "list[current_player;main;0,10.75;9,1;]".. - mcl_formspec.get_itemslot_bg(0,10.75,9,1).. - -- BEGIN OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";input]".. - -- END OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main]".. - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]") - - if on_rightclick_addendum_right then - on_rightclick_addendum_right(pos, node, clicker) - end - - player_chest_open(clicker, pos_other, left_name, left_textures, node.param2, true, "default_chest", "mcl_chests_chest") - end, - mesecons = mesecons, - on_rotate = no_rotate, - }) - - if mod_doc then - doc.add_entry_alias("nodes", small_name, "nodes", "mcl_chests:"..basename.."_left") - doc.add_entry_alias("nodes", small_name, "nodes", "mcl_chests:"..basename.."_right") - end - - -- END OF register_chest FUNCTION BODY -end - -local chestusage = S("To access its inventory, rightclick it. When broken, the items will drop out.") - -register_chest("chest", - S("Chest"), - S("Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other."), - chestusage, - S("27 inventory slots") .. "\n" .. S("Can be combined to a large chest"), - { - small = tiles_chest_normal_small, - double = tiles_chest_normal_double, - inv = {"default_chest_top.png", "mcl_chests_chest_bottom.png", - "mcl_chests_chest_right.png", "mcl_chests_chest_left.png", - "mcl_chests_chest_back.png", "default_chest_front.png"}, - --[[left = {"default_chest_top_big.png", "default_chest_top_big.png", - "mcl_chests_chest_right.png", "mcl_chests_chest_left.png", - "default_chest_side_big.png^[transformFX", "default_chest_front_big.png"}, - right = {"default_chest_top_big.png^[transformFX", "default_chest_top_big.png^[transformFX", - "mcl_chests_chest_right.png", "mcl_chests_chest_left.png", - "default_chest_side_big.png", "default_chest_front_big.png^[transformFX"},]]-- - }, - false -) - -local traptiles = { - small = tiles_chest_trapped_small, - double = tiles_chest_trapped_double, - inv = {"mcl_chests_chest_trapped_top.png", "mcl_chests_chest_trapped_bottom.png", - "mcl_chests_chest_trapped_right.png", "mcl_chests_chest_trapped_left.png", - "mcl_chests_chest_trapped_back.png", "mcl_chests_chest_trapped_front.png"}, - --[[left = {"mcl_chests_chest_trapped_top_big.png", "mcl_chests_chest_trapped_top_big.png", - "mcl_chests_chest_trapped_right.png", "mcl_chests_chest_trapped_left.png", - "mcl_chests_chest_trapped_side_big.png^[transformFX", "mcl_chests_chest_trapped_front_big.png"}, - right = {"mcl_chests_chest_trapped_top_big.png^[transformFX", "mcl_chests_chest_trapped_top_big.png^[transformFX", - "mcl_chests_chest_trapped_right.png", "mcl_chests_chest_trapped_left.png", - "mcl_chests_chest_trapped_side_big.png", "mcl_chests_chest_trapped_front_big.png^[transformFX"},]]-- -} - -register_chest("trapped_chest", - S("Trapped Chest"), - S("A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other."), - chestusage, - S("27 inventory slots") .. "\n" .. S("Can be combined to a large chest") .. "\n" .. S("Emits a redstone signal when opened"), - traptiles, - nil, - {receptor = { - state = mesecon.state.off, - rules = trapped_chest_mesecons_rules, - }}, - function(pos, node, clicker) - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on_small", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_on_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_small") - mesecon.receptor_on(pos, trapped_chest_mesecons_rules) - end, - function(pos, node, clicker) - local meta = minetest.get_meta(pos) - meta:set_int("players", 1) - - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on_left", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_on_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_left") - mesecon.receptor_on(pos, trapped_chest_mesecons_rules) - - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_on_right", param2 = node.param2}) - mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules) - end, - function(pos, node, clicker) - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") - - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on_right", param2 = node.param2}) - mesecon.receptor_on(pos, trapped_chest_mesecons_rules) - - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_on_left", param2 = node.param2}) - find_or_create_entity(pos_other, "mcl_chests:trapped_chest_on_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_left") - mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules) - end -) - -register_chest("trapped_chest_on", - nil, nil, nil, nil, traptiles, true, - {receptor = { - state = mesecon.state.on, - rules = trapped_chest_mesecons_rules, - }}, - nil, nil, nil, - "trapped_chest", - "trapped_chest" -) - ---[[local function close_if_trapped_chest(pos, player) - local node = minetest.get_node(pos) - - if node.name == "mcl_chests:trapped_chest_on_small" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_small", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_small") - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - - player_chest_close(player) - elseif node.name == "mcl_chests:trapped_chest_on_left" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_right", param2 = node.param2}) - mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) - - player_chest_close(player) - elseif node.name == "mcl_chests:trapped_chest_on_right" then - minetest.swap_node(pos, {name="mcl_chests:trapped_chest_right", param2 = node.param2}) - mesecon.receptor_off(pos, trapped_chest_mesecons_rules) - - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") - minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", tiles_chest_trapped_double, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") - mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) - - player_chest_close(player) - end -end]] - --- Disable chest when it has been closed -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname:find("mcl_chests:") == 1 then - if fields.quit then - player_chest_close(player) - end - end -end) - -minetest.register_on_leaveplayer(function(player) - player_chest_close(player) -end) - -minetest.register_craft({ - output = "mcl_chests:chest", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_chests:chest", - burntime = 15 -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_chests:trapped_chest", - burntime = 15 -}) - -minetest.register_node("mcl_chests:ender_chest", { - description = S("Ender Chest"), - _tt_help = S("27 interdimensional inventory slots") .. "\n" .. S("Put items inside, retrieve them from any ender chest"), - _doc_items_longdesc = S("Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players."), - _doc_items_usagehelp = S("Rightclick the ender chest to access your personal interdimensional inventory."), - drawtype = "mesh", - mesh = "mcl_chests_chest.obj", - tiles = tiles_chest_ender_small, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "facedir", - stack_max = 64, - groups = {deco_block=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_construct = function(pos, node) - local node = minetest.get_node(pos) - node.name = "mcl_chests:ender_chest_small" - minetest.set_node(pos, node) - end, -}) - -local formspec_ender_chest = "size[9,8.75]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Ender Chest"))).."]".. - "list[current_player;enderchest;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", 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).. - "listring[current_player;enderchest]".. - "listring[current_player;main]" - - -minetest.register_node("mcl_chests:ender_chest_small", { - description = S("Ender Chest"), - _tt_help = S("27 interdimensional inventory slots") .. "\n" .. S("Put items inside, retrieve them from any ender chest"), - _doc_items_longdesc = S("Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players."), - _doc_items_usagehelp = S("Rightclick the ender chest to access your personal interdimensional inventory."), - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, - }, - _chest_entity_textures = {"mcl_chests_ender.png"}, - _chest_entity_sound = "mcl_chests_enderchest", - _chest_entity_mesh = "mcl_chests_chest", - _chest_entity_animation_type = "chest", - tiles = {"mcl_chests_blank.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - --[[{"mcl_chests_ender_chest_top.png", "mcl_chests_ender_chest_bottom.png", - "mcl_chests_ender_chest_right.png", "mcl_chests_ender_chest_left.png", - "mcl_chests_ender_chest_back.png", "mcl_chests_ender_chest_front.png"},]]-- - -- Note: The “container” group is missing here because the ender chest does not - -- have an inventory on its own - groups = {pickaxey=1, deco_block=1, material_stone=1, chest_entity=1, not_in_creative_inventory=1}, - is_ground_content = false, - paramtype = "light", - light_source = 7, - paramtype2 = "facedir", - sounds = mcl_sounds.node_sound_stone_defaults(), - drop = "mcl_core:obsidian 8", - on_construct = function(pos) - create_entity(pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, minetest.get_node(pos).param2, false, "mcl_chests_enderchest", "mcl_chests_chest", "chest") - end, - on_rightclick = function(pos, node, clicker) - if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end - minetest.show_formspec(clicker:get_player_name(), "mcl_chests:ender_chest_"..clicker:get_player_name(), formspec_ender_chest) - player_chest_open(clicker, pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, node.param2, false, "mcl_chests_enderchest", "mcl_chests_chest") - end, - on_receive_fields = function(pos, formname, fields, sender) - if fields.quit then - player_chest_close(sender) - end - end, - _mcl_blast_resistance = 3000, - _mcl_hardness = 22.5, - _mcl_silk_touch_drop = {"mcl_chests:ender_chest"}, - on_rotate = simple_rotate, -}) - -minetest.register_on_joinplayer(function(player) - local inv = player:get_inventory() - inv:set_size("enderchest", 9*3) -end) - -minetest.register_allow_player_inventory_action(function(player, action, inv, info) - if inv:get_location().type == "player" and ( - action == "move" and (info.from_list == "enderchest" or info.to_list == "enderchest") - or action == "put" and info.listname == "enderchest" - or action == "take" and info.listname == "enderchest" - ) then - local def = player:get_wielded_item():get_definition() - - if not minetest.find_node_near(player:get_pos(), def and def.range or ItemStack():get_definition().range, "mcl_chests:ender_chest_small", true) then - return 0 - end - end -end) - -minetest.register_craft({ - output = "mcl_chests:ender_chest", - recipe = { - {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}, - {"mcl_core:obsidian", "mcl_end:ender_eye", "mcl_core:obsidian"}, - {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}, - } -}) - --- Shulker boxes -local boxtypes = { - white = S("White Shulker Box"), - grey = S("Light Grey Shulker Box"), - orange = S("Orange Shulker Box"), - cyan = S("Cyan Shulker Box"), - magenta = S("Magenta Shulker Box"), - violet = S("Purple Shulker Box"), - lightblue = S("Light Blue Shulker Box"), - blue = S("Blue Shulker Box"), - yellow = S("Yellow Shulker Box"), - brown = S("Brown Shulker Box"), - green = S("Lime Shulker Box"), - dark_green = S("Green Shulker Box"), - pink = S("Pink Shulker Box"), - red = S("Red Shulker Box"), - dark_grey = S("Grey Shulker Box"), - black = S("Black Shulker Box"), -} - -local shulker_mob_textures = { - white = "mobs_mc_shulker_white.png", - grey = "mobs_mc_shulker_silver.png", - orange = "mobs_mc_shulker_orange.png", - cyan = "mobs_mc_shulker_cyan.png", - magenta = "mobs_mc_shulker_magenta.png", - violet = "mobs_mc_shulker_purple.png", - lightblue = "mobs_mc_shulker_light_blue.png", - blue = "mobs_mc_shulker_blue.png", - yellow = "mobs_mc_shulker_yellow.png", - brown = "mobs_mc_shulker_brown.png", - green = "mobs_mc_shulker_lime.png", - dark_green = "mobs_mc_shulker_green.png", - pink = "mobs_mc_shulker_pink.png", - red = "mobs_mc_shulker_red.png", - dark_grey = "mobs_mc_shulker_gray.png", - black = "mobs_mc_shulker_black.png", -} -local canonical_shulker_color = "violet" - -local function formspec_shulker_box(name) - if name == "" then - name = S("Shulker Box") - end - return "size[9,8.75]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[context;main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", 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).. - "listring[context;main]".. - "listring[current_player;main]" -end - -local function set_shulkerbox_meta(nmeta, imeta) - local name = imeta:get_string("name") - nmeta:set_string("description", imeta:get_string("description")) - nmeta:set_string("name", name) - nmeta:set_string("formspec", formspec_shulker_box(name)) -end - -for color, desc in pairs(boxtypes) do - local mob_texture = shulker_mob_textures[color] - local is_canonical = color == canonical_shulker_color - local longdesc, usagehelp, create_entry, entry_name - if mod_doc then - if is_canonical then - longdesc = S("A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.") - usagehelp = S("To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out. Place the shulker box again to be able to retrieve its contents.") - entry_name = S("Shulker Box") - else - create_entry = false - end - end - - local small_name = "mcl_chests:"..color.."_shulker_box_small" - - minetest.register_node("mcl_chests:"..color.."_shulker_box", { - description = desc, - _tt_help = S("27 inventory slots") .. "\n" .. S("Can be carried around with its contents"), - _doc_items_create_entry = create_entry, - _doc_items_entry_name = entry_name, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - tiles = {mob_texture}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - drawtype = "mesh", - mesh = "mcl_chests_shulker.obj", - --[["mcl_chests_"..color.."_shulker_box_top.png", -- top - "[combine:16x16:-32,-28="..mob_texture, -- bottom - "[combine:16x16:0,-36="..mob_texture..":0,-16="..mob_texture, -- side - "[combine:16x16:-32,-36="..mob_texture..":-32,-16="..mob_texture, -- side - "[combine:16x16:-16,-36="..mob_texture..":-16,-16="..mob_texture, -- side - "[combine:16x16:-48,-36="..mob_texture..":-48,-16="..mob_texture, -- side]]-- - groups = {handy=1,pickaxey=1, container=3, deco_block=1, dig_by_piston=1, shulker_box=1, old_shulker_box_node=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - stack_max = 1, - drop = "", - paramtype = "light", - paramtype2 = "facedir", - on_construct = function(pos) - local node = minetest.get_node(pos) - node.name = small_name - minetest.set_node(pos, node) - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - local nmeta = minetest.get_meta(pos) - local imetadata = itemstack:get_metadata() - local iinv_main = minetest.deserialize(imetadata) - local ninv = nmeta:get_inventory() - ninv:set_list("main", iinv_main) - ninv:set_size("main", 9*3) - set_shulkerbox_meta(nmeta, itemstack:get_meta()) - - if minetest.is_creative_enabled(placer:get_player_name()) then - if not ninv:is_empty("main") then - return nil - else - return itemstack - end - else - return nil - end - end, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Place shulker box as node - if minetest.registered_nodes[dropnode.name].buildable_to then - minetest.set_node(droppos, {name = small_name, param2 = minetest.dir_to_facedir(dropdir)}) - local ninv = minetest.get_inventory({type="node", pos=droppos}) - local imetadata = stack:get_metadata() - local iinv_main = minetest.deserialize(imetadata) - ninv:set_list("main", iinv_main) - ninv:set_size("main", 9*3) - set_shulkerbox_meta(minetest.get_meta(droppos), stack:get_meta()) - stack:take_item() - end - return stack - end, - }) - - minetest.register_node(small_name, { - description = desc, - _tt_help = S("27 inventory slots") .. "\n" .. S("Can be carried around with its contents"), - _doc_items_create_entry = create_entry, - _doc_items_entry_name = entry_name, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - drawtype = "nodebox", - tiles = {"mcl_chests_blank.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - _chest_entity_textures = {mob_texture}, - _chest_entity_sound = "mcl_chests_shulker", - _chest_entity_mesh = "mcl_chests_shulker", - _chest_entity_animation_type = "shulker", - groups = {handy=1,pickaxey=1, container=3, deco_block=1, dig_by_piston=1, shulker_box=1, chest_entity=1, not_in_creative_inventory=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - stack_max = 1, - drop = "", - paramtype = "light", - paramtype2 = "facedir", --- TODO: Make shulker boxes rotatable --- This doesn't work, it just destroys the inventory: --- on_place = minetest.rotate_node, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec_shulker_box(nil)) - local inv = meta:get_inventory() - inv:set_size("main", 9*3) - create_entity(pos, small_name, {mob_texture}, minetest.get_node(pos).param2, false, "mcl_chests_shulker", "mcl_chests_shulker", "shulker") - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - local nmeta = minetest.get_meta(pos) - local imetadata = itemstack:get_metadata() - local iinv_main = minetest.deserialize(imetadata) - local ninv = nmeta:get_inventory() - ninv:set_list("main", iinv_main) - ninv:set_size("main", 9*3) - set_shulkerbox_meta(nmeta, itemstack:get_meta()) - - if minetest.is_creative_enabled(placer:get_player_name()) then - if not ninv:is_empty("main") then - return nil - else - return itemstack - end - else - return nil - end - end, - on_rightclick = function(pos, node, clicker) - player_chest_open(clicker, pos, small_name, {mob_texture}, node.param2, false, "mcl_chests_shulker", "mcl_chests_shulker", true) - end, - on_receive_fields = function(pos, formname, fields, sender) - if fields.quit then - player_chest_close(sender) - end - end, - on_destruct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local items = {} - for i=1, inv:get_size("main") do - local stack = inv:get_stack("main", i) - items[i] = stack:to_string() - end - local data = minetest.serialize(items) - local boxitem = ItemStack("mcl_chests:"..color.."_shulker_box") - local boxitem_meta = boxitem:get_meta() - boxitem_meta:set_string("description", meta:get_string("description")) - boxitem_meta:set_string("name", meta:get_string("name")) - boxitem:set_metadata(data) - - if minetest.is_creative_enabled("") then - if not inv:is_empty("main") then - minetest.add_item(pos, boxitem) - end - else - minetest.add_item(pos, boxitem) - end - end, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - end - -- Do not allow to place shulker boxes into shulker boxes - local group = minetest.get_item_group(stack:get_name(), "shulker_box") - if group == 0 or group == nil then - return stack:get_count() - else - return 0 - end - end, - _mcl_blast_resistance = 6, - _mcl_hardness = 2, - }) - - if mod_doc and not is_canonical then - doc.add_entry_alias("nodes", "mcl_chests:"..canonical_shulker_color.."_shulker_box", "nodes", "mcl_chests:"..color.."_shulker_box") - doc.add_entry_alias("nodes", "mcl_chests:"..canonical_shulker_color.."_shulker_box_small", "nodes", "mcl_chests:"..color.."_shulker_box_small") - end - - minetest.register_craft({ - type = "shapeless", - output = "mcl_chests:"..color.."_shulker_box", - recipe = { "group:shulker_box", "mcl_dye:"..color } - }) -end - -minetest.register_craft({ - output = "mcl_chests:violet_shulker_box", - recipe = { - {"mcl_mobitems:shulker_shell"}, - {"mcl_chests:chest"}, - {"mcl_mobitems:shulker_shell"}, - } -}) - --- Save metadata of shulker box when used in crafting -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - if minetest.get_item_group(itemstack:get_name(), "shulker_box") ~= 1 then - return - end - local original - for i = 1, #old_craft_grid do - local item = old_craft_grid[i]:get_name() - if minetest.get_item_group(item, "shulker_box") == 1 then - original = old_craft_grid[i] - break - end - end - if original then - local ometa = original:get_meta():to_table() - local nmeta = itemstack:get_meta() - nmeta:from_table(ometa) - return itemstack - end -end) - -local function select_and_spawn_entity(pos, node) - local node_name = node.name - local node_def = minetest.registered_nodes[node_name] - local double_chest = minetest.get_item_group(node_name, "double_chest") > 0 - find_or_create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh, node_def._chest_entity_animation_type) -end - -minetest.register_lbm({ - label = "Spawn Chest entities", - name = "mcl_chests:spawn_chest_entities", - nodenames = {"group:chest_entity"}, - run_at_every_load = true, - action = select_and_spawn_entity, -}) - -minetest.register_lbm({ - label = "Replace old chest nodes", - name = "mcl_chests:replace_old", - nodenames = {"mcl_chests:chest", "mcl_chests:trapped_chest", "mcl_chests:trapped_chest_on", "mcl_chests:ender_chest", "group:old_shulker_box_node"}, - run_at_every_load = true, - action = function(pos, node) - local node_name = node.name - node.name = node_name .. "_small" - minetest.swap_node(pos, node) - select_and_spawn_entity(pos, node) - if node_name == "mcl_chests:trapped_chest_on" then - minetest.log("action", "[mcl_chests] Disabled active trapped chest on load: " ..minetest.pos_to_string(pos)) - chest_update_after_close(pos) - elseif node_name == "mcl_chests:ender_chest" then - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec_ender_chest) - end - end -}) - -minetest.register_lbm({ - -- Disable active/open trapped chests when loaded because nobody could - -- have them open at loading time. - -- Fixes redstone weirdness. - label = "Disable active trapped chests", - name = "mcl_chests:reset_trapped_chests", - nodenames = { "mcl_chests:trapped_chest_on_small", "mcl_chests:trapped_chest_on_left", "mcl_chests:trapped_chest_on_right" }, - run_at_every_load = true, - action = function(pos, node) - minetest.log("action", "[mcl_chests] Disabled active trapped chest on load: " ..minetest.pos_to_string(pos)) - chest_update_after_close(pos) - end, -}) - -minetest.register_lbm({ - label = "Update shulker box formspecs (0.60.0)", - name = "mcl_chests:update_shulker_box_formspecs_0_60_0", - nodenames = { "group:shulker_box" }, - run_at_every_load = false, - action = function(pos, node) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec_shulker_box) - end, -}) - -minetest.register_lbm({ - label = "Upgrade old ender chest formspec", - name = "mcl_chests:replace_old_ender_form", - nodenames = {"mcl_chests:ender_chest_small"}, - run_at_every_load = false, - action = function(pos, node) - minetest.get_meta(pos):set_string("formspec", "") - end, -}) diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.de.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.de.tr deleted file mode 100644 index b4ef796904..0000000000 --- a/mods/ITEMS/mcl_chests/locale/mcl_chests.de.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_chests -Chest=Truhe -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Truhen sind Behälter, die 27 Inventarplätze Platz bieten. Truhen verwandeln sich in große Truhen mit der doppelten Kapazität, wenn zwei Truhen nebeneinander platziert werden. -To access its inventory, rightclick it. When broken, the items will drop out.=Um auf das Inventar zuzugreifen, rechtsklicken Sie darauf. Wenn abgebaut, wird der Inhalt hinausfallen. -Trapped Chest=Mechanismustruhe -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Mechanismustruhen sind Behälter, die 27 Inventarplätze Platz bieten. Wenn sie geöffnet wird, sendet sie ein Redstone-Signal zu benachbarten Blöcken, solange sie geöffnet bleibt. Mechanismustruhen verwandeln sich in große Mechanismustruhen mit der doppelten Kapazität, wenn zwei Mechanismustruhen nebeneinander platziert werden. -Ender Chest=Endertruhe -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Endertruhen gewähren Ihnen Zugriff zu einem einzigartigen persönlichen interdimensionalen Inventar mit 27 Plätzen. Dieses Inventar ist das selbe, egal, welche Endertruhe sie benutzen. Wenn Sie einen Gegenstand in eine Endertruhe platzieren, werden Sie sie in allen anderen Endertruhen vorhinden. Jeder Spieler wird nur seine eigenen Gegenstände sehen, aber nicht die der anderen Spieler. -Rightclick the ender chest to access your personal interdimensional inventory.=Rechtsklicken Sie die Endertruhe, um auf Ihr persönliches interdimensionales Inventar zuzugreifen. -White Shulker Box=Weiße Schulkerkiste -Light Grey Shulker Box=Hellgraue Schulkerkiste -Orange Shulker Box=Orange Schulkerkiste -Cyan Shulker Box=Türkise Schulkerkiste -Magenta Shulker Box=Magenta Schulkerkiste -Purple Shulker Box=Violette Schulkerkiste -Light Blue Shulker Box=Hellblaue Schulkerkiste -Blue Shulker Box=Blaue Schulkerkiste -Yellow Shulker Box=Gelbe Schulkerkiste -Brown Shulker Box=Braune Schulkerkiste -Lime Shulker Box=Lindgrüne Schulkerkiste -Green Shulker Box=Grüne Schulkerkiste -Pink Shulker Box=Rosa Schulkerkiste -Red Shulker Box=Rote Schulkerkiste -Grey Shulker Box=Graue Schulkerkiste -Black Shulker Box=Schwarze Schulkerkiste -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Eine Schulkerkiste ist ein tragbarer Behälter, der 27 Inventarplätze für alle Gegenstände außer Schulkerkisten bietet. Schulkerkisten behalten ihr Inventar, wenn sie abgebaut werden, also können Schulkerkisten so wie ihr Inhalt als einzelne Gegenstände mitgenommen werden. Schulkerkisten gibt es in vielen verschiedenen Farben. -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out.=Um auf das Inventar einer Schulkerkiste zuzugreifen, platzieren Sie sie und rechtsklicken sie auf ihr. Um eine Schulkerkiste und ihren Inhalt mitzunehmen, bauen Sie sie einfach ab und sammeln Sie sie auf, der Inhalt will nicht hinausfallen. -Shulker Box=Schulkerkiste -Large Chest=Große Truhe -Inventory=Inventar -27 inventory slots=27 Inventarplätze -Can be carried around with its contents=Kann mitsamt Inhalt transportiert werden -Can be combined to a large chest=Kann zu einer großen Truhe kombiniert werden -27 interdimensional inventory slots=27 interdimensionale Inventarplätze -Put items inside, retrieve them from any ender chest=Abgelegte Gegenstände können aus beliebigen Endertruhen genommen werden -Emits a redstone signal when opened=Sendet ein Redstonesignal beim Öffnen diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.es.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.es.tr deleted file mode 100644 index 9d44bacca7..0000000000 --- a/mods/ITEMS/mcl_chests/locale/mcl_chests.es.tr +++ /dev/null @@ -1,30 +0,0 @@ -# textdomain: mcl_chests -Chest=Cofre -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Los cofres son contenedores que proporcionan 27 ranuras de inventario. Los cofres se pueden convertir en cofres grandes con el doble de capacidad colocando dos cofres uno al lado del otro. -To access its inventory, rightclick it. When broken, the items will drop out.=Para acceder a su inventario, haga clic derecho. Cuando se rompen, los artículos se caerán. -Trapped Chest=Cofre trampa -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Un sofre trampa es un contenedor que proporciona 27 ranuras de inventario. Cuando se abre, envía una señal de redstone a sus bloques adyacentes siempre que permanezca abierto. Los cofres trampa se pueden convertir en grandes cofres trampa con el doble de capacidad colocando dos cofres atrapados uno al lado del otro. -Ender Chest=Cofre de ender -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Los cofres Ender le otorgan acceso a un único inventario interdimensional personal con 27 ranuras. Este inventario es el mismo sin importar desde qué cofre de acceso accedas. Si pones un elemento en un cofre de ender, lo encontrarás en todos los demás cofres de ender. Cada jugador solo verá sus propios artículos, pero no los artículos de otros jugadores. -Rightclick the ender chest to access your personal interdimensional inventory.=Haga clic derecho en el cofre ender para acceder a su inventario interdimensional personal. -White Shulker Box=Caja de shulker Blanca -Light Grey Shulker Box=Caja de shulker gris claro -Orange Shulker Box=Caja de shulker naranja -Cyan Shulker Box=Caja de shulker cian -Magenta Shulker Box=Caja de shulker magenta -Purple Shulker Box=Caja de shulker morada -Light Blue Shulker Box=Caja de shulker azul claro -Blue Shulker Box=Caja de shulker azul -Yellow Shulker Box=Caja de shulker amarilla -Brown Shulker Box=Caja de shulker marrón -Lime Shulker Box=Caja de shulker verde lima -Green Shulker Box=Caja de shulker verde -Pink Shulker Box=Caja de shulker rosa -Red Shulker Box=Caja de shulker roja -Grey Shulker Box=Caja de shulker gris -Black Shulker Box=Caja de shulker negra -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Una caja de shulker es un contenedor portátil que proporciona 27 ranuras de inventario para cualquier artículo, excepto las cajas shulker. Las cajas de shulker mantienen su inventario cuando están rotas, por lo que las cajas de shulker y sus contenidos se pueden tomar como un solo artículo. Las cajas shulker vienen en muchos colores diferentes. -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out.=Para acceder al inventario de un cuadro de shulker, colóquelo y haga clic con el botón derecho. Para llevar una caja de shulker y su contenido, solo rómpela y recójala, los artículos no se caerán. -Shulker Box=Caja de shulker -Large Chest=Arcón -Inventory=Inventario diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.fr.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.fr.tr deleted file mode 100644 index b84dac0221..0000000000 --- a/mods/ITEMS/mcl_chests/locale/mcl_chests.fr.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_chests -Chest=Coffre -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Les coffres sont des conteneurs qui offrent 27 emplacements d'inventaire. Les coffres peuvent être transformés en grands coffres avec une capacité double en plaçant deux coffres l'un à côté de l'autre. -To access its inventory, rightclick it. When broken, the items will drop out.=Pour accéder à son inventaire, faites un clic droit dessus. Une fois cassés, les articles tomberont. -Trapped Chest=Coffre Piégé -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Un coffre piégé est un conteneur qui fournit 27 emplacements d'inventaire. Lorsqu'il est ouvert, il envoie un signal redstone à ses blocs adjacents tant qu'il reste ouvert. Les coffres piégés peuvent être transformés en grands coffres piégés avec une capacité double en plaçant deux coffres piégés l'un à côté de l'autre. -Ender Chest=Coffre Ender -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Les coffres Ender vous donnent accès à un seul inventaire interdimensionnel personnel avec 27 emplacements. Cet inventaire est le même quel que soit le coffre d'ender d'où vous y accédez. Si vous placez un objet dans un coffre d'ender, vous le trouverez dans tous les autres coffres d'ender. Chaque joueur ne verra que ses propres objets, mais pas ceux des autres joueurs. -Rightclick the ender chest to access your personal interdimensional inventory.=Faites un clic droit sur le coffre d'ender pour accéder à votre inventaire interdimensionnel personnel. -White Shulker Box=Boîte de Shulter Blanche -Light Grey Shulker Box=Boîte de Shulter Gris Clair -Orange Shulker Box=Boîte de Shulter Orange -Cyan Shulker Box=Boîte de Shulter Cyan -Magenta Shulker Box=Boîte de Shulter Magenta -Purple Shulker Box=Boîte de Shulter Violette -Light Blue Shulker Box=Boîte de Shulter Bleu Clair -Blue Shulker Box=Boîte de Shulter Bleue -Yellow Shulker Box=Boîte de Shulter Jaune -Brown Shulker Box=Boîte de Shulter Marron -Lime Shulker Box=Boîte de Shulter Vert Clair -Green Shulker Box=Boîte de Shulter Verte -Pink Shulker Box=Boîte de Shulter Rose -Red Shulker Box=Boîte de Shulter Rouge -Grey Shulker Box=Boîte de Shulter Grise -Black Shulker Box=Boîte de Shulter Noire -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Une boîte shulker est un conteneur portable qui fournit 27 emplacements d'inventaire pour tout article, à l'exception des boîtes shulker. Les boîtes Shulker conservent leur inventaire lorsqu'elles sont brisées, de sorte que les boîtes Shulker ainsi que leur contenu peuvent être considérés comme un seul élément. Les boîtes Shulker sont disponibles dans de nombreuses couleurs différentes. -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out. Place the shulker box again to be able to retrieve its contents.=Pour accéder à l'inventaire d'une boîte shulker, placez-la et cliquez dessus avec le bouton droit. Pour emporter une boîte shulker et son contenu, il suffit de la casser et de la récupérer, les objets ne tomberont pas. Replacez la boîte shulker pour pouvoir récupérer son contenu. -Shulker Box=Boîte de Shulter -Large Chest=Coffre Large -Inventory=Inventaire -27 inventory slots=27 emplacements d'inventaire -Can be carried around with its contents=Peut être transporté avec son contenu -Can be combined to a large chest=Peut être combiné à un grand coffre -27 interdimensional inventory slots=27 emplacements d'inventaire interdimensionnels -Put items inside, retrieve them from any ender chest=Mettez des objets à l'intérieur, récupérez-les dans n'importe quel coffre -Emits a redstone signal when opened=Émet un signal redstone à l'ouverture diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr deleted file mode 100644 index b4eee74eb1..0000000000 --- a/mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_chests -Chest=Skrzynia -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Skrzynie to pojemniki zawierające 27 miejsc ekwipunku. Skrzynie można zmienić w wielkie skrzynie z podwojoną pojemnością kładąc dwie skrzynie jedna obok drugiej. -To access its inventory, rightclick it. When broken, the items will drop out.=Aby zarządzać jej ekwipunkiem kliknij prawym przyciskiem. Po zniszczeniu przedmioty z niej wypadną. -Trapped Chest=Skrzynia-pułapka -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Skrzynia pułapka jest pojemnikiem zawierającym 27 miejsc ekwipunku. Gdy jest otwarta wysyła ona zasila czerwienit na sąsiadujących blokach tak długo jak jest otwarta. Skrzynie-pułapki można zmienić w wielkie skrzynie-pułapki z podwojoną pojemnością przez położenie dwóch skrzynek-pułapek jedna obok drugiej. -Ender Chest=Skrzynia kresu -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Skrzynie kresu dają dostęp do pojedynczego, osobistego, międzywymiarowego ekwipunku z 27 miejscami. Ten ekwipunek będzie zawierał to samo niezależnie od skrzyni kresu z której nim zarządzasz. Jeśli włożysz przedmiot do jednej skrzyni kresu, znajdziesz go we wszystkich innych. każdy gracz będzie widział tylko swoje przedmioty, a nie innych graczy. -Rightclick the ender chest to access your personal interdimensional inventory.=Kliknij prawym w skrzynię kresu aby mieć dostęp do twojego osobistego, międzywymiarowego ekwipunku. -White Shulker Box=Biała shulkerowa skrzynia -Light Grey Shulker Box=Jasnoszara shulkerowa skrzynia -Orange Shulker Box=Pomarańczowa shulkerowa skrzynia -Cyan Shulker Box=Błękitna shulkerowa skrzynia -Magenta Shulker Box=Karmazynowa shulkerowa skrzynia -Purple Shulker Box=Fioletowa shulkerowa skrzynia -Light Blue Shulker Box=Jasnoniebieska shulkerowa skrzynia -Blue Shulker Box=Niebieska shulkerowa skrzynia -Yellow Shulker Box=Żółta shulkerowa skrzynia -Brown Shulker Box=Brązowa shulkerowa skrzynia -Lime Shulker Box=Jasnozielona shulkerowa skrzynia -Green Shulker Box=Zielona shulkerowa skrzynia -Pink Shulker Box=Różowa shulkerowa skrzynia -Red Shulker Box=Czerwona shulkerowa skrzynia -Grey Shulker Box=Szara shulkerowa skrzynia -Black Shulker Box=Czarna shulkerowa skrzynia -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Shulkerowe skrzynie to przenośny pojemnik udostępniający 27 miejsc ekwipunku na dowolny przedmiot z wyjątkiem shulkerowych skrzyń. Shulkerowe skrzynie nie tracą swojego ekwipunku po zniszczeniu, więc te skrzynie razem z całą zawartością mogą być przechowywane jako pojedynczy przedmiot. -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out.=Aby dostać się do przedmiotów w shulkerowej skrzyni postaw ją i naciśnij ją prawym. Aby wziąć shulkerową skrzynię i jej zawartość ze sobą, zniszcz ją i zbierz, przedmioty nie wypadną. -Shulker Box=Shulkerowa skrzynia -Large Chest=Duża skrzynia -Inventory=Ekwipunek -27 inventory slots=27 miejsc ekwipunku -Can be carried around with its contents=Może być przenoszona razem z zawartością -Can be combined to a large chest=Może być połączona w dużą skrzynię -27 interdimensional inventory slots=27 międzywymiarowych miejsc ekwipunku -Put items inside, retrieve them from any ender chest=Włóż do niej przedmioty, miej do nich dostęp z dowolnej skrzyni kresu -Emits a redstone signal when opened=Aktywuje pobliski czerwienit gdy otwarta diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.ru.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.ru.tr deleted file mode 100644 index dc25458c2f..0000000000 --- a/mods/ITEMS/mcl_chests/locale/mcl_chests.ru.tr +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_chests -Chest=Сундук -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Сундуки это хранилища, предоставляющие 27 отсеков инвентаря. Сундук можно превратить в большой сундук, удвоив его вместительность, для этого нужно поставить ещё один сундук рядом с уже имеющимся. -To access its inventory, rightclick it. When broken, the items will drop out.=Чтобы получить доступ к инвентарю, кликните по сундуку правой клавишей. Если сломать сундук, то он превратится в носимый предмет. -Trapped Chest=Сундук-ловушка -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Сундук-ловушка - это хранилище, предоставляющее 27 отсеков инвентаря. При открытии он посылает сигнал редстоуна соседним блокам всё время, пока остается открытым. Сундук-ловушку можно превратить в большой сундук-ловушку, удвоив его вместительность, для этого нужно поставить ещё один сундук-ловушку рядом с уже имеющимся. -Ender Chest=Сундук Предела -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Сундук Предела предоставляет вам доступ к одиночному персональному межпространственному инвентарю из 27 отсеков. Этот инвентарь остаётся прежним, неважно какой из сундуков Предела вы используете для доступа к нему. Если вы положите предмет в сундук Предела, вы обнаружите его во всех остальных сундуках Предела. Каждый игрок видит только свои собственные предметы и не видит предметы остальных игроков. -Rightclick the ender chest to access your personal interdimensional inventory.=Кликните правой по сундуку Предела, чтобы получить доступ к вашему персональному межпространственному инвентарю. -White Shulker Box=Белый ящик шалкера -Light Grey Shulker Box=Светло-серый ящик шалкера -Orange Shulker Box=Оранжевый ящик шалкера -Cyan Shulker Box=Голубой ящик шалкера -Magenta Shulker Box=Фиолетовый ящик шалкера -Purple Shulker Box=Пурпурный ящик шалкера -Light Blue Shulker Box=Светло-голубой ящик шалкера -Blue Shulker Box=Синий ящик шалкера -Yellow Shulker Box=Жёлтый ящик шалкера -Brown Shulker Box=Коричневый ящик шалкера -Lime Shulker Box=Зелёный лаймовый ящик шалкера -Green Shulker Box=Зелёный ящик шалкера -Pink Shulker Box=Розовый ящик шалкера -Red Shulker Box=Красный ящик шалкера -Grey Shulker Box=Серый ящик шалкера -Black Shulker Box=Чёрный ящик шалкера -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Ящик шалкера это переносное хранилище, предоставляющее 27 отсеков инвентаря для любых предметов, за исключением ящиков шалкера. Ящики шалкера сохраняют в себе инвентарь, если их сломать, так что их вместе со всем инвентарём можно переносить как один предмет. Ящики шалкера могут быть разных цветов. -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out. Place the shulker box again to be able to retrieve its contents.=Чтобы получить доступ к инвентарю ящика шалкера, поставьте его куда-нибудь и кликните по нему правой клавишей. Чтобы взять с собой ящик шалкера со всем его содержимым, просто сломайте его, а потом подберите, ни один предмет из него не выпадет. Чтобы вновь получить доступ к содержимому, его надо снова поставить. -Shulker Box=Ящик шалкера -Large Chest=Большой сундук -Inventory=Инвентарь -27 inventory slots=27 отсеков инвентаря -Can be carried around with its contents=Можно переносить вместе со всем содержимым -Can be combined to a large chest=Можно объединить в большой сундук -27 interdimensional inventory slots=27 межпространственных отсеков инвентаря -Put items inside, retrieve them from any ender chest=Положите внутрь предмет и получите его из любого сундука Предела -Emits a redstone signal when opened=Подаёт сигнал редстоуна, будучи открытым diff --git a/mods/ITEMS/mcl_chests/locale/template.txt b/mods/ITEMS/mcl_chests/locale/template.txt deleted file mode 100644 index d680c24c9d..0000000000 --- a/mods/ITEMS/mcl_chests/locale/template.txt +++ /dev/null @@ -1,36 +0,0 @@ -# textdomain: mcl_chests -Chest= -Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.= -To access its inventory, rightclick it. When broken, the items will drop out.= -Trapped Chest= -A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.= -Ender Chest= -Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.= -Rightclick the ender chest to access your personal interdimensional inventory.= -White Shulker Box= -Light Grey Shulker Box= -Orange Shulker Box= -Cyan Shulker Box= -Magenta Shulker Box= -Purple Shulker Box= -Light Blue Shulker Box= -Blue Shulker Box= -Yellow Shulker Box= -Brown Shulker Box= -Lime Shulker Box= -Green Shulker Box= -Pink Shulker Box= -Red Shulker Box= -Grey Shulker Box= -Black Shulker Box= -A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.= -To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out. Place the shulker box again to be able to retrieve its contents.= -Shulker Box= -Large Chest= -Inventory= -27 inventory slots= -Can be carried around with its contents= -Can be combined to a large chest= -27 interdimensional inventory slots= -Put items inside, retrieve them from any ender chest= -Emits a redstone signal when opened= diff --git a/mods/ITEMS/mcl_chests/mod.conf b/mods/ITEMS/mcl_chests/mod.conf deleted file mode 100644 index 0ff5129ca2..0000000000 --- a/mods/ITEMS/mcl_chests/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_chests -depends = mcl_init, mcl_formspec, mcl_core, mcl_sounds, mcl_end, mesecons -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_chest.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_chest.b3d deleted file mode 100644 index e82c7e3639..0000000000 Binary files a/mods/ITEMS/mcl_chests/models/mcl_chests_chest.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_chest.obj b/mods/ITEMS/mcl_chests/models/mcl_chests_chest.obj deleted file mode 100644 index 36268146f8..0000000000 --- a/mods/ITEMS/mcl_chests/models/mcl_chests_chest.obj +++ /dev/null @@ -1,91 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'chest.small.facedir.blend' -# www.blender.org -mtllib chest.small.facedir.mtl -o chest_upper_upper -v 0.062513 -0.063134 -0.500468 -v 0.062513 0.186920 -0.500468 -v 0.062514 -0.063134 -0.437955 -v 0.062514 0.186920 -0.437955 -v -0.062514 -0.063134 -0.500468 -v -0.062514 0.186920 -0.500468 -v -0.062514 -0.063134 -0.437955 -v -0.062514 0.186920 -0.437955 -v 0.437907 0.061263 -0.438085 -v 0.437907 0.373830 -0.438085 -v 0.437907 0.061263 0.437729 -v 0.437907 0.373830 0.437729 -v -0.437907 0.061263 -0.438085 -v -0.437907 0.373830 -0.438085 -v -0.437907 0.061263 0.437729 -v -0.437907 0.373830 0.437729 -v 0.437595 -0.500754 -0.437772 -v 0.437595 0.124381 -0.437772 -v 0.437595 -0.500754 0.437417 -v 0.437595 0.124381 0.437417 -v -0.437595 -0.500754 -0.437772 -v -0.437595 0.124381 -0.437772 -v -0.437595 -0.500754 0.437417 -v -0.437595 0.124381 0.437417 -vt 0.015625 0.921875 -vt 0.015625 0.984375 -vt 0.000000 0.984375 -vt 0.000000 0.921875 -vt 0.093750 0.921875 -vt 0.093750 0.984375 -vt 0.062500 0.984375 -vt 0.062500 0.921875 -vt 0.046875 0.984375 -vt 0.046875 0.921875 -vt 0.078125 0.984375 -vt 0.078125 1.000000 -vt 0.046875 1.000000 -vt 0.015625 1.000000 -vt 0.218750 0.703125 -vt 0.218750 0.781250 -vt 0.000000 0.781250 -vt 0.000000 0.703125 -vt 0.875000 0.703125 -vt 0.875000 0.781250 -vt 0.656250 0.781250 -vt 0.656250 0.703125 -vt 0.437500 0.781250 -vt 0.437500 0.703125 -vt 0.656250 1.000000 -vt 0.437500 1.000000 -vt 0.218750 1.000000 -vt 0.218750 0.328125 -vt 0.218750 0.484375 -vt -0.000000 0.484375 -vt -0.000000 0.328125 -vt 0.875000 0.328125 -vt 0.875000 0.484375 -vt 0.656250 0.484375 -vt 0.656250 0.328125 -vt 0.437500 0.484375 -vt 0.437500 0.328125 -vn 1.000000 0.000000 -0.000000 -vn 0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/9/5 7/11/5 5/12/5 1/13/5 -f 8/13/6 4/14/6 2/2/6 6/9/6 -f 9/15/1 10/16/1 12/17/1 11/18/1 -f 11/19/2 12/20/2 16/21/2 15/22/2 -f 15/22/3 16/21/3 14/23/3 13/24/3 -f 13/24/4 14/23/4 10/16/4 9/15/4 -f 11/25/5 15/26/5 13/23/5 9/21/5 -f 16/26/6 12/27/6 10/16/6 14/23/6 -f 17/28/1 18/29/1 20/30/1 19/31/1 -f 19/32/2 20/33/2 24/34/2 23/35/2 -f 23/35/3 24/34/3 22/36/3 21/37/3 -f 21/37/4 22/36/4 18/29/4 17/28/4 -f 19/22/5 23/24/5 21/36/5 17/34/5 -f 24/24/6 20/15/6 18/29/6 22/36/6 diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_chest_double.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_chest_double.b3d deleted file mode 100644 index 8d79b8ff79..0000000000 Binary files a/mods/ITEMS/mcl_chests/models/mcl_chests_chest_double.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d deleted file mode 100644 index 2592f86a0c..0000000000 Binary files a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.obj b/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.obj deleted file mode 100644 index ca12b682ea..0000000000 --- a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.obj +++ /dev/null @@ -1,159 +0,0 @@ -# Blender v2.79 (sub 0) OBJ File: 'shulkerbox2.blend' -# www.blender.org -mtllib shulkerbox2.mtl -o low1_Cube.006 -v -0.500000 -0.500001 0.500000 -v -0.500000 0.062499 0.500000 -v -0.500000 -0.500001 -0.500000 -v -0.500000 0.062499 -0.500000 -v 0.500000 -0.500001 0.500000 -v 0.500000 0.062499 0.500000 -v 0.500000 -0.500001 -0.500000 -v 0.500000 0.062499 -0.500000 -vt 0.250000 0.187500 -vt -0.000000 0.187500 -vt -0.000000 0.312500 -vt 0.250000 0.312500 -vt 1.000000 0.187500 -vt 0.750000 0.187500 -vt 0.750000 0.312500 -vt 1.000000 0.312500 -vt 0.500000 0.187500 -vt 0.500000 0.312500 -vt 0.750000 0.562500 -vt 0.750000 0.312500 -vt 0.500000 0.312500 -vt 0.500000 0.562500 -vt 0.500000 0.562500 -vt 0.250000 0.562500 -vn 1.0000 0.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.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -usemtl None -s off -f 1/1/1 3/2/1 4/3/1 2/4/1 -f 3/5/2 7/6/2 8/7/2 4/8/2 -f 7/6/3 5/9/3 6/10/3 8/7/3 -f 5/9/4 1/1/4 2/4/4 6/10/4 -f 3/11/5 1/12/5 5/13/5 7/14/5 -f 8/15/6 6/10/6 2/4/6 4/16/6 -o top1_Cube.005 -v -0.500313 -0.220552 0.500313 -v -0.500313 0.530073 0.500313 -v -0.500313 -0.220552 -0.500313 -v -0.500313 0.530073 -0.500313 -v 0.500313 -0.220552 0.500313 -v 0.500313 0.530073 0.500313 -v 0.500313 -0.220552 -0.500313 -v 0.500313 0.530073 -0.500313 -vt 0.250000 0.562500 -vt -0.000000 0.562500 -vt -0.000000 0.750000 -vt 0.250000 0.750000 -vt 1.000000 0.562500 -vt 0.750000 0.562500 -vt 0.750000 0.750000 -vt 1.000000 0.750000 -vt 0.500000 0.562500 -vt 0.500000 0.750000 -vt 0.750000 1.000000 -vt 0.750000 0.750000 -vt 0.500000 0.750000 -vt 0.500000 1.000000 -vt 0.500000 1.000000 -vt 0.250000 1.000000 -vn 1.0000 0.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.0000 1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -usemtl None -s off -f 9/17/7 11/18/7 12/19/7 10/20/7 -f 11/21/8 15/22/8 16/23/8 12/24/8 -f 15/22/9 13/25/9 14/26/9 16/23/9 -f 13/25/10 9/17/10 10/20/10 14/26/10 -f 11/27/11 9/28/11 13/29/11 15/30/11 -f 16/31/12 14/26/12 10/20/12 12/32/12 -o top2_Cube.002 -v -0.500247 -0.220392 0.500247 -v -0.500247 0.530234 0.500247 -v -0.500247 -0.220392 -0.500378 -v -0.500247 0.530234 -0.500378 -v 0.500378 -0.220392 0.500247 -v 0.500378 0.530234 0.500247 -v 0.500378 -0.220392 -0.500378 -v 0.500378 0.530234 -0.500378 -vt 0.250000 0.562500 -vt 0.250000 0.750000 -vt -0.000000 0.750000 -vt -0.000000 0.562500 -vt 1.000000 0.562500 -vt 1.000000 0.750000 -vt 0.750000 0.750000 -vt 0.750000 0.562500 -vt 0.500000 0.750000 -vt 0.500000 0.562500 -vt 0.750000 1.000000 -vt 0.500000 1.000000 -vt 0.500000 0.750000 -vt 0.750000 0.750000 -vt 0.500000 1.000000 -vt 0.250000 1.000000 -vn -1.0000 0.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.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl None -s off -f 17/33/13 18/34/13 20/35/13 19/36/13 -f 19/37/14 20/38/14 24/39/14 23/40/14 -f 23/40/15 24/39/15 22/41/15 21/42/15 -f 21/42/16 22/41/16 18/34/16 17/33/16 -f 19/43/17 23/44/17 21/45/17 17/46/17 -f 24/47/18 20/48/18 18/34/18 22/41/18 -o low2_Cube.001 -v -0.499935 -0.499936 0.499935 -v -0.499935 0.062565 0.499935 -v -0.499935 -0.499936 -0.500066 -v -0.499935 0.062565 -0.500066 -v 0.500066 -0.499936 0.499935 -v 0.500066 0.062565 0.499935 -v 0.500066 -0.499936 -0.500066 -v 0.500066 0.062565 -0.500066 -vt 0.250000 0.187500 -vt 0.250000 0.312500 -vt -0.000000 0.312500 -vt -0.000000 0.187500 -vt 1.000000 0.187500 -vt 1.000000 0.312500 -vt 0.750000 0.312500 -vt 0.750000 0.187500 -vt 0.500000 0.312500 -vt 0.500000 0.187500 -vt 0.750000 0.562500 -vt 0.500000 0.562500 -vt 0.500000 0.312500 -vt 0.750000 0.312500 -vt 0.500000 0.562500 -vt 0.250000 0.562500 -vn -1.0000 0.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.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl None -s off -f 25/49/19 26/50/19 28/51/19 27/52/19 -f 27/53/20 28/54/20 32/55/20 31/56/20 -f 31/56/21 32/55/21 30/57/21 29/58/21 -f 29/58/22 30/57/22 26/50/22 25/49/22 -f 27/59/23 31/60/23 29/61/23 25/62/23 -f 32/63/24 28/64/24 26/50/24 30/57/24 diff --git a/mods/ITEMS/mcl_chests/sounds/attributions.txt b/mods/ITEMS/mcl_chests/sounds/attributions.txt deleted file mode 100644 index 2943aecc04..0000000000 --- a/mods/ITEMS/mcl_chests/sounds/attributions.txt +++ /dev/null @@ -1,2 +0,0 @@ -default_chest_open and default_chest_close - Taken from minetest_game https://github.com/minetest/minetest_game -mcl_chests_enderchest_open and mcl_chests_enderchest_close - https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/resource-packs/1245112-snowsong-the-epic-sound-pack-sound-resource-pack diff --git a/mods/ITEMS/mcl_chests/sounds/default_chest_close.ogg b/mods/ITEMS/mcl_chests/sounds/default_chest_close.ogg deleted file mode 100644 index 068d9002fb..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/default_chest_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/default_chest_open.ogg b/mods/ITEMS/mcl_chests/sounds/default_chest_open.ogg deleted file mode 100644 index 40b0b93416..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/default_chest_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_close.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_close.ogg deleted file mode 100644 index 7ecf4c98d6..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_open.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_open.ogg deleted file mode 100644 index 33bd84f8dd..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_enderchest_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.0.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.0.ogg deleted file mode 100644 index e97e22b366..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.0.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.1.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.1.ogg deleted file mode 100644 index d61c81ccb5..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.2.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.2.ogg deleted file mode 100644 index 865e819097..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.3.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.3.ogg deleted file mode 100644 index 20388a4031..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.4.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.4.ogg deleted file mode 100644 index 4a36164489..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.4.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.0.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.0.ogg deleted file mode 100644 index c63da1d101..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.0.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.1.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.1.ogg deleted file mode 100644 index 1dc602807c..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.2.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.2.ogg deleted file mode 100644 index e1af5da85e..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.3.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.3.ogg deleted file mode 100644 index d7ad1a3a97..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.4.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.4.ogg deleted file mode 100644 index faf751c9ab..0000000000 Binary files a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.4.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/default_chest_front.png b/mods/ITEMS/mcl_chests/textures/default_chest_front.png deleted file mode 100644 index 866a339849..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/default_chest_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/default_chest_front_big.png b/mods/ITEMS/mcl_chests/textures/default_chest_front_big.png deleted file mode 100644 index bde2866737..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/default_chest_front_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/default_chest_side_big.png b/mods/ITEMS/mcl_chests/textures/default_chest_side_big.png deleted file mode 100644 index deb0068077..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/default_chest_side_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/default_chest_top.png b/mods/ITEMS/mcl_chests/textures/default_chest_top.png deleted file mode 100644 index 5c1beb4b5f..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/default_chest_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/default_chest_top_big.png b/mods/ITEMS/mcl_chests/textures/default_chest_top_big.png deleted file mode 100644 index de56e2cabf..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/default_chest_top_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_black_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_black_shulker_box_top.png deleted file mode 100644 index a8564e42e7..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_black_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_blank.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_blank.png deleted file mode 100644 index baee128d43..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_blank.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_blue_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_blue_shulker_box_top.png deleted file mode 100644 index 608887df42..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_blue_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_brown_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_brown_shulker_box_top.png deleted file mode 100644 index 95b6cbdc85..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_brown_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_back.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_back.png deleted file mode 100644 index f347e921ab..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_back.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_bottom.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_bottom.png deleted file mode 100644 index cb43e55e2f..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_left.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_left.png deleted file mode 100644 index d420aaba0c..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_right.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_right.png deleted file mode 100644 index 4536ada868..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_back.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_back.png deleted file mode 100644 index f347e921ab..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_back.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_bottom.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_bottom.png deleted file mode 100644 index cb43e55e2f..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front.png deleted file mode 100644 index 67cc716bde..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front_big.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front_big.png deleted file mode 100644 index b65bfc2319..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_front_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_left.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_left.png deleted file mode 100644 index d420aaba0c..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_right.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_right.png deleted file mode 100644 index 4536ada868..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_side_big.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_side_big.png deleted file mode 100644 index deb0068077..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_side_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top.png deleted file mode 100644 index 5c1beb4b5f..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top_big.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top_big.png deleted file mode 100644 index de56e2cabf..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_chest_trapped_top_big.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_cyan_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_cyan_shulker_box_top.png deleted file mode 100644 index d8fe60f508..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_cyan_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_green_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_green_shulker_box_top.png deleted file mode 100644 index a0d32088b9..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_green_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_grey_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_grey_shulker_box_top.png deleted file mode 100644 index 8859361ec9..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_dark_grey_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender.png deleted file mode 100644 index 8a59e5ceff..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_back.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_back.png deleted file mode 100644 index 7cfbe1d7d0..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_back.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_bottom.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_bottom.png deleted file mode 100644 index 03a61a59c3..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_front.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_front.png deleted file mode 100644 index bbc68e78ba..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_left.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_left.png deleted file mode 100644 index 1a0ceaef21..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_right.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_right.png deleted file mode 100644 index f547532f2c..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_top.png deleted file mode 100644 index c109aa826e..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_chest_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_present.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_present.png deleted file mode 100644 index 85df1bfba0..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_ender_present.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_green_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_green_shulker_box_top.png deleted file mode 100644 index 513612da93..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_green_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_grey_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_grey_shulker_box_top.png deleted file mode 100644 index e483f6ed7e..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_grey_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_lightblue_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_lightblue_shulker_box_top.png deleted file mode 100644 index 9efc68fe02..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_lightblue_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_magenta_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_magenta_shulker_box_top.png deleted file mode 100644 index 9f167d4d90..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_magenta_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_noise.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_noise.png deleted file mode 100644 index 4cc99c17e2..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_noise.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_noise_double.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_noise_double.png deleted file mode 100644 index 9984139146..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_noise_double.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_normal.png deleted file mode 100644 index 9974f60d57..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double.png deleted file mode 100644 index f7357ddaa8..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double_present.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double_present.png deleted file mode 100644 index 55139fcb2f..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_double_present.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_present.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_present.png deleted file mode 100644 index 23faf46b89..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal_present.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_orange_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_orange_shulker_box_top.png deleted file mode 100644 index 166f9c3dae..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_orange_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_pink_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_pink_shulker_box_top.png deleted file mode 100644 index a69548c31a..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_pink_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_red_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_red_shulker_box_top.png deleted file mode 100644 index 8c458cdd9a..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_red_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped.png deleted file mode 100644 index ebbca8a6ae..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png deleted file mode 100644 index 88ff45825f..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double_present.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double_present.png deleted file mode 100644 index 2d10331f32..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double_present.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_present.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_present.png deleted file mode 100644 index 473f24c573..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_present.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_violet_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_violet_shulker_box_top.png deleted file mode 100644 index eb461d395b..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_violet_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_white_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_white_shulker_box_top.png deleted file mode 100644 index 8c12525bdf..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_white_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_yellow_shulker_box_top.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_yellow_shulker_box_top.png deleted file mode 100644 index 5e657412db..0000000000 Binary files a/mods/ITEMS/mcl_chests/textures/mcl_chests_yellow_shulker_box_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/init.lua b/mods/ITEMS/mcl_clock/init.lua deleted file mode 100644 index 65b32b91ec..0000000000 --- a/mods/ITEMS/mcl_clock/init.lua +++ /dev/null @@ -1,147 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - ---[[ - mcl_clock, renew of the renew of the mcl_clock mod - - Original from Echo, here: http://forum.minetest.net/viewtopic.php?id=3795 -]]-- - -mcl_clock = {} - --- This is the itemstring of the default clock item. It is used for the default inventory image, help entries, and the like -mcl_clock.stereotype = "mcl_clock:clock" - -mcl_clock.old_time = -1 - -local clock_frames = 64 - --- Timer for random clock spinning -local random_timer = 0.0 -local random_timer_trigger = 1.0 -- random clock spinning tick in seconds. Increase if there are performance problems -local random_frame = math.random(0, clock_frames-1) - --- Image of all possible faces -mcl_clock.images = {} -for frame=0, clock_frames-1 do - local sframe = tostring(frame) - if string.len(sframe) == 1 then - sframe = "0" .. sframe - end - table.insert(mcl_clock.images, "mcl_clock_clock_"..sframe..".png") -end - -local function round(num) - return math.floor(num + 0.5) -end - -function mcl_clock.get_clock_frame() - local t = clock_frames * minetest.get_timeofday() - t = round(t) - if t == clock_frames then t = 0 end - return tostring(t) -end - -local doc_mod = minetest.get_modpath("doc") - --- Register items -function mcl_clock.register_item(name, image, creative, frame) - local g = 1 - if creative then - g = 0 - end - local use_doc = name == mcl_clock.stereotype - if doc_mod and not use_doc then - doc.add_entry_alias("craftitems", mcl_clock.stereotype, "craftitems", name) - end - local longdesc, usagehelp, tt - if use_doc then - longdesc = S("Clocks are tools which shows the current time of day in the Overworld.") - usagehelp = S("The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.") - tt = S("Displays the time of day in the Overworld") - end - minetest.register_craftitem(name, { - description = S("Clock"), - _tt_help = tt, - _doc_items_create_entry = use_doc, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - inventory_image = image, - groups = {not_in_creative_inventory=g, tool=1, clock=frame, disable_repair=1}, - wield_image = "", - stack_max = 64, - }) -end - --- This timer makes sure the clocks get updated from time to time regardless of time_speed, --- just in case some clocks in the world go wrong -local force_clock_update_timer = 0 - -minetest.register_globalstep(function(dtime) - local now = mcl_clock.get_clock_frame() - force_clock_update_timer = force_clock_update_timer + dtime - random_timer = random_timer + dtime - -- This causes the random spinning of the clock - if random_timer >= random_timer_trigger then - random_frame = (random_frame + math.random(-4, 4)) % clock_frames - random_timer = 0 - end - - if mcl_clock.old_time == now and force_clock_update_timer < 60 then - return - end - force_clock_update_timer = 0 - - mcl_clock.old_time = now - mcl_clock.random_frame = random_frame - - for p, player in pairs(minetest.get_connected_players()) do - for s, stack in pairs(player:get_inventory():get_list("main")) do - local frame - -- Clocks do not work in certain zones - if not mcl_worlds.clock_works(player:get_pos()) then - frame = random_frame - else - frame = now - end - - local count = stack:get_count() - if stack:get_name() == mcl_clock.stereotype then - player:get_inventory():set_stack("main", s, "mcl_clock:clock_"..frame.." "..count) - elseif minetest.get_item_group(stack:get_name(), "clock") ~= 0 then - player:get_inventory():set_stack("main", s, "mcl_clock:clock_"..frame.." "..count) - end - end - end -end) - --- Immediately set correct clock time after crafting -minetest.register_on_craft(function(itemstack) - if itemstack:get_name() == mcl_clock.stereotype then - itemstack:set_name("mcl_clock:clock_"..mcl_clock.get_clock_frame()) - end -end) - --- Clock recipe -minetest.register_craft({ - output = mcl_clock.stereotype, - recipe = { - {"", "mcl_core:gold_ingot", ""}, - {"mcl_core:gold_ingot", "mesecons:redstone", "mcl_core:gold_ingot"}, - {"", "mcl_core:gold_ingot", ""} - } -}) - --- Clock tool -mcl_clock.register_item(mcl_clock.stereotype, mcl_clock.images[1], true, 1) - --- Faces -for a=0,clock_frames-1,1 do - local b = a - if b > 31 then - b = b - 32 - else - b = b + 32 - end - mcl_clock.register_item("mcl_clock:clock_"..tostring(a), mcl_clock.images[b+1], false, a+1) -end - diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.de.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.de.tr deleted file mode 100644 index 00c2529e13..0000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=Uhren sind Werkzeuge, die die Tageszeit in der Oberwelt anzeigen. -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=Die Uhr enthält eine rotierende Scheibe mit einem Sonnensymbol (gelbe Scheibe) und einem Mondsymbol, und sie hat einem kleinen „Pfeil“, der die jetzige Tageszeit anzeigt, indem die reale Position von Sonne und Mond im Himmel abgeschätzt wird. Die Sonne repräsentiert die Mittagszeit und der Mond repräsentiert Mitternacht. -Clock=Uhr -Displays the time of day in the Overworld=Zeigt die Tageszeit in der Oberwelt diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.es.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.es.tr deleted file mode 100644 index c8841fc6e5..0000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=Los relojes son herramientas que muestran la hora del día en el mundo. -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=El reloj contiene un disco giratorio con un símbolo del sol (disco amarillo) y un símbolo de la luna y un pequeño "puntero" que muestra la hora actual del día al estimar la posición real del sol y la luna en el cielo. El mediodía está representado por el símbolo del sol y la medianoche está representado por el símbolo de la luna. -Clock=Reloj \ No newline at end of file diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.fr.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.fr.tr deleted file mode 100644 index 604f508587..0000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=Les horloges sont des outils qui indiquent l'heure actuelle dans l'Overworld. -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=L'horloge contient un disque rotatif avec un symbole du soleil (disque jaune) et un symbole de la lune et un petit "pointeur" qui montre l'heure actuelle en estimant la position réelle du soleil et de la lune dans le ciel. Midi est représenté par le symbole du soleil et minuit est représenté par le symbole de la lune. -Clock=Horloge -Displays the time of day in the Overworld=Affiche l'heure de la journée dans l'Overworld diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.pl.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.pl.tr deleted file mode 100644 index 6cb110dd8d..0000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=Zegary to narzędzia pokazujące aktualną godzinę na Powierzchni. -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=Zegar zawiera obracające się kółko z symbolami słońca (żółte kółko) i symbolem księżyca oraz małym wskaźnikiem pokazującym aktualną godzinę przez oszacowanie prawdziwej pozycji słońca i księżyca na niebie. Południe jest reprezentowane przez symbol słońca, a północ przez symbol księżyca. -Clock=Zegar -Displays the time of day in the Overworld=Pokazuje aktualną godzinę na Powierzchni diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.ru.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.ru.tr deleted file mode 100644 index dca0f960c0..0000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=Часы это инструмент, показывающий текущее время Верхнего Мира. -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=Часы имеют вращающийся диск со значком солнца (жёлтый диск) и луны, а также маленькую стрелку, которая показывает время, обозначая реальное положение солнца и луны в небе. Полдень обозначается символом солнца, а полночь символом луны. -Clock=Часы -Displays the time of day in the Overworld=Показывают время Верхнего Мира diff --git a/mods/ITEMS/mcl_clock/locale/mcl_clock.zh_TW.tr b/mods/ITEMS/mcl_clock/locale/mcl_clock.zh_TW.tr deleted file mode 100644 index c6834373f1..0000000000 --- a/mods/ITEMS/mcl_clock/locale/mcl_clock.zh_TW.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.=時鐘顯示世界上當前時間的工具。 -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.=時鐘包含一個帶有太陽符號(黃色圓盤)和月亮符號的旋轉圓盤,以及一個小「指針」,通過估計太陽和月亮在天空中的實際位置來顯示當前的時間。正午由太陽符號表示,午夜由月亮符號表示。 -Clock=時鐘 -Displays the time of day in the Overworld=顯示世界上當前的時間 diff --git a/mods/ITEMS/mcl_clock/locale/template.txt b/mods/ITEMS/mcl_clock/locale/template.txt deleted file mode 100644 index 6589666c9a..0000000000 --- a/mods/ITEMS/mcl_clock/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mcl_clock -Clocks are tools which shows the current time of day in the Overworld.= -The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.= -Clock= -Displays the time of day in the Overworld= diff --git a/mods/ITEMS/mcl_clock/mod.conf b/mods/ITEMS/mcl_clock/mod.conf deleted file mode 100644 index e358ff29a9..0000000000 --- a/mods/ITEMS/mcl_clock/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_clock -description = A fantasy clock item roughly shows the time of day. -depends = mcl_init, mcl_worlds, mesecons -optional_depends = doc diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_00.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_00.png deleted file mode 100644 index 3a8870c883..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_00.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_01.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_01.png deleted file mode 100644 index e31b5411ff..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_01.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_02.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_02.png deleted file mode 100644 index b2a2ea9646..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_02.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_03.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_03.png deleted file mode 100644 index 87fca70853..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_03.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_04.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_04.png deleted file mode 100644 index 0e16c349a0..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_04.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_05.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_05.png deleted file mode 100644 index 117034edc2..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_05.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_06.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_06.png deleted file mode 100644 index a2553baedd..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_06.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_07.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_07.png deleted file mode 100644 index 1e5d7c9693..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_07.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_08.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_08.png deleted file mode 100644 index dcd2d52b3e..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_08.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_09.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_09.png deleted file mode 100644 index 069c11fc55..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_09.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_10.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_10.png deleted file mode 100644 index 68395a4c15..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_10.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_11.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_11.png deleted file mode 100644 index 8fcf0a83de..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_11.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_12.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_12.png deleted file mode 100644 index ec72273080..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_12.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_13.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_13.png deleted file mode 100644 index 501c5fa7d5..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_13.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_14.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_14.png deleted file mode 100644 index 1f750d28cd..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_14.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_15.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_15.png deleted file mode 100644 index 1126230cf6..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_15.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_16.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_16.png deleted file mode 100644 index 7e13698a90..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_16.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_17.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_17.png deleted file mode 100644 index cc6af9240d..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_17.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_18.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_18.png deleted file mode 100644 index beb08e6943..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_18.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_19.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_19.png deleted file mode 100644 index 7d014bbbdf..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_19.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_20.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_20.png deleted file mode 100644 index 9f54e4a239..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_20.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_21.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_21.png deleted file mode 100644 index 9129d556c2..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_21.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_22.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_22.png deleted file mode 100644 index 8db493f6e7..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_22.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_23.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_23.png deleted file mode 100644 index d7913629bc..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_23.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_24.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_24.png deleted file mode 100644 index 150974548d..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_24.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_25.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_25.png deleted file mode 100644 index fcab7b2098..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_25.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_26.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_26.png deleted file mode 100644 index fa7ae1979d..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_26.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_27.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_27.png deleted file mode 100644 index 0acb19e27a..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_27.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_28.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_28.png deleted file mode 100644 index a9572fe68b..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_28.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_29.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_29.png deleted file mode 100644 index d670934aee..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_29.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_30.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_30.png deleted file mode 100644 index 49c9ec98e9..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_30.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_31.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_31.png deleted file mode 100644 index 499ac149e6..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_31.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_32.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_32.png deleted file mode 100644 index f54e771a94..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_32.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_33.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_33.png deleted file mode 100644 index eb89399493..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_33.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_34.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_34.png deleted file mode 100644 index 87093e1cd4..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_34.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_35.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_35.png deleted file mode 100644 index 91ba320f98..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_35.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_36.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_36.png deleted file mode 100644 index e6b070dc6c..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_36.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_37.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_37.png deleted file mode 100644 index b85d111f80..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_37.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_38.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_38.png deleted file mode 100644 index 913bbecf4a..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_38.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_39.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_39.png deleted file mode 100644 index 33ae73c088..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_39.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_40.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_40.png deleted file mode 100644 index 9ce1c7091d..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_40.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_41.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_41.png deleted file mode 100644 index f4113adf47..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_41.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_42.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_42.png deleted file mode 100644 index 64ba1b49f8..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_42.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_43.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_43.png deleted file mode 100644 index 34521c99f1..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_43.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_44.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_44.png deleted file mode 100644 index 4fb756a477..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_44.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_45.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_45.png deleted file mode 100644 index 8ba8622b6a..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_45.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_46.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_46.png deleted file mode 100644 index 9f865c02bc..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_46.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_47.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_47.png deleted file mode 100644 index 0b84556a66..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_47.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_48.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_48.png deleted file mode 100644 index 33300e32e9..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_48.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_49.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_49.png deleted file mode 100644 index 054f7a4dc4..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_49.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_50.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_50.png deleted file mode 100644 index 5c33b2c4c5..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_50.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_51.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_51.png deleted file mode 100644 index f2b767437b..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_51.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_52.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_52.png deleted file mode 100644 index e68f3c9655..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_52.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_53.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_53.png deleted file mode 100644 index f784e09cf1..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_53.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_54.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_54.png deleted file mode 100644 index 189625828c..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_54.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_55.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_55.png deleted file mode 100644 index b16c2a69ab..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_55.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_56.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_56.png deleted file mode 100644 index f641209282..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_56.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_57.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_57.png deleted file mode 100644 index e2f85ddbbf..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_57.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_58.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_58.png deleted file mode 100644 index 11d8f09a53..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_58.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_59.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_59.png deleted file mode 100644 index 739b126192..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_59.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_60.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_60.png deleted file mode 100644 index c44fca9342..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_60.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_61.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_61.png deleted file mode 100644 index b607c06c6a..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_61.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_62.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_62.png deleted file mode 100644 index f670354b90..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_62.png and /dev/null differ diff --git a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_63.png b/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_63.png deleted file mode 100644 index 029c964e5b..0000000000 Binary files a/mods/ITEMS/mcl_clock/textures/mcl_clock_clock_63.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cocoas/README.txt b/mods/ITEMS/mcl_cocoas/README.txt deleted file mode 100644 index 2f00b68feb..0000000000 --- a/mods/ITEMS/mcl_cocoas/README.txt +++ /dev/null @@ -1,5 +0,0 @@ -This mod adds cocoas. -Cocoas grow at jungle trees in 3 stages and can be harvested for cocoa beans. -Cocoa beans can be used to plant new cocoas at jungle trees. - -Partially based on the cocoas from Farming Redo by TenPlus1. diff --git a/mods/ITEMS/mcl_cocoas/init.lua b/mods/ITEMS/mcl_cocoas/init.lua deleted file mode 100644 index 60ea9e5737..0000000000 --- a/mods/ITEMS/mcl_cocoas/init.lua +++ /dev/null @@ -1,200 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_cocoas = {} - --- Place cocoa -function mcl_cocoas.place(itemstack, placer, pt, plantname) - -- check if pointing at a node - if not pt or pt.type ~= "node" then - return - end - - local under = minetest.get_node(pt.under) - - -- return if any of the nodes are not registered - if not minetest.registered_nodes[under.name] then - return - end - - -- Am I right-clicking on something that has a custom on_rightclick set? - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[under.name] and minetest.registered_nodes[under.name].on_rightclick then - return minetest.registered_nodes[under.name].on_rightclick(pt.under, under, placer, itemstack) or itemstack - end - end - - -- Check if pointing at jungle tree - if under.name ~= "mcl_core:jungletree" - or minetest.get_node(pt.above).name ~= "air" then - return - end - - -- Determine cocoa direction - local clickdir = vector.subtract(pt.under, pt.above) - - -- Did user click on the SIDE of a jungle tree? - if clickdir.y ~= 0 then - return - end - - -- Add the node, set facedir and remove 1 item from the itemstack - minetest.set_node(pt.above, {name = plantname, param2 = minetest.dir_to_facedir(clickdir)}) - - minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}, true) - - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - - return itemstack -end - --- Attempts to grow a cocoa at pos, returns true when grown, returns false if there's no cocoa --- or it is already at full size -function mcl_cocoas.grow(pos) - local node = minetest.get_node(pos) - if node.name == "mcl_cocoas:cocoa_1" then - minetest.set_node(pos, {name = "mcl_cocoas:cocoa_2", param2 = node.param2}) - elseif node.name == "mcl_cocoas:cocoa_2" then - minetest.set_node(pos, {name = "mcl_cocoas:cocoa_3", param2 = node.param2}) - return true - end - return false -end - --- Note: cocoa beans are implemented as mcl_dye:brown - --- Cocoa definition --- 1st stage - ---[[ TODO: Use a mesh for cocoas for perfect texture compability. ]] -local crop_def = { - description = S("Premature Cocoa Pod"), - _doc_items_create_entry = true, - _doc_items_longdesc = S("Cocoa pods grow on the side of jungle trees in 3 stages."), - drawtype = "nodebox", - tiles = { - "[combine:16x16:6,1=mcl_cocoas_cocoa_stage_0.png", "[combine:16x16:6,11=mcl_cocoas_cocoa_stage_0.png", - "mcl_cocoas_cocoa_stage_0.png", "mcl_cocoas_cocoa_stage_0.png^[transformFX", - "[combine:16x16:-5,0=mcl_cocoas_cocoa_stage_0.png", "[combine:16x16:-5,0=mcl_cocoas_cocoa_stage_0.png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "facedir", - walkable = true, - drop = "mcl_dye:brown", - node_box = { - type = "fixed", - fixed = { - {-0.125, -0.0625, 0.1875, 0.125, 0.25, 0.4375}, -- Pod - -- FIXME: This has a thickness of 0. Is this OK in Minetest? - {0, 0.25, 0.25, 0, 0.5, 0.5}, -- Stem - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.125, -0.0625, 0.1875, 0.125, 0.25, 0.4375}, -- Pod - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.125, -0.0625, 0.1875, 0.125, 0.5, 0.5}, -- Pod - }, - }, - groups = { - handy=1,axey=1, cocoa=1, not_in_creative_inventory=1, dig_by_water=1, destroy_by_lava_flow=1, dig_by_piston=1, attached_node_facedir=1, - }, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_rotate = false, - _mcl_blast_resistance = 3, - _mcl_hardness = 0.2, -} - --- 2nd stage -minetest.register_node("mcl_cocoas:cocoa_1", table.copy(crop_def)) - -crop_def.description = S("Medium Cocoa Pod") -crop_def._doc_items_create_entry = false -crop_def.groups.cocoa = 2 -crop_def.tiles = { - "[combine:16x16:5,1=mcl_cocoas_cocoa_stage_1.png", "[combine:16x16:5,9=mcl_cocoas_cocoa_stage_1.png", - "mcl_cocoas_cocoa_stage_1.png", "mcl_cocoas_cocoa_stage_1.png^[transformFX", - "[combine:16x16:-4,0=mcl_cocoas_cocoa_stage_1.png", "[combine:16x16:-4,0=mcl_cocoas_cocoa_stage_1.png", -} -crop_def.node_box = { - type = "fixed", - fixed = { - {-0.1875, -0.1875, 0.0625, 0.1875, 0.25, 0.4375}, -- Pod - {0, 0.25, 0.25, 0, 0.5, 0.5}, -- Stem - }, -} -crop_def.collision_box = { - type = "fixed", - fixed = { - {-0.1875, -0.1875, 0.0625, 0.1875, 0.25, 0.4375}, -- Pod - }, -} -crop_def.selection_box = { - type = "fixed", - fixed = { - {-0.1875, -0.1875, 0.0625, 0.1875, 0.5, 0.5}, - }, -} - -minetest.register_node("mcl_cocoas:cocoa_2", table.copy(crop_def)) - --- Final stage -crop_def.description = S("Mature Cocoa Pod") -crop_def._doc_items_longdesc = S("A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.") -crop_def._doc_items_create_entry = true -crop_def.groups.cocoa = 3 -crop_def.tiles = { - -- The following 2 textures were derived from the original because the size of the top/bottom is slightly different :-( - -- TODO: Find a way to *only* use the base texture - "mcl_cocoas_cocoa_top_stage_2.png", "mcl_cocoas_cocoa_top_stage_2.png^[transformFY", - "mcl_cocoas_cocoa_stage_2.png", "mcl_cocoas_cocoa_stage_2.png^[transformFX", - "[combine:16x16:-3,0=mcl_cocoas_cocoa_stage_2.png", "[combine:16x16:-3,0=mcl_cocoas_cocoa_stage_2.png", -} -crop_def.node_box = { - type = "fixed", - fixed = { - {-0.25, -0.3125, -0.0625, 0.25, 0.25, 0.4375}, -- Pod - {0, 0.25, 0.25, 0, 0.5, 0.5}, -- Stem - }, -} -crop_def.collision_box = { - type = "fixed", - fixed = { - {-0.25, -0.3125, -0.0625, 0.25, 0.25, 0.4375}, -- Pod - }, -} -crop_def.selection_box = { - type = "fixed", - fixed = { - {-0.25, -0.3125, -0.0625, 0.25, 0.5, 0.5}, - }, -} -crop_def.drop = "mcl_dye:brown 3" -minetest.register_node("mcl_cocoas:cocoa_3", table.copy(crop_def)) - - -minetest.register_abm({ - label = "Cocoa pod growth", - nodenames = {"mcl_cocoas:cocoa_1", "mcl_cocoas:cocoa_2"}, - -- Same as potatoes - -- TODO: Tweak/balance the growth speed - interval = 50, - chance = 20, - action = function(pos, node) - mcl_cocoas.grow(pos) - end -} ) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_cocoas:cocoa_1", "nodes", "mcl_cocoas:cocoa_2") -end - diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.de.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.de.tr deleted file mode 100644 index 479e3845e4..0000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.de.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=Junge Kakaoschote -Cocoa pods grow on the side of jungle trees in 3 stages.=Kakaoschoten wachsen an der Seite von Dschungelbäumen in 3 Stufen. -Medium Cocoa Pod=Mittelgroße Kakaoschote -Mature Cocoa Pod=Ausgewachsene Kakaoschote -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=Eine ausgewachsene Kakaoschote wuchs an einem Dschugelbaum zur vollen Größe heran. Sie ist erntereif und kann für Kakaobohnen geerntet werden. Sie wird nicht weiter wachsen. diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.es.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.es.tr deleted file mode 100644 index e1477c79cb..0000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.es.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=Vaina de cacao prematura -Cocoa pods grow on the side of jungle trees in 3 stages.=Las vainas de cacao crecen al lado de los árboles de jungla en 3 etapas. -Medium Cocoa Pod=Vaina de cacao mediana -Mature Cocoa Pod=Vaina de cacao madura -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=Una vaina de cacao madura creció en un árbol de jungla a su tamaño completo y está lista para ser cosechada para los granos de cacao. No crecerá más. diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.fr.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.fr.tr deleted file mode 100644 index bf54689534..0000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.fr.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=Gousse de cacao prématurée -Cocoa pods grow on the side of jungle trees in 3 stages.=Les cabosses de cacao poussent sur le côté des arbres d'Acajou en 3 étapes. -Medium Cocoa Pod=Gousse de cacao moyenne -Mature Cocoa Pod=Cabosse de cacao mature -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=Une cabosse de cacao mature a poussé sur un arbre d'Acajou à sa pleine taille et elle est prête à être récoltée pour les fèves de cacao. Elle ne grandira plus. diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.pl.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.pl.tr deleted file mode 100644 index bfd0d707ed..0000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.pl.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=Niedojrzała roślina kakao -Cocoa pods grow on the side of jungle trees in 3 stages.=Roślina kakao rośnie na bokach tropikalnych drzew w 3 etapach -Medium Cocoa Pod=Średnio-dojrzała roślina kakao -Mature Cocoa Pod=Dojrzała roślina kakao -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=Dojrzała roślina kakao wyrosła na drzewie tropikalnym do swojego pełnego rozmiaru i jest gotowa by ją zebrać dla ziaren kakao. Nie urośnie już więcej. diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.ru.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.ru.tr deleted file mode 100644 index 524c28bcc4..0000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.ru.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=Молодой стручок какао -Cocoa pods grow on the side of jungle trees in 3 stages.=Стручки какао растут на деревьях джунглей в 3 этапа. -Medium Cocoa Pod=Средний стручок какао -Mature Cocoa Pod=Зрелый стручок какао -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=Зрелый стручок какао вырос на дереве джунглей до своего полного размера и готов к сбору в качестве какао-бобов. Дальше ему расти некуда. diff --git a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.zh_TW.tr b/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.zh_TW.tr deleted file mode 100644 index d71e2b11b1..0000000000 --- a/mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.zh_TW.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod=成長中的可可豆莢(第1階段) -Cocoa pods grow on the side of jungle trees in 3 stages.=可可莢果分3個階段生長在叢林樹的側面。 -Medium Cocoa Pod=成長中的可可豆莢(第2階段) -Mature Cocoa Pod=成熟的可可豆莢 -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.=一個成熟的可可豆莢在叢林樹上成熟,它已經準備好被收穫成可可豆了。它不會再長了。 diff --git a/mods/ITEMS/mcl_cocoas/locale/template.txt b/mods/ITEMS/mcl_cocoas/locale/template.txt deleted file mode 100644 index f68318cae8..0000000000 --- a/mods/ITEMS/mcl_cocoas/locale/template.txt +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_cocoas -Premature Cocoa Pod= -Cocoa pods grow on the side of jungle trees in 3 stages.= -Medium Cocoa Pod= -Mature Cocoa Pod= -A mature cocoa pod grew on a jungle tree to its full size and it is ready to be harvested for cocoa beans. It won't grow any further.= diff --git a/mods/ITEMS/mcl_cocoas/mod.conf b/mods/ITEMS/mcl_cocoas/mod.conf deleted file mode 100644 index 8676361916..0000000000 --- a/mods/ITEMS/mcl_cocoas/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_cocoas -description = Cocoa pods which grow at jungle trees. Does not include cocoa beans. -depends = mcl_sounds, mcl_core -optional_depends = doc \ No newline at end of file diff --git a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_0.png b/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_0.png deleted file mode 100644 index de58245f4b..0000000000 Binary files a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_1.png b/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_1.png deleted file mode 100644 index 4d45d35941..0000000000 Binary files a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_2.png b/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_2.png deleted file mode 100644 index 47bc159b7c..0000000000 Binary files a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_stage_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_top_stage_2.png b/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_top_stage_2.png deleted file mode 100644 index 4e12f623b2..0000000000 Binary files a/mods/ITEMS/mcl_cocoas/textures/mcl_cocoas_cocoa_top_stage_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/API.md b/mods/ITEMS/mcl_compass/API.md deleted file mode 100644 index 8a8e7247eb..0000000000 --- a/mods/ITEMS/mcl_compass/API.md +++ /dev/null @@ -1,20 +0,0 @@ -# mcl_compass - -# Compass API - -##mcl_compass.stereotype = "mcl_compass:" .. stereotype_frame -Default compass craftitem. This is also the image that is shown in the inventory. - -##mcl_compass/init.lua:function mcl_compass.get_compass_itemname(pos, dir, itemstack) -Returns the itemname of a compass with needle direction matching the -current compass position. - - pos: position of the compass; - dir: rotational orientation of the compass; - itemstack: the compass including its optional lodestone metadata. - -##mcl_compass/init.lua:function mcl_compass.get_compass_image(pos, dir) --- Returns partial itemname of a compass with needle direction matching compass position. --- Legacy compatibility function for mods using older api. - - diff --git a/mods/ITEMS/mcl_compass/init.lua b/mods/ITEMS/mcl_compass/init.lua deleted file mode 100644 index 0bcc3f0af9..0000000000 --- a/mods/ITEMS/mcl_compass/init.lua +++ /dev/null @@ -1,290 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_compass = {} - -local compass_types = { - { - name = "compass", - desc = S("Compass"), - tt = S("Points to the world origin"), - longdesc = S("Compasses are tools which point to the world origin (X=0, Z=0) or the spawn point in the Overworld."), - usagehelp = S("A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly."), - }, - { - name = "compass_lodestone", - desc = S("Lodestone Compass"), - tt = S("Points to a lodestone"), - longdesc = S("Lodestone compasses resemble regular compasses, but they point to a specific lodestone."), - usagehelp = S("A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone."), - } -} - --- Number of dynamic compass images (and items registered.) -local compass_frames = 32 - --- The image/item that is craftable and shown in inventories. -local stereotype_frame = 18 - --- random compass spinning tick in seconds. --- Increase if there are performance problems. -local spin_timer_tick = 0.5 - --- Local aliases to globals for better lua performance -local m_deg = math.deg -local m_atan2 = math.atan2 -local m_floor = math.floor -local m_rnd = math.random -local vec_new = vector.new -local string_find = string.find -local string_to_pos = minetest.string_to_pos -local get_connected_players = minetest.get_connected_players -local get_item_group = minetest.get_item_group -local setting_get_pos = minetest.setting_get_pos -local compass_works = mcl_worlds.compass_works -local y_to_layer = mcl_worlds.y_to_layer - --- Initialize random compass frame for spinning compass. It is updated in --- the compass globalstep function. -local random_frame = m_rnd(0, compass_frames-1) - -local function get_far_node(pos, itemstack) --code from minetest dev wiki: https://dev.minetest.net/minetest.get_node, some edits have been made to add a cooldown for force loads - local node = minetest.get_node(pos) - if node.name == "ignore" then - local tstamp = tonumber(itemstack:get_meta():get_string("last_forceload")) - if tstamp == nil then --this is only relevant for new lodestone compasses, the ones that have never performes a forceload yet - itemstack:get_meta():set_string("last_forceload", tostring(os.time(os.date("!*t")))) - tstamp = tonumber(os.time(os.date("!*t"))) - end - if tonumber(os.time(os.date("!*t"))) - tstamp > 180 then --current time in secounds - old time in secounds, if it is over 180 (3 mins): forceload - itemstack:get_meta():set_string("last_forceload", tostring(os.time(os.date("!*t")))) - minetest.get_voxel_manip():read_from_map(pos, pos) - node = minetest.get_node(pos) - else - node = {name="mcl_compass:lodestone"} --cooldown not over yet, pretend like there is something... - end - end - return node -end - ---- Get compass needle angle. --- Returns the angle that the compass needle should point at expressed in --- 360 degrees divided by the number of possible compass image frames.. --- --- pos: position of the compass; --- target: position that the needle points towards; --- dir: rotational direction of the compass. --- -local function get_compass_angle(pos, target, dir) - local angle_north = m_deg(m_atan2(target.x - pos.x, target.z - pos.z)) - if angle_north < 0 then angle_north = angle_north + 360 end - local angle_dir = -m_deg(dir) - local angle_relative = (angle_north - angle_dir + 180) % 360 - return m_floor((angle_relative/11.25) + 0.5) % compass_frames -end - ---- Get compass image frame. --- Returns the compass image frame with the needle direction matching the --- compass' current position. --- --- pos: position of the compass; --- dir: rotational direction of the compass. --- itemstack: the compass including its optional lodestone metadata. --- -local function get_compass_frame(pos, dir, itemstack) - if not string_find(itemstack:get_name(), "_lodestone") then -- normal compass - -- Compasses only work in the overworld - if compass_works(pos) then - local spawn_pos = setting_get_pos("static_spawnpoint") - or vec_new(0, 0, 0) - return get_compass_angle(pos, spawn_pos, dir) - else - return random_frame - end - else -- lodestone compass - local lpos_str = itemstack:get_meta():get_string("pointsto") - local lpos = string_to_pos(lpos_str) - if not lpos then - minetest.log("warning", "mcl_compass: invalid lodestone position!") - return random_frame - end - local _, l_dim = y_to_layer(lpos.y) - local _, p_dim = y_to_layer(pos.y) - -- compass and lodestone must be in the same dimension - if l_dim == p_dim then - --check if lodestone still exists - if get_far_node(lpos, itemstack).name == "mcl_compass:lodestone" then - return get_compass_angle(pos, lpos, dir) - else -- lodestone got destroyed - return random_frame - end - else - return random_frame - end - end -end - --- Export stereotype item for other mods to use -mcl_compass.stereotype = "mcl_compass:" .. stereotype_frame - ---- Get partial compass itemname. --- Returns partial itemname of a compass with needle direction matching compass position. --- Legacy compatibility function for mods using older api. --- -function mcl_compass.get_compass_image(pos, dir) - minetest.log("warning", "mcl_compass: deprecated function " .. - "get_compass_image() called, use get_compass_itemname().") - local itemstack = ItemStack(mcl_compass.stereotype) - return get_compass_frame(pos, dir, itemstack) -end - ---- Get compass itemname. --- Returns the itemname of a compass with needle direction matching the --- current compass position. --- --- pos: position of the compass; --- dir: rotational orientation of the compass; --- itemstack: the compass including its optional lodestone metadata. --- -function mcl_compass.get_compass_itemname(pos, dir, itemstack) - if not itemstack then - minetest.log("warning", "mcl_compass.get_compass_image called without itemstack!") - return "mcl_compass:" .. stereotype_frame - end - local frame = get_compass_frame(pos, dir, itemstack) - if itemstack:get_meta():get_string("pointsto") ~= "" then - return "mcl_compass:" .. frame .. "_lodestone" - else - return "mcl_compass:" .. frame - end -end - --- Timer for randomly spinning compass. --- Gets updated and checked in the globalstep function. -local spin_timer = 0 - --- Compass globalstep function. --- * updates random spin counter and random frame of spinning compasses; --- * updates all compasses in player's inventories to match the correct --- needle orientations for their current positions. --- -minetest.register_globalstep(function(dtime) - spin_timer = spin_timer + dtime - if spin_timer >= spin_timer_tick then - random_frame = (random_frame + m_rnd(-1, 1)) % compass_frames - spin_timer = 0 - end - - local compass_nr, compass_frame - local pos, dir, inv - for _, player in pairs(get_connected_players()) do - pos = player:get_pos() - dir = player:get_look_horizontal() - inv = player:get_inventory() - for j, stack in pairs(inv:get_list("main")) do - compass_nr = get_item_group(stack:get_name(), "compass") - if compass_nr ~= 0 then - -- check if current compass image still matches true orientation - compass_frame = get_compass_frame(pos, dir, stack) - if compass_nr - 1 ~= compass_frame then - - if string_find(stack:get_name(), "_lodestone") then - stack:set_name("mcl_compass:" .. compass_frame .. "_lodestone") - else - stack:set_name("mcl_compass:" .. compass_frame) - end - inv:set_stack("main", j, stack) - end - end - end - end -end) - --- --- Node and craftitem definitions --- -local doc_mod = minetest.get_modpath("doc") - -for _, item in pairs(compass_types) do - local name_fmt, img_fmt - if item.name == "compass" then - name_fmt = "mcl_compass:%d" - img_fmt = "mcl_compass_compass_%02d.png" - elseif item.name == "compass_lodestone" then - name_fmt = "mcl_compass:%d_lodestone" - img_fmt = "mcl_compass_compass_%02d.png^[colorize:purple:50" - end - for i = 0, compass_frames - 1 do - local itemstring = string.format(name_fmt, i) - local def = { - description = item.desc, - _tt_help = item.tt, - inventory_image = string.format(img_fmt, i), - wield_image = string.format(img_fmt, i), - groups = {compass = i + 1, tool = 1, disable_repair = 1}, - } - if i == stereotype_frame then - def._doc_items_longdesc = item.longdesc - def._doc_items_usagehelp = item.usagehelp - if string.match(itemstring, "lodestone") then - def.groups.not_in_creative_inventory = 1 - end - else - def._doc_items_create_entry = false - def.groups.not_in_creative_inventory = 1 - end - minetest.register_craftitem(itemstring, table.copy(def)) - - -- Help aliases. Makes sure the lookup tool works correctly - if doc_mod and i ~= stereotype_frame then - doc.add_entry_alias("craftitems", "mcl_compass:"..(stereotype_frame), "craftitems", itemstring) - end - end -end - -minetest.register_craft({ - output = "mcl_compass:" .. stereotype_frame, - recipe = { - {"", "mcl_core:iron_ingot", ""}, - {"mcl_core:iron_ingot", "mesecons:redstone", "mcl_core:iron_ingot"}, - {"", "mcl_core:iron_ingot", ""} - } -}) - -minetest.register_alias("mcl_compass:compass", "mcl_compass:" .. stereotype_frame) - - -minetest.register_node("mcl_compass:lodestone",{ - description=S("Lodestone"), - on_rightclick = function(pos, node, player, itemstack) - local name = itemstack.get_name(itemstack) - if string_find(name,"mcl_compass:") then - if name ~= "mcl_compass:lodestone" then - itemstack:get_meta():set_string("pointsto", minetest.pos_to_string(pos)) - local dir = player:get_look_horizontal() - local frame = get_compass_frame(pos, dir, itemstack) - itemstack:set_name("mcl_compass:" .. frame .. "_lodestone") - end - end - end, - tiles = { - "lodestone_top.png", - "lodestone_bottom.png", - "lodestone_side1.png", - "lodestone_side2.png", - "lodestone_side3.png", - "lodestone_side4.png" - }, - groups = {pickaxey=1, material_stone=1}, - _mcl_hardness = 1.5, - _mcl_blast_resistance = 6, - sounds = mcl_sounds.node_sound_stone_defaults() -}) - -minetest.register_craft({ - output = "mcl_compass:lodestone", - recipe = { - {"mcl_core:stonebrickcarved","mcl_core:stonebrickcarved","mcl_core:stonebrickcarved"}, - {"mcl_core:stonebrickcarved", "mcl_core:diamondblock", "mcl_core:stonebrickcarved"}, - {"mcl_core:stonebrickcarved", "mcl_core:stonebrickcarved", "mcl_core:stonebrickcarved"} - } -}) diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.de.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.de.tr deleted file mode 100644 index 9e03665087..0000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.de.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=Kompass -Points to the world origin=Zeigt zum Startpunkt der Welt -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Kompasse sind Werkzeuge, die zum Ursprungspunkt der Welt (X@=0, Z@=0) oder zum Einstiegspunkt der Welt zeigen. -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.=Ein Kompass zeigt immer zum Weltspawn in der Oberwelt. In sämtlichen anderen Dimensionen dreht er sich zufällig. -Lodestone Compass=Leitstein Kompass -Points to a lodestone=Zeigt zu einem Leitstein -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.=Leitstein Kompasse ähneln normalen Kompassen, aber sie zeigen zu einen spezifischen Leitstein. -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.=Ein Leitstein Kompass kann mit einem normalen Kompass erstellt werden indem man ihn auf einem Leitstein benutzt. Nachdem er ein Leitstein Kompass geworden ist, wird er immer zu seinem Leitstein zeigen, sofern sie in der selben Dimension sind. Wenn sie nicht in der selben Dimension sind, dreht sich der Leitstein Kompass zufällig, wie ein normaler Kompass außerhalb der Oberwelt. Ein Leitstein Kompass kann mit einem anderem Leitstein verknüpft werden. diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.es.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.es.tr deleted file mode 100644 index 77b36cad9f..0000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.es.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=Brújula -Points to the world origin= -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Las brújulas son herramientas que apuntan al origen del mundo (X @ = 0, Z @ = 0) o al punto de generación en el mundo. -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.fr.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.fr.tr deleted file mode 100644 index c09b334a02..0000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.fr.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=Boussole -Points to the world origin=Pointe vers l'origine mondiale -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Les boussoles sont des outils qui pointent vers l'origine du monde (X@=0,Z@=0) ou le point d'apparition dans l'Overworld. -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.pl.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.pl.tr deleted file mode 100644 index 33ac4b2044..0000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.pl.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=Kompas -Points to the world origin=Wskazuje na początek świata -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Kompasy to narzędzia które wskazują na punkt początku świata (X@=0, Z@=0) lub na miejsce odrodzenia na Powierzchni. -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.ru.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.ru.tr deleted file mode 100644 index 7fd98de870..0000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.ru.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=Компас -Points to the world origin=Указывает на начало мира -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Компас - инструмент, показывающий на начало мира (X@=0, Z@=0) или на точку возрождения в Верхнем Мире. -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.zh_TW.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.zh_TW.tr deleted file mode 100644 index 257487a553..0000000000 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.zh_TW.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass=指南針 -Points to the world origin=指向世界原點 -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=指南針是指向世界原點(X@=0,Z@=0)或主世界的出生點的工具。 -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/locale/template.txt b/mods/ITEMS/mcl_compass/locale/template.txt deleted file mode 100644 index 909e21a364..0000000000 --- a/mods/ITEMS/mcl_compass/locale/template.txt +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_compass -Compass= -Points to the world origin= -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.= -A Compass always points to the world spawn point when the player is in the overworld. In other dimensions, it spins randomly.= -Lodestone Compass= -Points to a lodestone= -Lodestone compasses resemble regular compasses, but they point to a specific lodestone.= -A Lodestone compass can be made from an ordinary compass by using it on a lodestone. After becoming a lodestone compass, it always points to its linked lodestone, provided that they are in the same dimension. If not in the same dimension, the lodestone compass spins randomly, similarly to a regular compass when outside the overworld. A lodestone compass can be relinked with another lodestone.= diff --git a/mods/ITEMS/mcl_compass/mod.conf b/mods/ITEMS/mcl_compass/mod.conf deleted file mode 100644 index f63a6f307a..0000000000 --- a/mods/ITEMS/mcl_compass/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_compass -description = A compass item which points towards the world origin. -depends = mcl_core, mcl_worlds, mesecons, mcl_sounds -optional_depends = doc \ No newline at end of file diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_bottom.png b/mods/ITEMS/mcl_compass/textures/lodestone_bottom.png deleted file mode 100644 index 64ddb76ce2..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_side1.png b/mods/ITEMS/mcl_compass/textures/lodestone_side1.png deleted file mode 100644 index a4446b95ef..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_side1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_side2.png b/mods/ITEMS/mcl_compass/textures/lodestone_side2.png deleted file mode 100644 index fd9a1a2a5d..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_side2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_side3.png b/mods/ITEMS/mcl_compass/textures/lodestone_side3.png deleted file mode 100644 index 43224083df..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_side3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_side4.png b/mods/ITEMS/mcl_compass/textures/lodestone_side4.png deleted file mode 100644 index 21dadc9f7d..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_side4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/lodestone_top.png b/mods/ITEMS/mcl_compass/textures/lodestone_top.png deleted file mode 100644 index 77c2064e1f..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/lodestone_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_00.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_00.png deleted file mode 100644 index 5ba59433d9..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_00.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_01.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_01.png deleted file mode 100644 index 4688db60d9..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_01.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_02.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_02.png deleted file mode 100644 index 2eea92a92f..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_02.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_03.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_03.png deleted file mode 100644 index cfee32dbed..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_03.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_04.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_04.png deleted file mode 100644 index a003926e5d..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_04.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_05.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_05.png deleted file mode 100644 index c00cdb581f..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_05.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_06.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_06.png deleted file mode 100644 index dbf15cdf1d..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_06.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_07.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_07.png deleted file mode 100644 index 24838ba624..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_07.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_08.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_08.png deleted file mode 100644 index 24838ba624..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_08.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_09.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_09.png deleted file mode 100644 index 24838ba624..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_09.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_10.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_10.png deleted file mode 100644 index 09f0f1bc4e..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_10.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_11.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_11.png deleted file mode 100644 index a95c140b7a..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_11.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_12.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_12.png deleted file mode 100644 index 1312d68045..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_12.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_13.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_13.png deleted file mode 100644 index 0e9d32f002..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_13.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_14.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_14.png deleted file mode 100644 index 99487e8595..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_14.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_15.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_15.png deleted file mode 100644 index bae157bf9b..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_15.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_16.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_16.png deleted file mode 100644 index 8ea7cd66db..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_16.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_17.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_17.png deleted file mode 100644 index 8886d2d2b5..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_17.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_18.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_18.png deleted file mode 100644 index bba1dbe982..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_18.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_19.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_19.png deleted file mode 100644 index 0615240193..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_19.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_20.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_20.png deleted file mode 100644 index 1e2fe0976d..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_20.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_21.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_21.png deleted file mode 100644 index b221bd2346..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_21.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_22.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_22.png deleted file mode 100644 index d2abb32807..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_22.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_23.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_23.png deleted file mode 100644 index 1f043f07a4..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_23.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_24.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_24.png deleted file mode 100644 index 1f043f07a4..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_24.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_25.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_25.png deleted file mode 100644 index 1f043f07a4..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_25.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_26.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_26.png deleted file mode 100644 index e225882be8..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_26.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_27.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_27.png deleted file mode 100644 index dae8fd8740..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_27.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_28.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_28.png deleted file mode 100644 index 7ce2d4699e..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_28.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_29.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_29.png deleted file mode 100644 index 0dd780646c..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_29.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_30.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_30.png deleted file mode 100644 index 9b3e1e0204..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_30.png and /dev/null differ diff --git a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_31.png b/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_31.png deleted file mode 100644 index ecf1d17eb5..0000000000 Binary files a/mods/ITEMS/mcl_compass/textures/mcl_compass_compass_31.png and /dev/null differ diff --git a/mods/ITEMS/mcl_crafting_table/API.md b/mods/ITEMS/mcl_crafting_table/API.md deleted file mode 100644 index 45aa0c9cea..0000000000 --- a/mods/ITEMS/mcl_crafting_table/API.md +++ /dev/null @@ -1,6 +0,0 @@ -# mcl_crafting_table -Add a node which allow players to craft more complex things. - -## mcl_crafting_table.show_crafting_form(player) -Show the crafting form to a player. -Used in the node registration, but can be used by external mods. \ No newline at end of file diff --git a/mods/ITEMS/mcl_crafting_table/init.lua b/mods/ITEMS/mcl_crafting_table/init.lua deleted file mode 100644 index 7f6b9ccc51..0000000000 --- a/mods/ITEMS/mcl_crafting_table/init.lua +++ /dev/null @@ -1,70 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local formspec_escape = minetest.formspec_escape -local show_formspec = minetest.show_formspec -local C = minetest.colorize -local text_color = "#313131" -local itemslot_bg = mcl_formspec.get_itemslot_bg - -mcl_crafting_table = {} - -function mcl_crafting_table.show_crafting_form(player) - player:get_inventory():set_width("craft", 3) - player:get_inventory():set_size("craft", 9) - - show_formspec(player:get_player_name(), "main", - "size[9,8.75]".. - "image[4.7,1.5;1.5,1;gui_crafting_arrow.png]".. - "label[0,4;"..formspec_escape(C(text_color, S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - itemslot_bg(0,7.74,9,1).. - "label[1.75,0;"..formspec_escape(C(text_color, S("Crafting"))).."]".. - "list[current_player;craft;1.75,0.5;3,3;]".. - itemslot_bg(1.75,0.5,3,3).. - "list[current_player;craftpreview;6.1,1.5;1,1;]".. - itemslot_bg(6.1,1.5,1,1).. - "image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]".. - "tooltip[__mcl_craftguide;"..formspec_escape(S("Recipe book")).."]".. - "listring[current_player;main]".. - "listring[current_player;craft]" - ) -end - -minetest.register_node("mcl_crafting_table:crafting_table", { - description = S("Crafting Table"), - _tt_help = S("3×3 crafting grid"), - _doc_items_longdesc = S("A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts."), - _doc_items_usagehelp = S("Rightclick the crafting table to access the 3×3 crafting grid."), - _doc_items_hidden = false, - is_ground_content = false, - tiles = {"crafting_workbench_top.png", "default_wood.png", "crafting_workbench_side.png", - "crafting_workbench_side.png", "crafting_workbench_front.png", "crafting_workbench_front.png"}, - paramtype2 = "facedir", - groups = {handy=1,axey=1, deco_block=1, material_wood=1,flammable=-1}, - on_rightclick = function(pos, node, player, itemstack) - if not player:get_player_control().sneak then - mcl_crafting_table.show_crafting_form(player) - end - end, - sounds = mcl_sounds.node_sound_wood_defaults(), - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, -}) - -minetest.register_craft({ - output = "mcl_crafting_table:crafting_table", - recipe = { - {"group:wood", "group:wood"}, - {"group:wood", "group:wood"} - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_crafting_table:crafting_table", - burntime = 15, -}) - -minetest.register_alias("crafting:workbench", "mcl_crafting_table:crafting_table") -minetest.register_alias("mcl_inventory:workbench", "mcl_crafting_table:crafting_table") diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.de.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.de.tr deleted file mode 100644 index 00a9c9cce9..0000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.de.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=Werkbank -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Die Werkbank ist ein Block, mit dem Sie Zugriff auf ein 3×3-Fertigungsgitter erhalten, wodurch sie fortgeschrittene Dinge herstellen können. -Rightclick the crafting table to access the 3×3 crafting grid.=Rechtsklicken Sie auf die Werkbank, um auf das 3×3-Fertigungsgitter zuzugreifen. -Recipe book=Fertigungsbuch -Inventory=Inventar -Crafting=Fertigen -3×3 crafting grid=3×3 Fertigungsgitter diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.es.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.es.tr deleted file mode 100644 index 8d560fd5e6..0000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.es.tr +++ /dev/null @@ -1,7 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=Mesa de trabajo -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Una mesa de trabajo es un bloque que le otorga acceso a una cuadrícula de creación 3 × 3 que le permite realizar manualidades avanzadas. -Rightclick the crafting table to access the 3×3 crafting grid.=Haz clic derecho en la mesa de trabajo para acceder a la cuadrícula de creación 3 × 3. -Recipe book=Libro de recetas -Inventory=Inventario -Crafting=Elaboración diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.fr.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.fr.tr deleted file mode 100644 index 23caccff7a..0000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.fr.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=Etabli -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Un établi est un bloc qui vous donne accès à une grille d'établi 3×3 qui vous permet d'effectuer des objets avancés. -Rightclick the crafting table to access the 3×3 crafting grid.=Faites un clic droit sur l'établi pour accéder à la grille d'établi 3x3. -Recipe book=Livre de Recette -Crafting=Fabriquer -Inventory=Inventaire -3×3 crafting grid=Grille d'établi 3×3 diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.pl.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.pl.tr deleted file mode 100644 index aed33bf6cd..0000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.pl.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=Stół rzemieślniczy -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Stół rzemieślniczy jest blokiem, który daje dostęp do siatki wytwarzania rozmiaru 3×3, co daje dostęp do zaawansowanego wytwarzania. -Rightclick the crafting table to access the 3×3 crafting grid.=Kliknij prawym przyciskiem na stół rzemieślniczy aby zyskać dostęp do siatki wytwarzania rozmiaru 3×3. -Recipe book=Księga receptur -Crafting=Wytwarzanie -Inventory=Ekwipunek -3×3 crafting grid=Siatka wytwarzania 3×3 diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.ru.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.ru.tr deleted file mode 100644 index 1e4eb560f6..0000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.ru.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=Верстак -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Верстак это блок, позволяющий крафтить в решётке 3×3, что позволяет выполнять продвинутый крафтинг. -Rightclick the crafting table to access the 3×3 crafting grid.=Кликните правой для получения доступа к решётке крафтинга 3×3. -Recipe book=Книга рецептов -Crafting=Крафтинг -Inventory=Инвентарь -3×3 crafting grid=Решётка крафтинга 3×3 diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.zh_TW.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.zh_TW.tr deleted file mode 100644 index b393d5a48f..0000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.zh_TW.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table=合成台 -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=合成台是一個塊狀物,可以讓你進入一個3×3的合成網格,讓你進行高級合成。 -Rightclick the crafting table to access the 3×3 crafting grid.=右鍵點擊合成台以進入3×3合成網格。 -Recipe book=合成教學 -Crafting=合成 -Inventory=物品欄 -3×3 crafting grid=3×3合成網格 diff --git a/mods/ITEMS/mcl_crafting_table/locale/template.txt b/mods/ITEMS/mcl_crafting_table/locale/template.txt deleted file mode 100644 index 4563b73405..0000000000 --- a/mods/ITEMS/mcl_crafting_table/locale/template.txt +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_crafting_table -Crafting Table= -A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.= -Rightclick the crafting table to access the 3×3 crafting grid.= -Recipe book= -Crafting= -Inventory= -3×3 crafting grid= diff --git a/mods/ITEMS/mcl_crafting_table/mod.conf b/mods/ITEMS/mcl_crafting_table/mod.conf deleted file mode 100644 index 149d1c9824..0000000000 --- a/mods/ITEMS/mcl_crafting_table/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_crafting_table -description = Adds a crafting table. -depends = mcl_init, mcl_formspec, mcl_sounds, mcl_colors diff --git a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_front.png b/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_front.png deleted file mode 100644 index 3d42e4ce79..0000000000 Binary files a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_side.png b/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_side.png deleted file mode 100644 index 3d42e4ce79..0000000000 Binary files a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_top.png b/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_top.png deleted file mode 100644 index 5d85e51775..0000000000 Binary files a/mods/ITEMS/mcl_crafting_table/textures/crafting_workbench_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_crafting_table/textures/gui_crafting_arrow.png b/mods/ITEMS/mcl_crafting_table/textures/gui_crafting_arrow.png deleted file mode 100644 index 93ce1e1b90..0000000000 Binary files a/mods/ITEMS/mcl_crafting_table/textures/gui_crafting_arrow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/README.txt b/mods/ITEMS/mcl_doors/README.txt deleted file mode 100644 index c0cfc0525a..0000000000 --- a/mods/ITEMS/mcl_doors/README.txt +++ /dev/null @@ -1,36 +0,0 @@ -License of source code: ------------------------ -Copyright (C) 2012 PilzAdam -modified by BlockMen (added sounds, glassdoor, trapdoor) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - - -License of sounds --------------------------------------- -Opening-Sound created by CGEffex (CC BY 3.0), modified by BlockMen - doors_door_open.ogg -Closing-Sound created by bennstir (CC BY 3.0) - doors_door_close.ogg -Steel door sounds open & close (CC-BY-3.0) by HazMatt - - http://www.freesound.org/people/HazMattt/sounds/187283/ - doors_steel_door_open.ogg - doors_steel_door_close.ogg - -License/authors of texture files --------------------------------------- -Same as media license for MineClone 2 (see root directory). - -With modifications by GitHub user kingoscargames: -- `doors_item_steel.png` -- `mcl_doors_door_iron_lower.png` -- `mcl_doors_door_iron_upper.png` -- `mcl_doors_trapdoor_acaica.png` -- `mcl_doors_trapdoor_birch.png` -- `mcl_doors_trapdoor_spruce.png` -- `mcl_doors_trapdoor_dark_oak.png` -- `mcl_doors_trapdoor_jungle.png` diff --git a/mods/ITEMS/mcl_doors/alias.lua b/mods/ITEMS/mcl_doors/alias.lua deleted file mode 100644 index e0203804d8..0000000000 --- a/mods/ITEMS/mcl_doors/alias.lua +++ /dev/null @@ -1,23 +0,0 @@ --- Register aliases -local doornames = { - ["door"] = "wooden_door", - ["door_jungle"] = "jungle_door", - ["door_spruce"] = "spruce_door", - ["door_dark_oak"] = "dark_oak_door", - ["door_birch"] = "birch_door", - ["door_acacia"] = "acacia_door", - ["door_iron"] = "iron_door", -} - -for oldname, newname in pairs(doornames) do - minetest.register_alias("doors:"..oldname, "mcl_doors:"..newname) - minetest.register_alias("doors:"..oldname.."_t_1", "mcl_doors:"..newname.."_t_1") - minetest.register_alias("doors:"..oldname.."_b_1", "mcl_doors:"..newname.."_b_1") - minetest.register_alias("doors:"..oldname.."_t_2", "mcl_doors:"..newname.."_t_2") - minetest.register_alias("doors:"..oldname.."_b_2", "mcl_doors:"..newname.."_b_2") -end - -minetest.register_alias("doors:trapdoor", "mcl_doors:trapdoor") -minetest.register_alias("doors:trapdoor_open", "mcl_doors:trapdoor_open") -minetest.register_alias("doors:iron_trapdoor", "mcl_doors:iron_trapdoor") -minetest.register_alias("doors:iron_trapdoor_open", "mcl_doors:iron_trapdoor_open") diff --git a/mods/ITEMS/mcl_doors/api_doors.lua b/mods/ITEMS/mcl_doors/api_doors.lua deleted file mode 100644 index c2fc7c3773..0000000000 --- a/mods/ITEMS/mcl_doors/api_doors.lua +++ /dev/null @@ -1,559 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local minetest_get_meta = minetest.get_meta - --- This helper function calls on_place_node callbacks. -local function on_place_node(place_to, newnode, - placer, oldnode, itemstack, pointed_thing) - -- Run script hook - for _, callback in pairs(minetest.registered_on_placenodes) do - -- Deep-copy pos, node and pointed_thing because callback can modify them - local place_to_copy = {x = place_to.x, y = place_to.y, z = place_to.z} - local newnode_copy = - {name = newnode.name, param1 = newnode.param1, param2 = newnode.param2} - local oldnode_copy = - {name = oldnode.name, param1 = oldnode.param1, param2 = oldnode.param2} - local pointed_thing_copy = { - type = pointed_thing.type, - above = vector.new(pointed_thing.above), - under = vector.new(pointed_thing.under), - ref = pointed_thing.ref, - } - callback(place_to_copy, newnode_copy, placer, - oldnode_copy, itemstack, pointed_thing_copy) - end -end - --- Registers a door --- name: The name of the door --- def: a table with the folowing fields: --- description --- inventory_image --- groups --- tiles_bottom: the tiles of the bottom part of the door {front, side} --- tiles_top: the tiles of the bottom part of the door {front, side} --- If the following fields are not defined the default values are used --- node_box_bottom --- node_box_top --- selection_box_bottom --- selection_box_top --- only_placer_can_open: if true only the player who placed the door can --- open it --- only_redstone_can_open: if true, the door can only be opened by redstone, --- not by rightclicking it - -function mcl_doors:register_door(name, def) - def.groups.not_in_creative_inventory = 1 - def.groups.dig_by_piston = 1 - def.groups.door = 1 - def.groups.mesecon_ignore_opaque_dig = 1 - - if not def.sound_open then - def.sound_open = "doors_door_open" - end - if not def.sound_close then - def.sound_close = "doors_door_close" - end - - local box = {{-8/16, -8/16, -8/16, 8/16, 8/16, -5/16}} - - if not def.node_box_bottom then - def.node_box_bottom = box - end - if not def.node_box_top then - def.node_box_top = box - end - if not def.selection_box_bottom then - def.selection_box_bottom= box - end - if not def.selection_box_top then - def.selection_box_top = box - end - - local longdesc, usagehelp, tt_help - tt_help = def._tt_help - longdesc = def._doc_items_longdesc - if not longdesc then - if def.only_redstone_can_open then - longdesc = S("This door is a 2-block high barrier which can be opened or closed by hand or by redstone power.") - else - longdesc = S("This door is a 2-block high barrier which can only be opened by redstone power, not by hand.") - end - end - usagehelp = def._doc_items_usagehelp - if not usagehelp then - if def.only_redstone_can_open then - usagehelp = S("To open or close this door, send a redstone signal to its bottom half.") - else - usagehelp = S("To open or close this door, rightclick it or send a redstone signal to its bottom half.") - end - end - if not tt_help then - 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 - end - - local craftitem_groups = { mesecon_conductor_craftable = 1, deco_block = 1 } - if def.groups and def.groups.flammable then - craftitem_groups.flammable = def.groups.flammable - end - - minetest.register_craftitem(name, { - description = def.description, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - inventory_image = def.inventory_image, - stack_max = 64, - groups = craftitem_groups, - on_place = function(itemstack, placer, pointed_thing) - if not pointed_thing.type == "node" or not placer or not placer:is_player() then - return itemstack - end - local pn = placer:get_player_name() - if minetest.is_protected(pointed_thing.above, pn) and minetest.is_protected(pointed_thing.under, pn) then - return itemstack - end - local ptu = pointed_thing.under - local nu = minetest.get_node(ptu) - -- Pointed thing's rightclick action takes precedence, unless player holds down the sneak key - if minetest.registered_nodes[nu.name] and minetest.registered_nodes[nu.name].on_rightclick and not placer:get_player_control().sneak then - return minetest.registered_nodes[nu.name].on_rightclick(ptu, nu, placer, itemstack) - end - - local pt - if minetest.registered_nodes[nu.name] and minetest.registered_nodes[nu.name].buildable_to then - pt = pointed_thing.under - else - pt = pointed_thing.above - end - local pt2 = {x=pt.x, y=pt.y, z=pt.z} - pt2.y = pt2.y+1 - local ptname = minetest.get_node(pt).name - local pt2name = minetest.get_node(pt2).name - if - (minetest.registered_nodes[ptname] and not minetest.registered_nodes[ptname].buildable_to) or - (minetest.registered_nodes[pt2name] and not minetest.registered_nodes[pt2name].buildable_to) - then - return itemstack - end - - -- get left coordinate for checking if another door is there - local pt_left = {x=pt.x, y=pt.y, z=pt.z} - local p2 = minetest.dir_to_facedir(placer:get_look_dir()) - - if p2 == 0 then - pt_left.x = pt_left.x-1 - elseif p2 == 1 then - pt_left.z = pt_left.z+1 - elseif p2 == 2 then - pt_left.x = pt_left.x+1 - elseif p2 == 3 then - pt_left.z = pt_left.z-1 - end - - local left_node = minetest.get_node(pt_left) - - -- Set door nodes - minetest.set_node(pt, {name=name.."_b_1", param2=p2}) - minetest.set_node(pt2, {name=name.."_t_1", param2=p2}) - - if def.sounds and def.sounds.place then - minetest.sound_play(def.sounds.place, {pos=pt}, true) - end - - if def.only_placer_can_open then - local meta = minetest_get_meta(pt) - meta:set_string("doors_owner", "") - meta = minetest_get_meta(pt2) - meta:set_string("doors_owner", "") - end - - local meta1 = minetest_get_meta(pt) - local meta2 = minetest_get_meta(pt2) - -- save mirror state for the correct door - if left_node.name:sub(1, #name) == name then - meta1:set_int("is_mirrored", 1) - meta2:set_int("is_mirrored", 1) - end - - -- Save open state. 1 = open. 0 = closed - meta1:set_int("is_open", 0) - meta2:set_int("is_open", 0) - - - if not minetest.is_creative_enabled(pn) then - itemstack:take_item() - end - - on_place_node(pt, minetest.get_node(pt), placer, nu, itemstack, pointed_thing) - on_place_node(pt2, minetest.get_node(pt2), placer, minetest.get_node({x=ptu.x,y=ptu.y+1,z=ptu.z}), itemstack, pointed_thing) - - return itemstack - end, - }) - - local tt = def.tiles_top - local tb = def.tiles_bottom - - local function on_open_close(pos, dir, check_name, replace, replace_dir) - local meta1 = minetest_get_meta(pos) - pos.y = pos.y+dir - local meta2 = minetest_get_meta(pos) - - -- if name of other door is not the same as check_name -> return - if not minetest.get_node(pos).name == check_name then - return - end - - -- swap directions if mirrored - local params = {3,0,1,2} - if meta1:get_int("is_open") == 0 and meta2:get_int("is_mirrored") == 0 or meta1:get_int("is_open") == 1 and meta2:get_int("is_mirrored") == 1 then - params = {1,2,3,0} - end - - local p2 = minetest.get_node(pos).param2 - local np2 = params[p2+1] - - minetest.swap_node(pos, {name=replace_dir, param2=np2}) - pos.y = pos.y-dir - minetest.swap_node(pos, {name=replace, param2=np2}) - - local door_switching_sound - if meta1:get_int("is_open") == 1 then - door_switching_sound = def.sound_close - meta1:set_int("is_open", 0) - meta2:set_int("is_open", 0) - else - door_switching_sound = def.sound_open - meta1:set_int("is_open", 1) - meta2:set_int("is_open", 1) - end - minetest.sound_play(door_switching_sound, {pos = pos, gain = 0.5, max_hear_distance = 16}, true) - end - - local function on_mesecons_signal_open(pos, node) - on_open_close(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2") - end - local function on_mesecons_signal_close(pos, node) - if not mesecon.is_powered({x=pos.x,y=pos.y+1,z=pos.z}) then - on_open_close(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1") - end - end - local function on_mesecons_signal_open_top(pos, node) - on_mesecons_signal_open({x=pos.x, y=pos.y-1, z=pos.z}, node) - end - local function on_mesecons_signal_close_top(pos, node) - if not mesecon.is_powered({x=pos.x,y=pos.y-1,z=pos.z}) then - on_mesecons_signal_close({x=pos.x, y=pos.y-1, z=pos.z}, node) - end - end - - local function check_player_priv(pos, player) - if not def.only_placer_can_open then - return true - end - local meta = minetest_get_meta(pos) - local pn = player:get_player_name() - return meta:get_string("doors_owner") == pn - end - - local on_rightclick - -- Disable on_rightclick if this is a redstone-only door - if not def.only_redstone_can_open then - on_rightclick = function(pos, node, clicker) - if check_player_priv(pos, clicker) then - on_open_close(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2") - end - end - end - - minetest.register_node(name.."_b_1", { - tiles = {"blank.png", tt[2].."^[transformFXR90", tb[2], tb[2].."^[transformFX", tb[1], tb[1].."^[transformFX"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = false, - drop = "", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = def.node_box_bottom - }, - selection_box = { - type = "fixed", - fixed = def.selection_box_bottom - }, - groups = def.groups, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - - after_destruct = function(bottom, oldnode) - local meta_bottom = minetest_get_meta(bottom) - if meta_bottom:get_int("rotation") == 1 then - meta_bottom:set_int("rotation", 0) - else - minetest.add_item(bottom, name) - local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } - if minetest.get_node(bottom).name ~= name.."_b_2" and minetest.get_node(top).name == name.."_t_1" then - minetest.remove_node(top) - end - end - end, - - on_rightclick = on_rightclick, - - mesecons = { effector = { - action_on = on_mesecons_signal_open, - }}, - - on_rotate = function(bottom, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local meta_bottom = minetest_get_meta(bottom) - meta_bottom:set_int("rotation", 1) - node.param2 = screwdriver.rotate.facedir(bottom, node, mode) - minetest.swap_node(bottom, node) - - local top = {x=bottom.x,y=bottom.y+1,z=bottom.z} - local meta_top = minetest_get_meta(top) - meta_top:set_int("rotation", 1) - node.name = name .."_t_1" - minetest.swap_node(top, node) - - return true - end - return false - end, - - can_dig = check_player_priv, - }) - - if def.only_redstone_can_open then - on_rightclick = nil - else - on_rightclick = function(pos, node, clicker) - if check_player_priv(pos, clicker) then - on_open_close(pos, -1, name.."_b_1", name.."_t_2", name.."_b_2") - end - end - end - - minetest.register_node(name.."_t_1", { - tiles = {tt[2].."^[transformR90", "blank.png", tt[2], tt[2].."^[transformFX", tt[1], tt[1].."^[transformFX"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = false, - drop = "", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = def.node_box_top - }, - selection_box = { - type = "fixed", - fixed = def.selection_box_top - }, - groups = def.groups, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - - after_destruct = function(top, oldnode) - local meta_top = minetest_get_meta(top) - if meta_top:get_int("rotation") == 1 then - meta_top:set_int("rotation", 0) - else - local bottom = { x = top.x, y = top.y - 1, z = top.z } - if minetest.get_node(top).name ~= name.."_t_2" and minetest.get_node(bottom).name == name.."_b_1" and oldnode.name == name.."_t_1" then - minetest.dig_node(bottom) - end - end - end, - - on_rightclick = on_rightclick, - - mesecons = { effector = { - action_on = on_mesecons_signal_open_top, - rules = mesecon.rules.flat, - }}, - - on_rotate = function(top, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local meta_top = minetest_get_meta(top) - meta_top:set_int("rotation", 1) - node.param2 = screwdriver.rotate.facedir(top, node, mode) - minetest.swap_node(top, node) - - local bottom = {x=top.x,y=top.y-1,z=top.z} - local meta_bottom = minetest_get_meta(bottom) - meta_bottom:set_int("rotation", 1) - node.name = name .."_b_1" - minetest.swap_node(bottom, node) - - return true - end - return false - end, - - can_dig = check_player_priv, - }) - - if def.only_redstone_can_open then - on_rightclick = nil - else - on_rightclick = function(pos, node, clicker) - if check_player_priv(pos, clicker) then - on_open_close(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1") - end - end - end - - minetest.register_node(name.."_b_2", { - tiles = {"blank.png", tt[2].."^[transformFXR90", tb[2].."^[transformI", tb[2].."^[transformFX", tb[1].."^[transformFX", tb[1]}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = false, - drop = "", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = def.node_box_bottom - }, - selection_box = { - type = "fixed", - fixed = def.selection_box_bottom - }, - groups = def.groups, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - - after_destruct = function(bottom, oldnode) - local meta_bottom = minetest_get_meta(bottom) - if meta_bottom:get_int("rotation") == 1 then - meta_bottom:set_int("rotation", 0) - else - local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } - minetest.add_item(bottom, name) - if minetest.get_node(bottom).name ~= name.."_b_1" and minetest.get_node(top).name == name.."_t_2" then - minetest.remove_node(top) - end - end - end, - - on_rightclick = on_rightclick, - - mesecons = { effector = { - action_off = on_mesecons_signal_close, - }}, - - on_rotate = function(bottom, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local meta_bottom = minetest_get_meta(bottom) - meta_bottom:set_int("rotation", 1) - node.param2 = screwdriver.rotate.facedir(bottom, node, mode) - minetest.swap_node(bottom, node) - - local top = {x=bottom.x,y=bottom.y+1,z=bottom.z} - local meta_top = minetest_get_meta(top) - meta_top:set_int("rotation", 1) - node.name = name .."_t_2" - minetest.swap_node(top, node) - - return true - end - return false - end, - - can_dig = check_player_priv, - }) - - if def.only_redstone_can_open then - on_rightclick = nil - else - on_rightclick = function(pos, node, clicker) - if check_player_priv(pos, clicker) then - on_open_close(pos, -1, name.."_b_2", name.."_t_1", name.."_b_1") - end - end - end - - minetest.register_node(name.."_t_2", { - tiles = {tt[2].."^[transformR90", "blank.png", tt[2].."^[transformI", tt[2].."^[transformFX", tt[1].."^[transformFX", tt[1]}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - is_ground_content = false, - drop = "", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = def.node_box_top - }, - selection_box = { - type = "fixed", - fixed = def.selection_box_top - }, - groups = def.groups, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - - after_destruct = function(top, oldnode) - local meta_top = minetest_get_meta(top) - if meta_top:get_int("rotation") == 1 then - meta_top:set_int("rotation", 0) - else - local bottom = { x = top.x, y = top.y - 1, z = top.z } - if minetest.get_node(top).name ~= name.."_t_1" and minetest.get_node(bottom).name == name.."_b_2" and oldnode.name == name.."_t_2" then - minetest.dig_node(bottom) - end - end - end, - - on_rightclick = on_rightclick, - - mesecons = { effector = { - action_off = on_mesecons_signal_close_top, - rules = mesecon.rules.flat, - }}, - - on_rotate = function(top, node, user, mode, param2) - if mode == screwdriver.ROTATE_FACE then - local meta_top = minetest_get_meta(top) - meta_top:set_int("rotation", 1) - node.param2 = screwdriver.rotate.facedir(top, node, mode) - minetest.swap_node(top, node) - - local bottom = {x=top.x,y=top.y-1,z=top.z} - local meta_bottom = minetest_get_meta(bottom) - meta_bottom:set_int("rotation", 1) - node.name = name .."_b_2" - minetest.swap_node(bottom, node) - - return true - end - return false - end, - - can_dig = check_player_priv, - }) - - -- Add entry aliases for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("craftitems", name, "nodes", name.."_b_1") - doc.add_entry_alias("craftitems", name, "nodes", name.."_b_2") - doc.add_entry_alias("craftitems", name, "nodes", name.."_t_1") - doc.add_entry_alias("craftitems", name, "nodes", name.."_t_2") - end - -end diff --git a/mods/ITEMS/mcl_doors/api_trapdoors.lua b/mods/ITEMS/mcl_doors/api_trapdoors.lua deleted file mode 100644 index 5b7a0e5d09..0000000000 --- a/mods/ITEMS/mcl_doors/api_trapdoors.lua +++ /dev/null @@ -1,231 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Wrapper around mintest.pointed_thing_to_face_pos. -local function get_fpos(placer, pointed_thing) - local fpos - -- Workaround: minetest.pointed_thing_to_face_pos crashes in MT 0.4.16 if - -- pointed_thing.under and pointed_thing.above are equal - -- FIXME: Remove this when MT got fixed. - if not vector.equals(pointed_thing.under, pointed_thing.above) then - -- The happy case: Everything is normal - local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) - fpos = finepos.y % 1 - else - -- Fallback if both above and under are equal - fpos = 0 - end - return fpos -end - ----- Trapdoor ---- - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = function(pos, node, user, mode, param2) - -- Flip trapdoor vertically - if mode == screwdriver.ROTATE_AXIS then - local minor = node.param2 - if node.param2 >= 20 then - minor = node.param2 - 20 - if minor == 3 then - minor = 1 - elseif minor == 1 then - minor = 3 - end - node.param2 = minor - else - if minor == 3 then - minor = 1 - elseif minor == 1 then - minor = 3 - end - node.param2 = minor - node.param2 = node.param2 + 20 - end - minetest.set_node(pos, node) - return true - end - end -end - -function mcl_doors:register_trapdoor(name, def) - local groups = table.copy(def.groups) - if groups == nil then - groups = {} - end - groups.mesecon_ignore_opaque_dig = 1 - - if not def.sound_open then - def.sound_open = "doors_door_open" - end - if not def.sound_close then - def.sound_close = "doors_door_close" - end - - local function punch(pos) - local me = minetest.get_node(pos) - 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 - 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} - end - minetest.set_node(pos, tmp_node) - end - - local on_rightclick - if not def.only_redstone_can_open then - on_rightclick = function(pos, node, clicker) - punch(pos) - end - end - - -- Default help texts - local longdesc, usagehelp, tt_help - 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.") - 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.") - 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 - - -- Closed trapdoor - - local tile_front = def.tile_front - local tile_side = def.tile_side - if not tile_side then - tile_side = tile_front - end - local tiles_closed = { - tile_front, - tile_front .. "^[transformFY", - tile_side, tile_side, - tile_side, tile_side, - } - - local groups_closed = groups - groups_closed.trapdoor = 1 - groups_closed.deco_block = 1 - minetest.register_node(name, { - description = def.description, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - drawtype = "nodebox", - tiles = tiles_closed, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - inventory_image = def.inventory_image, - wield_image = def.wield_image, - is_ground_content = false, - paramtype = "light", - stack_max = 64, - paramtype2 = "facedir", - sunlight_propagates = true, - groups = groups_closed, - _mcl_hardness = def._mcl_hardness, - _mcl_blast_resistance = def._mcl_blast_resistance, - sounds = def.sounds, - node_box = { - type = "fixed", - fixed = { - {-8/16, -8/16, -8/16, 8/16, -5/16, 8/16},}, - }, - 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 - local param2 = 0 - - local placer_pos = placer:get_pos() - if placer_pos then - param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) - end - - local fpos = get_fpos(placer, pointed_thing) - - --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 - param2 = param2 + 20 - if param2 == 21 then - param2 = 23 - elseif param2 == 23 then - param2 = 21 - end - end - return minetest.item_place(itemstack, placer, pointed_thing, param2) - end, - on_rightclick = on_rightclick, - on_rotate = on_rotate, - }) - - -- Open trapdoor - - local groups_open = table.copy(groups) - - local tiles_open = { - tile_side, - tile_side .. "^[transformR180", - tile_side .. "^[transformR270", - tile_side .. "^[transformR90", - tile_front .. "^[transform46", - tile_front .. "^[transformFY", - } - - groups_open.trapdoor = 2 - groups_open.not_in_creative_inventory = 1 - minetest.register_node(name.."_open", { - drawtype = "nodebox", - tiles = tiles_open, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - 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, - 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, - }) - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", name, "nodes", name.."_open") - end - -end diff --git a/mods/ITEMS/mcl_doors/init.lua b/mods/ITEMS/mcl_doors/init.lua deleted file mode 100644 index a39b33c5e2..0000000000 --- a/mods/ITEMS/mcl_doors/init.lua +++ /dev/null @@ -1,9 +0,0 @@ -mcl_doors = {} - -local this = minetest.get_current_modname() -local path = minetest.get_modpath(this) - -dofile(path.."/api_doors.lua") -- Doors API -dofile(path.."/api_trapdoors.lua") -- Trapdoors API -dofile(path.."/register.lua") -- Register builtin doors and trapdoors -dofile(path.."/alias.lua") -- Legacy aliases diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr deleted file mode 100644 index be88513cb9..0000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Holztüren sind 2 Blöcke hohe Barrieren, die von Hand oder mit einem Redstone-Signal geöffnet oder geschlossen werden können. -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Um die Holztür zu öffnen oder zu schließen, rechtsklicken Sie sie oder versorgen Sie sie mit einem Redstone-Signal. -Oak Door=Eichentür -Acacia Door=Akazientür -Birch Door=Birkentür -Dark Oak Door=Schwarzeichentür -Jungle Door=Dschungeltür -Spruce Door=Fichtentür -Iron Door=Eisentür -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Eisentüren sind 2 Blöcke hohe Barrieren, die nur von einem Redstone-Signal geöffnet oder geschlossen werden können. -To open or close an iron door, supply its lower half with a redstone signal.=Um eine Eisentür zu öffnen oder zu schließen, versorgen Sie die untere Hälfte mit einem Redstone-Signal. -Oak Trapdoor=Eichenfalltür -Acacia Trapdoor=Akazienfalltür -Birch Trapdoor=Birkenfalltür -Spruce Trapdoor=Fichtenfalltür -Dark Oak Trapdoor=Schwarzeichenfalltür -Jungle Trapdoor=Dschungelfalltür -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Holzfalltüren sind horizontale Barrieren, die von Hand oder mit einem Redstone-Signal geöffnet oder geschlossen werden können. Sie belegen den oberen oder unteren Teil eines Blocks, je nachdem, wie sie platziert wurden. Wenn geöffnet, können sie wie eine Leiter erklommen werden. -To open or close the trapdoor, rightclick it or send a redstone signal to it.=Um die Falltür zu öffnen oder zu schließen, rechtsklicken Sie sie oder schicken Sie ein Redstone-Signal zu ihr. -Iron Trapdoor=Eisenfalltür -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Eisenfalltüren sind horizontale Barrieren, die nur mit einem Redstone-Signal geöffnet oder geschlossen werden können, nicht von Hand. Sie belegen den oberen oder unteren Teil eines Blocks, je nachdem, wie sie platziert wurden. Wenn geöffnet, können sie wie eine Leiter erklommen werden. -Openable by players and redstone power=Zu öffnen von Spielern und Redstoneenergie -Openable by redstone power=Zu öffnen von Redstoneenergie diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.es.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.es.tr deleted file mode 100644 index 1a510815ba..0000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.es.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Las puertas de madera son barreras altas de 2 bloques que se pueden abrir o cerrar a mano y con una señal de redstone. -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Para abrir o cerrar una puerta de madera, haga clic derecho o suministre a su mitad inferior una señal de redstone. -Oak Door=Puerta de roble -Acacia Door=Puerta de acacia -Birch Door=Puerta de abedul -Dark Oak Door=Puerta de roble oscuro -Jungle Door=Puerta de jungla -Spruce Door=Puerta de abeto -Iron Door=Puerta de Hierro -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Las puertas de hierro son barreras altas de 2 bloques que solo se pueden abrir o cerrar mediante una señal de redstone, no a mano. -To open or close an iron door, supply its lower half with a redstone signal.=Para abrir o cerrar una puerta de hierro, suministre a su mitad inferior una señal de redstone. -Oak Trapdoor=Trampilla de roble -Acacia Trapdoor=Trampilla de acacia -Birch Trapdoor=Trampilla de abedul -Spruce Trapdoor=Trampilla de abeto -Dark Oak Trapdoor=Trampilla de roble oscuro -Jungle Trapdoor=Trampilla de jungla -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Las trampillas de madera son barreras horizontales que se pueden abrir y cerrar a mano o una señal de redstone. Ocupan la parte superior o inferior de un bloque, dependiendo de cómo se hayan colocado. Cuando están abiertos, se pueden subir como una escalera. -To open or close the trapdoor, rightclick it or send a redstone signal to it.=Para abrir o cerrar la trampilla, haga clic derecho o envíele una señal de redstone. -Iron Trapdoor=Trampilla de hierro -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Las trampillas de hierro son barreras horizontales que solo pueden abrirse y cerrarse mediante señales de redstone, no a mano. Ocupan la parte superior o inferior de un bloque, dependiendo de cómo se hayan colocado. Cuando están abiertos, se pueden subir como una escalera. diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.fr.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.fr.tr deleted file mode 100644 index 9d1f25d9a0..0000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.fr.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Les portes en bois sont des barrières hautes à 2 blocs qui peuvent être ouvertes ou fermées à la main et par un signal redstone. -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Pour ouvrir ou fermer une porte en bois, faites un clic droit dessus ou fournissez à sa moitié inférieure un signal redstone. -Oak Door=Porte en Chêne -Acacia Door=Porte en Acacia -Birch Door=Porte en Bouleau -Dark Oak Door=Porte en Chêne Noir -Jungle Door=Porte en Acajou -Spruce Door=Porte en Sapin -Iron Door=Porte en Fer -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Les portes en fer sont des barrières hautes à 2 blocs qui ne peuvent être ouvertes ou fermées que par un signal redstone, mais pas à la main. -To open or close an iron door, supply its lower half with a redstone signal.=Pour ouvrir ou fermer une porte en fer, fournir à sa moitié inférieure un signal redstone. -Oak Trapdoor=Trappe en Chêne -Acacia Trapdoor=Trappe en Acacia -Birch Trapdoor=Trappe en Bouleau -Spruce Trapdoor=Trappe en Sapin -Dark Oak Trapdoor=Trappe en Chêne Noir -Jungle Trapdoor=Trappe en Acajou -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Les trappes en bois sont des barrières horizontales qui peuvent être ouvertes et fermées à la main ou par un signal redstone. Ils occupent la partie supérieure ou inférieure d'un bloc, selon la façon dont ils ont été placés. Lorsqu'elles sont ouvertes, elles peuvent être montées comme une échelle. -To open or close the trapdoor, rightclick it or send a redstone signal to it.=Pour ouvrir ou fermer la trappe, faites un clic droit dessus ou envoyez-lui un signal redstone. -Iron Trapdoor=Trappe en Fer -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Les trappes en fer sont des barrières horizontales qui ne peuvent être ouvertes et fermées que par des signaux de redstone, mais pas à la main. Ils occupent la partie supérieure ou inférieure d'un bloc, selon la façon dont ils ont été placés. Lorsqu'elles sont ouvertes, elles peuvent être montées comme une échelle. -Openable by players and redstone power=Ouvrable par les joueurs et puissance redstone -Openable by redstone power=Ouvrable par la puissance redstone diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr deleted file mode 100644 index e26c5861af..0000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Drewniane drzwi są blokami o wysokości 2, które mogą być otworzone i zamknięte ręcznie bądź przez zasilenie czerwienitem. -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Aby otworzyć lub zamknąć drewniane drzwi, kliknij je prawym przyciskiem bądź zasil ich dolną połowę czerwienitem. -Oak Door=Dębowe drzwi -Acacia Door=Akacjowe drzwi -Birch Door=Brzozowe drzwi -Dark Oak Door=Ciemno-dębowe drzwi -Jungle Door=Tropikalne drzwi -Spruce Door=Świerkowe drzwi -Iron Door=Żelazne drzwi -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Żelazne drzwi są blokami o wysokości dwa, które mogą być otwarte lub zamknięte przez zasilanie czerwienitem, ale nie ręcznie. -To open or close an iron door, supply its lower half with a redstone signal.=Aby otworzyć lub zamknąć żelazne drzwi zasil ich dolną część czerwienitem. -Oak Trapdoor=Dębowa klapa -Acacia Trapdoor=Akacjowa klapa -Birch Trapdoor=Brzozowa klapa -Spruce Trapdoor=Świerkowa klapa -Dark Oak Trapdoor=Ciemno-dębowa klapa -Jungle Trapdoor=Tropikalna klapa -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Drewniane klapy są poziomymi barierami, które mogą być otwarte i zamknięte ręcznie bądź przez zasilenie czerwienitem. Zajmują główną lub dolną część bloku w zależności od tego jak zostaną postawione. Gdy są otwarte można się po nich wspinać jak po drabinie. -To open or close the trapdoor, rightclick it or send a redstone signal to it.=Aby otworzyć lub zamknąć drewniane klapy, kliknij je prawym przyciskiem bądź zasil ich dolną połowę czerwienitem. -Iron Trapdoor=Żelazna klapa -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Żelazne klapy są poziomymi barierami, które mogą być otwarte i zamknięte tylko przez zasilenie czerwienitem, ale nie ręcznie. Zajmują główną lub dolną część bloku w zależności od tego jak zostaną postawione. Gdy są otwarte można się po nich wspinać jak po drabinie. -Openable by players and redstone power=Mogą być otworzone przez graczy i zasilanie czerwienitem -Openable by redstone power=Mogą być otworzone przez zasilanie czerwienitem diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.ru.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.ru.tr deleted file mode 100644 index 1515a2cd29..0000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.ru.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Деревянные двери это сдвоенные блочные преграды, которые можно открывать и закрывать вручную и по сигналу редстоуна. -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Чтобы открыть или закрыть деревянную дверь, кликните правой либо подайте к её нижней части сигнал редстоуна. -Oak Door=Дубовая дверь -Acacia Door=Дверь из акации -Birch Door=Берёзовая дверь -Dark Oak Door=Дверь из тёмного дуба -Jungle Door=Дверь из дерева джунглей -Spruce Door=Еловая дверь -Iron Door=Железная дверь -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Железные двери это сдвоенные блочные преграды, которые можно открывать и закрывать только по сигналу редстоуна и нельзя вручную. -To open or close an iron door, supply its lower half with a redstone signal.=Чтобы открыть или закрыть железную дверь, подайте на её нижнюю часть сигнал редстоуна. -Oak Trapdoor=Дубовый люк -Acacia Trapdoor=Люк из акации -Birch Trapdoor=Берёзовый люк -Spruce Trapdoor=Еловый люк -Dark Oak Trapdoor=Люк из тёмного дуба -Jungle Trapdoor=Люк из дерева джунглей -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Деревянные люки это горизонтальные преграды, которые можно открывать и закрывать вручную и по сигналу редстоуна. Они занимают верхнюю или нижнюю часть блока, в зависимости от того, как они были установлены. В открытом состоянии по ним можно карабкаться, как по лестницам. -To open or close the trapdoor, rightclick it or send a redstone signal to it.=Чтобы открыть или закрыть деревянные люк, кликните по нему правой клавишей либо подайте на него сигнал редстоуна. -Iron Trapdoor=Железный люк -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Железные люки это горизонтальные преграды, которые можно открывать и закрывать только по сигналу редстоуна и нельзя вручную. Они занимают верхнюю или нижнюю часть блока, в зависимости от того, как они были установлены. В открытом состоянии по ним можно карабкаться, как по лестницам. -Openable by players and redstone power=Открывается игроками и действием редстоуна -Openable by redstone power=Открывается действием редстоуна diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.zh_TW.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.zh_TW.tr deleted file mode 100644 index 62e2761d7d..0000000000 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.zh_TW.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=木門是2格高的障礙物,可以用手和紅石信號來打開或關閉。 -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=要打開或關閉一扇木門,請右擊它或在其下半部分提供紅石信號。 -Oak Door=橡木門 -Acacia Door=相思木門 -Birch Door=樺木門 -Dark Oak Door=黑橡木門 -Jungle Door=叢林木門 -Spruce Door=杉木門 -Iron Door=鐵門 -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=鐵門是2格高的障礙物,能通過紅石信號打開或關閉,但不能用手。 -To open or close an iron door, supply its lower half with a redstone signal.=要打開或關閉鐵門,請在其下半部分提供紅石信號。 -Oak Trapdoor=橡木地板門 -Acacia Trapdoor=相思木地板門 -Birch Trapdoor=樺木地板門 -Spruce Trapdoor=杉木地板門 -Dark Oak Trapdoor=黑橡木地板門 -Jungle Trapdoor=叢林木地板門 -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=木質地板門是水平的障礙物,可以用手或紅石信號來打開和關閉。它們佔據一個方塊的上部或下部,這取決於它們被放置的方式。當打開時,它們可以像梯子一樣被爬上去。 -To open or close the trapdoor, rightclick it or send a redstone signal to it.=要打開或關閉活板門,請右擊它或向它發送紅石信號。 -Iron Trapdoor=鐵製地板門 -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=木質地板門是水平的障礙物,能通過紅石信號打開或關閉,但不能用手。它們佔據一個方塊的上部或下部,這取決於它們被放置的方式。當打開時,它們可以像梯子一樣被爬上去。 -Openable by players and redstone power=可以用手和紅石信號來打開 -Openable by redstone power=能通過紅石信號打開 diff --git a/mods/ITEMS/mcl_doors/locale/template.txt b/mods/ITEMS/mcl_doors/locale/template.txt deleted file mode 100644 index d8c7c8609b..0000000000 --- a/mods/ITEMS/mcl_doors/locale/template.txt +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_doors -Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.= -To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.= -Oak Door= -Acacia Door= -Birch Door= -Dark Oak Door= -Jungle Door= -Spruce Door= -Iron Door= -Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.= -To open or close an iron door, supply its lower half with a redstone signal.= -Oak Trapdoor= -Acacia Trapdoor= -Birch Trapdoor= -Spruce Trapdoor= -Dark Oak Trapdoor= -Jungle Trapdoor= -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.= -To open or close the trapdoor, rightclick it or send a redstone signal to it.= -Iron Trapdoor= -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.= -Openable by players and redstone power= -Openable by redstone power= diff --git a/mods/ITEMS/mcl_doors/mod.conf b/mods/ITEMS/mcl_doors/mod.conf deleted file mode 100644 index ed2b094a8d..0000000000 --- a/mods/ITEMS/mcl_doors/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_doors -depends = mcl_core, mcl_sounds, mesecons -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_doors/register.lua b/mods/ITEMS/mcl_doors/register.lua deleted file mode 100644 index c998f65387..0000000000 --- a/mods/ITEMS/mcl_doors/register.lua +++ /dev/null @@ -1,268 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - ---[[ Doors ]] - -local wood_longdesc = S("Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.") -local wood_usagehelp = S("To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.") - ---- Oak Door --- -mcl_doors:register_door("mcl_doors:wooden_door", { - description = S("Oak Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "doors_item_wood.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_wood_lower.png", "mcl_doors_door_wood_side_lower.png"}, - tiles_top = {"mcl_doors_door_wood_upper.png", "mcl_doors_door_wood_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:wooden_door 3", - recipe = { - {"mcl_core:wood", "mcl_core:wood"}, - {"mcl_core:wood", "mcl_core:wood"}, - {"mcl_core:wood", "mcl_core:wood"} - } -}) - ---- Acacia Door -- -mcl_doors:register_door("mcl_doors:acacia_door", { - description = S("Acacia Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "mcl_doors_door_acacia.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_acacia_lower.png", "mcl_doors_door_acacia_side_lower.png"}, - tiles_top = {"mcl_doors_door_acacia_upper.png", "mcl_doors_door_acacia_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:acacia_door 3", - recipe = { - {"mcl_core:acaciawood", "mcl_core:acaciawood"}, - {"mcl_core:acaciawood", "mcl_core:acaciawood"}, - {"mcl_core:acaciawood", "mcl_core:acaciawood"} - } -}) - ---- Birch Door -- -mcl_doors:register_door("mcl_doors:birch_door", { - description = S("Birch Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "mcl_doors_door_birch.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_birch_lower.png", "mcl_doors_door_birch_side_lower.png"}, - tiles_top = {"mcl_doors_door_birch_upper.png", "mcl_doors_door_birch_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:birch_door 3", - recipe = { - {"mcl_core:birchwood", "mcl_core:birchwood"}, - {"mcl_core:birchwood", "mcl_core:birchwood"}, - {"mcl_core:birchwood", "mcl_core:birchwood"}, - } -}) - ---- Dark Oak Door -- -mcl_doors:register_door("mcl_doors:dark_oak_door", { - description = S("Dark Oak Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "mcl_doors_door_dark_oak.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_dark_oak_lower.png", "mcl_doors_door_dark_oak_side_lower.png"}, - tiles_top = {"mcl_doors_door_dark_oak_upper.png", "mcl_doors_door_dark_oak_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:dark_oak_door 3", - recipe = { - {"mcl_core:darkwood", "mcl_core:darkwood"}, - {"mcl_core:darkwood", "mcl_core:darkwood"}, - {"mcl_core:darkwood", "mcl_core:darkwood"}, - } -}) - ---- Jungle Door -- -mcl_doors:register_door("mcl_doors:jungle_door", { - description = S("Jungle Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "mcl_doors_door_jungle.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_jungle_lower.png", "mcl_doors_door_jungle_side_lower.png"}, - tiles_top = {"mcl_doors_door_jungle_upper.png", "mcl_doors_door_jungle_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:jungle_door 3", - recipe = { - {"mcl_core:junglewood", "mcl_core:junglewood"}, - {"mcl_core:junglewood", "mcl_core:junglewood"}, - {"mcl_core:junglewood", "mcl_core:junglewood"} - } -}) - ---- Spruce Door -- -mcl_doors:register_door("mcl_doors:spruce_door", { - description = S("Spruce Door"), - _doc_items_longdesc = wood_longdesc, - _doc_items_usagehelp = wood_usagehelp, - inventory_image = "mcl_doors_door_spruce.png", - groups = {handy=1,axey=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - tiles_bottom = {"mcl_doors_door_spruce_lower.png", "mcl_doors_door_spruce_side_lower.png"}, - tiles_top = {"mcl_doors_door_spruce_upper.png", "mcl_doors_door_spruce_side_upper.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), -}) - -minetest.register_craft({ - output = "mcl_doors:spruce_door 3", - recipe = { - {"mcl_core:sprucewood", "mcl_core:sprucewood"}, - {"mcl_core:sprucewood", "mcl_core:sprucewood"}, - {"mcl_core:sprucewood", "mcl_core:sprucewood"} - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:wooden_door", - burntime = 10, -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:jungle_door", - burntime = 10, -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:dark_oak_door", - burntime = 10, -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:birch_door", - burntime = 10, -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:acacia_door", - burntime = 10, -}) -minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:spruce_door", - burntime = 10, -}) - ---- Iron Door --- -mcl_doors:register_door("mcl_doors:iron_door", { - description = S("Iron Door"), - _doc_items_longdesc = S("Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand."), - _doc_items_usagehelp = S("To open or close an iron door, supply its lower half with a redstone signal."), - inventory_image = "doors_item_steel.png", - groups = {pickaxey=1, mesecon_effector_on=1}, - _mcl_hardness = 5, - _mcl_blast_resistance = 5, - tiles_bottom = {"mcl_doors_door_iron_lower.png^[transformFX", "mcl_doors_door_iron_side_lower.png"}, - tiles_top = {"mcl_doors_door_iron_upper.png^[transformFX", "mcl_doors_door_iron_side_upper.png"}, - sounds = mcl_sounds.node_sound_metal_defaults(), - sound_open = "doors_steel_door_open", - sound_close = "doors_steel_door_close", - - only_redstone_can_open = true, -}) - -minetest.register_craft({ - output = "mcl_doors:iron_door 3", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"} - } -}) - - - ---[[ Trapdoors ]] -local woods = { - -- id, desc, texture, craftitem - { "trapdoor", S("Oak Trapdoor"), "doors_trapdoor.png", "doors_trapdoor_side.png", "mcl_core:wood" }, - { "acacia_trapdoor", S("Acacia Trapdoor"), "mcl_doors_trapdoor_acacia.png", "mcl_doors_trapdoor_acacia_side.png", "mcl_core:acaciawood" }, - { "birch_trapdoor", S("Birch Trapdoor"), "mcl_doors_trapdoor_birch.png", "mcl_doors_trapdoor_birch_side.png", "mcl_core:birchwood" }, - { "spruce_trapdoor", S("Spruce Trapdoor"), "mcl_doors_trapdoor_spruce.png", "mcl_doors_trapdoor_spruce_side.png", "mcl_core:sprucewood" }, - { "dark_oak_trapdoor", S("Dark Oak Trapdoor"), "mcl_doors_trapdoor_dark_oak.png", "mcl_doors_trapdoor_dark_oak_side.png", "mcl_core:darkwood" }, - { "jungle_trapdoor", S("Jungle Trapdoor"), "mcl_doors_trapdoor_jungle.png", "mcl_doors_trapdoor_jungle_side.png", "mcl_core:junglewood" }, -} - -for w=1, #woods do - mcl_doors:register_trapdoor("mcl_doors:"..woods[w][1], { - description = woods[w][2], - _doc_items_longdesc = S("Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."), - _doc_items_usagehelp = S("To open or close the trapdoor, rightclick it or send a redstone signal to it."), - tile_front = woods[w][3], - tile_side = woods[w][4], - wield_image = woods[w][3], - groups = {handy=1,axey=1, mesecon_effector_on=1, material_wood=1, flammable=-1}, - _mcl_hardness = 3, - _mcl_blast_resistance = 3, - sounds = mcl_sounds.node_sound_wood_defaults(), - }) - - minetest.register_craft({ - output = "mcl_doors:"..woods[w][1].." 2", - recipe = { - {woods[w][5], woods[w][5], woods[w][5]}, - {woods[w][5], woods[w][5], woods[w][5]}, - } - }) - - minetest.register_craft({ - type = "fuel", - recipe = "mcl_doors:"..woods[w][1], - burntime = 15, - }) -end - -mcl_doors:register_trapdoor("mcl_doors:iron_trapdoor", { - description = S("Iron Trapdoor"), - _doc_items_longdesc = S("Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."), - tile_front = "doors_trapdoor_steel.png", - tile_side = "doors_trapdoor_steel_side.png", - wield_image = "doors_trapdoor_steel.png", - groups = {pickaxey=1, mesecon_effector_on=1}, - _mcl_hardness = 5, - _mcl_blast_resistance = 5, - sounds = mcl_sounds.node_sound_metal_defaults(), - sound_open = "doors_steel_door_open", - sound_close = "doors_steel_door_close", - - only_redstone_can_open = true, -}) - -minetest.register_craft({ - output = "mcl_doors:iron_trapdoor", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - } -}) diff --git a/mods/ITEMS/mcl_doors/sounds/doors_door_close.ogg b/mods/ITEMS/mcl_doors/sounds/doors_door_close.ogg deleted file mode 100644 index b4a13ec72a..0000000000 Binary files a/mods/ITEMS/mcl_doors/sounds/doors_door_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/sounds/doors_door_open.ogg b/mods/ITEMS/mcl_doors/sounds/doors_door_open.ogg deleted file mode 100644 index d03570eef3..0000000000 Binary files a/mods/ITEMS/mcl_doors/sounds/doors_door_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/sounds/doors_steel_door_close.ogg b/mods/ITEMS/mcl_doors/sounds/doors_steel_door_close.ogg deleted file mode 100644 index aea7be670b..0000000000 Binary files a/mods/ITEMS/mcl_doors/sounds/doors_steel_door_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/sounds/doors_steel_door_open.ogg b/mods/ITEMS/mcl_doors/sounds/doors_steel_door_open.ogg deleted file mode 100644 index de87477018..0000000000 Binary files a/mods/ITEMS/mcl_doors/sounds/doors_steel_door_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_item_steel.png b/mods/ITEMS/mcl_doors/textures/doors_item_steel.png deleted file mode 100644 index 82a500baf8..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_item_steel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_item_wood.png b/mods/ITEMS/mcl_doors/textures/doors_item_wood.png deleted file mode 100644 index ca3a31862e..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_item_wood.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_trapdoor.png b/mods/ITEMS/mcl_doors/textures/doors_trapdoor.png deleted file mode 100644 index 24e34c35b3..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_trapdoor.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_side.png b/mods/ITEMS/mcl_doors/textures/doors_trapdoor_side.png deleted file mode 100644 index 97a5904c47..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel.png b/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel.png deleted file mode 100644 index dc8f5325c3..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel_side.png b/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel_side.png deleted file mode 100644 index 109829f5b1..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/doors_trapdoor_steel_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia.png deleted file mode 100644 index 11657784df..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_lower.png deleted file mode 100644 index 510c047285..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_lower.png deleted file mode 100644 index 9faa931d0c..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_upper.png deleted file mode 100644 index f1c04b99ec..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_upper.png deleted file mode 100644 index 7e97bb7189..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_acacia_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch.png deleted file mode 100644 index 58af89e580..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_lower.png deleted file mode 100644 index 844ce3a211..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_lower.png deleted file mode 100644 index dd7310ef22..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_upper.png deleted file mode 100644 index a6805e4f69..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_upper.png deleted file mode 100644 index 3de49d6aba..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_birch_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak.png deleted file mode 100644 index 7b827cc468..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_lower.png deleted file mode 100644 index b3b7e81daf..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_lower.png deleted file mode 100644 index 51f28b35e4..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_upper.png deleted file mode 100644 index db254813e0..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_upper.png deleted file mode 100644 index 398547b916..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_dark_oak_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_lower.png deleted file mode 100644 index 583b3e2615..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_lower.png deleted file mode 100644 index 583b3e2615..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_upper.png deleted file mode 100644 index a30b93003b..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_upper.png deleted file mode 100644 index 093d91ce37..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_iron_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle.png deleted file mode 100644 index 29032482c2..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_lower.png deleted file mode 100644 index dde5be774b..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_lower.png deleted file mode 100644 index 6014b5303b..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_upper.png deleted file mode 100644 index 9f01843a6c..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_upper.png deleted file mode 100644 index c69c15717c..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_jungle_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce.png deleted file mode 100644 index 847ec3f9b2..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_lower.png deleted file mode 100644 index ebe81d620b..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_lower.png deleted file mode 100644 index c460559620..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_upper.png deleted file mode 100644 index 8ca2474d45..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_upper.png deleted file mode 100644 index 9d7daaab92..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_spruce_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_lower.png deleted file mode 100644 index e69244b567..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_lower.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_lower.png deleted file mode 100644 index 6ee18505d7..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_lower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_upper.png deleted file mode 100644 index abdbb0e5c3..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_side_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_upper.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_upper.png deleted file mode 100644 index 4e75538c27..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_door_wood_upper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia.png deleted file mode 100644 index 7e01900ed0..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia_side.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia_side.png deleted file mode 100644 index e63f839e2a..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_acacia_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch.png deleted file mode 100644 index fbd39dbcb8..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch_side.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch_side.png deleted file mode 100644 index 040eaaec61..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_birch_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak.png deleted file mode 100644 index 1a75bb9a68..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak_side.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak_side.png deleted file mode 100644 index d344c6352f..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_dark_oak_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle.png deleted file mode 100644 index cf83de6a08..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle_side.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle_side.png deleted file mode 100644 index cc7cbafacb..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_jungle_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce.png deleted file mode 100644 index 3c743f977d..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce_side.png b/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce_side.png deleted file mode 100644 index d05d717ca3..0000000000 Binary files a/mods/ITEMS/mcl_doors/textures/mcl_doors_trapdoor_spruce_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/building.lua b/mods/ITEMS/mcl_end/building.lua deleted file mode 100644 index 06c6722c4d..0000000000 --- a/mods/ITEMS/mcl_end/building.lua +++ /dev/null @@ -1,213 +0,0 @@ --- Building blocks and decorative nodes -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_screwdriver = minetest.get_modpath("screwdriver") - -local on_rotate -if mod_screwdriver then - on_rotate = screwdriver.rotate_3way -end - -minetest.register_node("mcl_end:end_stone", { - description = S("End Stone"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_end_end_stone.png"}, - stack_max = 64, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - after_dig_node = mcl_end.check_detach_chorus_plant, - _mcl_blast_resistance = 9, - _mcl_hardness = 3, -}) - -minetest.register_node("mcl_end:end_bricks", { - description = S("End Stone Bricks"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_end_end_bricks.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 9, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_end:purpur_block", { - description = S("Purpur Block"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_end_purpur_block.png"}, - is_ground_content = false, - stack_max = 64, - groups = {pickaxey=1, building_block=1, material_stone=1, purpur_block=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_end:purpur_pillar", { - description = S("Purpur Pillar"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - paramtype2 = "facedir", - is_ground_content = false, - on_place = mcl_util.rotate_axis, - tiles = {"mcl_end_purpur_pillar_top.png", "mcl_end_purpur_pillar_top.png", "mcl_end_purpur_pillar.png"}, - groups = {pickaxey=1, building_block=1, material_stone=1, purpur_block=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 6, - _mcl_hardness = 1.5, -}) - -minetest.register_node("mcl_end:end_rod", { - description = S("End Rod"), - _doc_items_longdesc = S("End rods are decorative light sources."), - tiles = { - "mcl_end_end_rod_top.png", - "mcl_end_end_rod_bottom.png", - "mcl_end_end_rod_side.png", - "mcl_end_end_rod_side.png", - "mcl_end_end_rod_side.png", - "mcl_end_end_rod_side.png", - }, - drawtype = "nodebox", - is_ground_content = false, - paramtype = "light", - paramtype2 = "facedir", - light_source = minetest.LIGHT_MAX, - sunlight_propagates = true, - groups = { dig_immediate=3, deco_block=1, destroy_by_lava_flow=1, }, - node_box = { - type = "fixed", - fixed = { - {-0.125, -0.5, -0.125, 0.125, -0.4375, 0.125}, -- Base - {-0.0625, -0.4375, -0.0625, 0.0625, 0.5, 0.0625}, -- Rod - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.125, -0.5, -0.125, 0.125, 0.5, 0.125}, -- Base - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.125, -0.5, -0.125, 0.125, 0.5, 0.125}, -- Base - }, - }, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - local p0 = pointed_thing.under - local p1 = pointed_thing.above - local param2 = 0 - - local placer_pos = placer:get_pos() - if placer_pos then - local dir = { - x = p1.x - placer_pos.x, - y = p1.y - placer_pos.y, - z = p1.z - placer_pos.z - } - param2 = minetest.dir_to_facedir(dir) - end - - if p0.y - 1 == p1.y then - param2 = 20 - elseif p0.x - 1 == p1.x then - param2 = 16 - elseif p0.x + 1 == p1.x then - param2 = 12 - elseif p0.z - 1 == p1.z then - param2 = 8 - elseif p0.z + 1 == p1.z then - param2 = 4 - end - - return minetest.item_place(itemstack, placer, pointed_thing, param2) - end, - - sounds = mcl_sounds.node_sound_glass_defaults(), - _mcl_blast_resistance = 0, -}) - -minetest.register_node("mcl_end:dragon_egg", { - description = S("Dragon Egg"), - _doc_items_longdesc = S("A dragon egg is a decorative item which can be placed."), - tiles = { - "mcl_end_dragon_egg.png", - "mcl_end_dragon_egg.png", - "mcl_end_dragon_egg.png", - "mcl_end_dragon_egg.png", - "mcl_end_dragon_egg.png", - "mcl_end_dragon_egg.png", - }, - drawtype = "nodebox", - is_ground_content = false, - paramtype = "light", - light_source = 1, - node_box = { - type = "fixed", - fixed = { - {-0.375, -0.5, -0.375, 0.375, -0.4375, 0.375}, - {-0.5, -0.4375, -0.5, 0.5, -0.1875, 0.5}, - {-0.4375, -0.1875, -0.4375, 0.4375, 0, 0.4375}, - {-0.375, 0, -0.375, 0.375, 0.125, 0.375}, - {-0.3125, 0.125, -0.3125, 0.3125, 0.25, 0.3125}, - {-0.25, 0.25, -0.25, 0.25, 0.3125, 0.25}, - {-0.1875, 0.3125, -0.1875, 0.1875, 0.375, 0.1875}, - {-0.125, 0.375, -0.125, 0.125, 0.4375, 0.125}, - {-0.0625, 0.4375, -0.0625, 0.0625, 0.5, 0.0625}, - } - }, - selection_box = { - type = "regular", - }, - groups = {handy = 1, falling_node = 1, deco_block = 1, not_in_creative_inventory = 1, dig_by_piston = 1 }, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 9, - _mcl_hardness = 3, - on_punch = function(pos, node, puncher) - if not minetest.is_protected(pos, puncher:get_player_name()) then - local max_dist = vector.new(15, 7, 15) - local positions = minetest.find_nodes_in_area(vector.subtract(pos, max_dist), vector.add(pos, max_dist), "air", false) - if #positions > 0 then - local tpos = positions[math.random(#positions)] - minetest.remove_node(pos) - minetest.set_node(tpos, node) - minetest.check_for_falling(tpos) - end - end - end, -}) - - - --- Crafting recipes -minetest.register_craft({ - output = "mcl_end:end_bricks 4", - recipe = { - {"mcl_end:end_stone", "mcl_end:end_stone"}, - {"mcl_end:end_stone", "mcl_end:end_stone"}, - } -}) - -minetest.register_craft({ - output = "mcl_end:purpur_block 4", - recipe = { - {"mcl_end:chorus_fruit_popped", "mcl_end:chorus_fruit_popped",}, - {"mcl_end:chorus_fruit_popped", "mcl_end:chorus_fruit_popped",}, - } -}) - -minetest.register_craft({ - output = "mcl_end:end_rod 4", - recipe = { - {"mcl_mobitems:blaze_rod"}, - {"mcl_end:chorus_fruit_popped"}, - }, -}) - diff --git a/mods/ITEMS/mcl_end/chorus_plant.lua b/mods/ITEMS/mcl_end/chorus_plant.lua deleted file mode 100644 index 4dc54db186..0000000000 --- a/mods/ITEMS/mcl_end/chorus_plant.lua +++ /dev/null @@ -1,579 +0,0 @@ --- Chorus plants --- This includes chorus flowers, chorus plant stem nodes and chorus fruit - -local S = minetest.get_translator(minetest.get_current_modname()) - -local math = math -local table = table - ---- Plant parts --- - -local MAX_FLOWER_AGE = 5 -- Maximum age of chorus flower before it dies - -local chorus_flower_box = { - type = "fixed", - fixed = { - {-0.5, -0.375, -0.375, 0.5, 0.375, 0.375}, - {-0.375, -0.375, 0.375, 0.375, 0.375, 0.5}, - {-0.375, -0.375, -0.5, 0.375, 0.375, -0.375}, - {-0.375, 0.375, -0.375, 0.375, 0.5, 0.375}, - {-0.375, -0.5, -0.375, 0.375, -0.375, 0.375}, - } -} - --- Helper function -local function round(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult -end - --- This is a list of nodes that SHOULD NOT call their detach function -local no_detach = {} - --- This detaches all chorus plants that are/were attached --- at start_pos. -function mcl_end.detach_chorus_plant(start_pos, digger) - -- This node should not call a detach function, do NOTHING - local hash = minetest.hash_node_position(start_pos) - if no_detach[hash] then - return - end - - -- This node SHOULD be detached, make sure no others are - no_detach = {} - - local neighbors = { - { x=0, y=1, z=0 }, - { x=0, y=0, z=1 }, - { x=-1, y=0, z=0 }, - { x=0, y=0, z=-1 }, - { x=1, y=0, z=0 }, - { x=0, y=-1, z=0 }, - } - table.insert(neighbors, { x=0, y=-1, z=0 }) - local tree_start_posses = {} - for i=1, #neighbors do - table.insert(tree_start_posses, vector.add(start_pos, neighbors[i])) - end - - -- From the start_pos, we look at the 6 possible directions. Each of these can - -- have a full independent chorus plant ("tree") that might be detached. - for t=1, #tree_start_posses do - -- For each "tree", we do a depth-first search to traverse all - -- chorus plant nodes. - local touched_nodes_hashes = { minetest.hash_node_position(start_pos) } - local check_posses = { tree_start_posses[t] } - local chorus_nodes = {} - local break_tree = true - while #check_posses > 0 do - local pos = check_posses[1] - - -- Don't just count neighbors as being touched, count THIS NODE as well - -- This will prevent it from getting stuck in an endless loop - if not touched_nodes_hashes[minetest.hash_node_position(pos)] then - local node = minetest.get_node(pos) - touched_nodes_hashes[minetest.hash_node_position(pos)] = true - if node.name == "mcl_end:end_stone" then - -- End stone found, the algorithm ends here (haha!) - -- without destroying any nodes, because chorus plants - -- attach to end stone. - break_tree = false - break - elseif minetest.get_item_group(node.name, "chorus_plant") == 1 then - table.insert(chorus_nodes, pos) - for i=1, #neighbors do - local newpos = vector.add(pos, neighbors[i]) - if not touched_nodes_hashes[minetest.hash_node_position(newpos)] then - table.insert(check_posses, vector.add(pos, neighbors[i])) - end - end - end - end - - table.remove(check_posses, 1) - end - if break_tree then - -- If we traversed the entire chorus plant and it was not attached to end stone: - -- Drop ALL the chorus nodes we found. - for c=1, #chorus_nodes do - no_detach[ minetest.hash_node_position(chorus_nodes[c]) ] = true - if digger then - minetest.node_dig(chorus_nodes[c], { name = "mcl_end:chorus_plant" }, digger) - else - minetest.remove_node(chorus_nodes[c]) - end - end - end - end - - no_detach = {} -end - -function mcl_end.check_detach_chorus_plant(pos, oldnode, oldmetadata, digger) - mcl_end.detach_chorus_plant(pos, digger) -end - -function mcl_end.check_blast_chorus_plant(pos) - minetest.remove_node(pos) - mcl_end.detach_chorus_plant(pos) -end - -minetest.register_node("mcl_end:chorus_flower", { - description = S("Chorus Flower"), - _tt_help = S("Grows on end stone"), - _doc_items_longdesc = S("A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow."), - _doc_items_usagehelp = S("Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem."), - tiles = { - "mcl_end_chorus_flower.png", - "mcl_end_chorus_flower.png", - "mcl_end_chorus_flower.png", - "mcl_end_chorus_flower.png", - "mcl_end_chorus_flower.png", - "mcl_end_chorus_flower.png", - }, - drawtype = "nodebox", - paramtype = "light", - sunlight_propagates = true, - node_box = chorus_flower_box, - selection_box = { type = "regular" }, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {handy=1,axey=1, deco_block = 1, dig_by_piston = 1, destroy_by_lava_flow = 1,chorus_plant = 1}, - - node_placement_prediction = "", - on_place = function(itemstack, placer, pointed_thing) - local node_under = minetest.get_node(pointed_thing.under) - --local node_above = minetest.get_node(pointed_thing.above) - if placer and not placer:get_player_control().sneak then - -- Use pointed node's on_rightclick function first, if present - if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then - return minetest.registered_nodes[node_under.name].on_rightclick(pointed_thing.under, node_under, placer, itemstack) or itemstack - end - end - - --[[ Part 1: Check placement rules. Placement is legal if one of the following - conditions is met: - 1) On top of end stone or chorus plant - 2) On top of air and horizontally adjacent to exactly 1 chorus plant ]] - local pos - if minetest.registered_nodes[node_under.name].buildable_to then - pos = pointed_thing.under - else - pos = pointed_thing.above - end - - - local below = {x=pos.x, y=pos.y-1, z=pos.z} - local node_below = minetest.get_node(below) - local plant_ok = false - -- Condition 1 - if node_below.name == "mcl_end:chorus_plant" or node_below.name == "mcl_end:end_stone" then - plant_ok = true - -- Condition 2 - elseif node_below.name == "air" then - local around = { - { x= 1, y=0, z= 0 }, - { x=-1, y=0, z= 0 }, - { x= 0, y=0, z= 1 }, - { x= 0, y=0, z=-1 }, - } - local around_count = 0 - for a=1, #around do - local pos_side = vector.add(pos, around[a]) - local node_side = minetest.get_node(pos_side) - if node_side.name == "mcl_end:chorus_plant" then - around_count = around_count + 1 - if around_count > 1 then - break - end - end - end - if around_count == 1 then - plant_ok = true - end - end - if plant_ok then - -- Placement OK! Proceed normally - local it, suc = minetest.item_place_node(itemstack, placer, pointed_thing) - if suc then - minetest.sound_play(mcl_sounds.node_sound_wood_defaults().place, {pos = pos}, true) - end - return it - else - return itemstack - end - end, - after_dig_node = mcl_end.check_detach_chorus_plant, - on_blast = mcl_end.check_blast_chorus_plant, - _mcl_blast_resistance = 0.4, - _mcl_hardness = 0.4, -}) - -minetest.register_node("mcl_end:chorus_flower_dead", { - description = S("Dead Chorus Flower"), - _doc_items_longdesc = S("This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again."), - tiles = { - "mcl_end_chorus_flower_dead.png", - "mcl_end_chorus_flower_dead.png", - "mcl_end_chorus_flower_dead.png", - "mcl_end_chorus_flower_dead.png", - "mcl_end_chorus_flower_dead.png", - "mcl_end_chorus_flower_dead.png", - }, - drawtype = "nodebox", - paramtype = "light", - sunlight_propagates = true, - node_box = chorus_flower_box, - selection_box = { type = "regular" }, - sounds = mcl_sounds.node_sound_wood_defaults(), - drop = "mcl_end:chorus_flower", - groups = {handy=1,axey=1, deco_block = 1, dig_by_piston = 1, destroy_by_lava_flow = 1,chorus_plant = 1, not_in_creative_inventory=1}, - after_dig_node = mcl_end.check_detach_chorus_plant, - on_blast = mcl_end.check_blast_chorus_plant, - _mcl_blast_resistance = 2, - _mcl_hardness = 0.4, -}) - -minetest.register_node("mcl_end:chorus_plant", { - description = S("Chorus Plant Stem"), - _doc_items_longdesc = S("A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers."), - _doc_items_usagehelp = S("The stem attaches itself to end stone and other chorus blocks."), - tiles = { - "mcl_end_chorus_plant.png", - "mcl_end_chorus_plant.png", - "mcl_end_chorus_plant.png", - "mcl_end_chorus_plant.png", - "mcl_end_chorus_plant.png", - "mcl_end_chorus_plant.png", - }, - drawtype = "nodebox", - paramtype = "light", - sunlight_propagates = true, - node_box = { - type = "connected", - fixed = { -0.25, -0.25, -0.25, 0.25, 0.25, 0.25 }, -- Core - connect_top = { -0.1875, 0.25, -0.1875, 0.1875, 0.5, 0.1875 }, - connect_left = { -0.5, -0.1875, -0.1875, -0.25, 0.1875, 0.1875 }, - connect_right = { 0.25, -0.1875, -0.1875, 0.5, 0.1875, 0.1875 }, - connect_bottom = { -0.1875, -0.5, -0.25, 0.1875, -0.25, 0.25 }, - connect_front = { -0.1875, -0.1875, -0.5, 0.1875, 0.1875, -0.25 }, - connect_back = { -0.1875, -0.1875, 0.25, 0.1875, 0.1875, 0.5 }, - }, - connect_sides = { "top", "bottom", "front", "back", "left", "right" }, - connects_to = {"group:chorus_plant", "mcl_end:end_stone"}, - sounds = mcl_sounds.node_sound_wood_defaults(), - drop = { - items = { - { items = { "mcl_end:chorus_fruit"}, rarity = 2 }, - } - }, - groups = {handy=1,axey=1, deco_block = 1, dig_by_piston = 1, destroy_by_lava_flow = 1, chorus_plant = 1 }, - - node_placement_prediction = "", - on_place = function(itemstack, placer, pointed_thing) - local node_under = minetest.get_node(pointed_thing.under) - local node_above = minetest.get_node(pointed_thing.above) - if placer and not placer:get_player_control().sneak then - -- Use pointed node's on_rightclick function first, if present - if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then - return minetest.registered_nodes[node_under.name].on_rightclick(pointed_thing.under, node_under, placer, itemstack) or itemstack - end - end - - --[[ Part 1: Check placement rules. Placement is legal if this - condition is met: - - placed on end stone or any chorus node ]] - local pos_place, node_check - if minetest.registered_nodes[node_under.name].buildable_to then - pos_place = pointed_thing.under - node_check = node_above - else - pos_place = pointed_thing.above - node_check = node_under - end - local plant_ok = false - if node_check.name == "mcl_end:end_stone" or minetest.get_item_group(node_check.name, "chorus_plant") > 0 then - plant_ok = true - end - if plant_ok then - -- Placement OK! Proceed normally - local it, suc = minetest.item_place_node(itemstack, placer, pointed_thing) - if suc then - minetest.sound_play(mcl_sounds.node_sound_wood_defaults().place, {pos = pos_place}, true) - end - return it - else - return itemstack - end - end, - after_dig_node = mcl_end.check_detach_chorus_plant, - on_blast = mcl_end.check_blast_chorus_plant, - _mcl_blast_resistance = 2, - _mcl_hardness = 0.4, -}) - --- Grow a complete chorus plant at pos -function mcl_end.grow_chorus_plant(pos, node, pr) - local flowers = { pos } - -- Plant initial flower (if it isn't there already) - if not node then - node = minetest.get_node(pos) - end - if node.name ~= "mcl_end:chorus_flower" then - minetest.set_node(pos, { name = "mcl_end:chorus_flower" }) - end - while true do - local new_flowers_list = {} - for f=1, #flowers do - local new_flowers = mcl_end.grow_chorus_plant_step(flowers[f], minetest.get_node(flowers[f]), pr) - if #new_flowers > 0 then - table.insert(new_flowers_list, new_flowers) - end - end - if #new_flowers_list == 0 then - return - end - flowers = {} - for l=1, #new_flowers_list do - for f=1, #new_flowers_list[l] do - table.insert(flowers, new_flowers_list[l][f]) - end - end - end -end - --- Grow a single step of a chorus plant at pos. --- Pos must be a chorus flower. -function mcl_end.grow_chorus_plant_step(pos, node, pr) - local new_flower_buds = {} - local above = { x = pos.x, y = pos.y + 1, z = pos.z } - local node_above = minetest.get_node(above) - local around = { - { x=-1, y=0, z= 0 }, - { x= 1, y=0, z= 0 }, - { x= 0, y=0, z=-1 }, - { x= 0, y=0, z= 1 }, - } - local air_around = true - for a=1, #around do - if minetest.get_node(vector.add(above, around[a])).name ~= "air" then - air_around = false - break - end - end - local grown = false - if node_above.name == "air" and air_around then - local branching = false - local h = 0 - for y=1, 4 do - local checkpos = {x=pos.x, y=pos.y-y, z=pos.z} - local node = minetest.get_node(checkpos) - if node.name == "mcl_end:chorus_plant" then - h = y - if not branching then - for a=1, #around do - local node_side = minetest.get_node(vector.add(checkpos, around[a])) - if node_side.name == "mcl_end:chorus_plant" then - branching = true - end - end - end - else - break - end - end - - local grow_chance - if h <= 1 then - grow_chance = 100 - elseif h == 2 and branching == false then - grow_chance = 60 - elseif h == 2 and branching == true then - grow_chance = 50 - elseif h == 3 and branching == false then - grow_chance = 40 - elseif h == 3 and branching == true then - grow_chance = 25 - elseif h == 4 and branching == false then - grow_chance = 20 - end - - if grow_chance then - local new_flowers = {} - local r = pr:next(1, 100) - local age = node.param2 - if r <= grow_chance then - table.insert(new_flowers, above) - else - age = age + 1 - local branches - if branching == false then - branches = pr:next(1, 4) - elseif branching == true then - branches = pr:next(0, 3) - end - for b=1, branches do - local next_branch = pr:next(1, #around) - local branch = vector.add(pos, around[next_branch]) - local below_branch = vector.add(branch, {x=0,y=-1,z=0}) - if minetest.get_node(below_branch).name == "air" then - table.insert(new_flowers, branch) - end - end - end - - for _, f in pairs(new_flowers) do - if age >= MAX_FLOWER_AGE then - local nn = minetest.get_node(f).name - if nn ~= "mcl_end:chorus_flower" and nn ~= "mcl_end:chorus_flower_dead" then - minetest.set_node(f, {name="mcl_end:chorus_flower_dead"}) - grown = true - end - else - local nn = minetest.get_node(f).name - if nn ~= "mcl_end:chorus_flower" and nn ~= "mcl_end:chorus_flower_dead" then - minetest.set_node(f, {name="mcl_end:chorus_flower", param2 = age}) - table.insert(new_flower_buds, f) - grown = true - end - end - end - if #new_flowers >= 1 then - minetest.set_node(pos, {name="mcl_end:chorus_plant"}) - grown = true - end - end - end - if not grown then - -- FIXME: In the End, chorus plant fails to generate thru mapchunk borders. - -- So the chorus plants are capped at a fixed height. - -- The mapgen needs to be taught somehow how to deal with this. - minetest.set_node(pos, {name = "mcl_end:chorus_flower_dead"}) - end - return new_flower_buds -end - ---- ABM --- -local seed = minetest.get_mapgen_setting("seed") -local pr = PseudoRandom(seed) -minetest.register_abm({ - label = "Chorus plant growth", - nodenames = { "mcl_end:chorus_flower" }, - interval = 35.0, - chance = 4.0, - action = function(pos, node, active_object_count, active_object_count_wider) - mcl_end.grow_chorus_plant_step(pos, node, pr) - end, -}) - ---- Chorus fruit --- - --- Attempt to randomly teleport the player within a 8×8×8 box around. Rules: --- * Not in solid blocks. --- * Not in liquids. --- * Always on top of a solid block --- * Maximum attempts: 16 --- --- Returns true on success. -local function random_teleport(player) - local pos = player:get_pos() - -- 16 attempts to find a suitable position - for a=1, 16 do - -- Teleportation box - local x,y,z - x = math.random(round(pos.x)-8, round(pos.x)+8) - y = math.random(math.ceil(pos.y)-8, math.ceil(pos.y)+8) - z = math.random(round(pos.z)-8, round(pos.z)+8) - local node_cache = {} - local ground_level = false - -- Scan nodes from selected position until we hit ground - for t=0, 16 do - local tpos = {x=x, y=y-t, z=z} - local tnode = minetest.get_node(tpos) - if tnode.name == "mcl_core:void" or tnode.name == "ignore" then - break - end - local tdef = minetest.registered_nodes[tnode.name] - table.insert(node_cache, {pos=tpos, node=tnode}) - if tdef.walkable then - ground_level = true - break - end - end - -- Ground found? Then let's check if the player has enough room - if ground_level and #node_cache >= 1 then - local streak = 0 - local last_was_walkable = true - for c=#node_cache, 1, -1 do - local tpos = node_cache[c].pos - local tnode = node_cache[c].node - local tdef = minetest.registered_nodes[tnode.name] - -- Player needs a space of 2 safe non-liquid nodes on top of a walkable node - if not tdef.walkable and tdef.liquidtype == "none" and tdef.damage_per_second <= 0 then - if (streak == 0 and last_was_walkable) or (streak > 0) then - streak = streak + 1 - end - else - streak = 0 - end - last_was_walkable = tdef.walkable - if streak >= 2 then - -- JACKPOT! Now we can teleport. - local goal = {x=tpos.x, y=tpos.y-1.5, z=tpos.z} - player:set_pos(goal) - minetest.sound_play({name="mcl_end_teleport", gain=0.8}, {pos=goal, max_hear_distance=16}, true) - return true - end - end - end - end - return false -end - --- Randomly teleport player and update hunger -local eat_chorus_fruit = function(itemstack, player, pointed_thing) - if player and pointed_thing and pointed_thing.type == "node" and not player:get_player_control().sneak then - local node_under = minetest.get_node(pointed_thing.under) - -- Use pointed node's on_rightclick function first, if present - if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then - return minetest.registered_nodes[node_under.name].on_rightclick(pointed_thing.under, node_under, player, itemstack) or itemstack - end - end - local count = itemstack:get_count() - local new_itemstack = minetest.do_item_eat(4, nil, itemstack, player, pointed_thing) - local new_count = new_itemstack:get_count() - if count ~= new_count or new_itemstack:get_name() ~= "mcl_end:chorus_fruit" or (minetest.is_creative_enabled(player:get_player_name()) == true) then - random_teleport(player) - end - return new_itemstack -end - -minetest.register_craftitem("mcl_end:chorus_fruit", { - description = S("Chorus Fruit"), - _tt_help = S("Randomly teleports you when eaten"), - _doc_items_longdesc = S("A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to."), - wield_image = "mcl_end_chorus_fruit.png", - inventory_image = "mcl_end_chorus_fruit.png", - on_place = eat_chorus_fruit, - on_secondary_use = eat_chorus_fruit, - groups = { food = 2, transport = 1, eatable = 4, can_eat_when_full = 1 }, - _mcl_saturation = 2.4, - stack_max = 64, -}) - -minetest.register_craftitem("mcl_end:chorus_fruit_popped", { - description = S("Popped Chorus Fruit"), - _doc_items_longdesc = doc.sub.items.temp.craftitem, - wield_image = "mcl_end_chorus_fruit_popped.png", - inventory_image = "mcl_end_chorus_fruit_popped.png", - groups = { craftitem = 1 }, - stack_max = 64, -}) - ---- Crafting --- -minetest.register_craft({ - type = "cooking", - output = "mcl_end:chorus_fruit_popped", - recipe = "mcl_end:chorus_fruit", - cooktime = 10, -}) - diff --git a/mods/ITEMS/mcl_end/end_crystal.lua b/mods/ITEMS/mcl_end/end_crystal.lua deleted file mode 100644 index b7c80c55a2..0000000000 --- a/mods/ITEMS/mcl_end/end_crystal.lua +++ /dev/null @@ -1,179 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local vector = vector - -local explosion_strength = 6 - -local directions = { - {x = 1}, {x = -1}, {z = 1}, {z = -1} -} - -local dimensions = {"x", "y", "z"} - -for _, dir in pairs(directions) do - for _, dim in pairs(dimensions) do - dir[dim] = dir[dim] or 0 - end -end - -local function find_crystal(pos) - local objects = minetest.get_objects_inside_radius(pos, 0) - for _, obj in pairs(objects) do - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_end:crystal" then - return luaentity - end - end -end - -local function crystal_explode(self, puncher) - if self._exploded then return end - self._exploded = true - local strength = 1 - local source - if puncher then - strength = explosion_strength - local reason = {} - mcl_damage.from_punch(reason, puncher) - mcl_damage.finish_reason(reason) - source = reason.source - end - mcl_explosions.explode(vector.add(self.object:get_pos(), {x = 0, y = 1.5, z = 0}), strength, {drop_chance = 1}, self.object, source) - minetest.after(0, self.object.remove, self.object) -end - -local function set_crystal_animation(self) - self.object:set_animation({x = 0, y = 120}, 25) -end - -local function spawn_crystal(pos) - minetest.add_entity(pos, "mcl_end:crystal") - if not vector.equals(pos, vector.floor(pos)) then return end - if mcl_worlds.pos_to_dimension(pos) ~= "end" then return end - local portal_center - for _, dir in pairs(directions) do - local node = minetest.get_node(vector.add(pos, dir)) - if node.name == "mcl_portals:portal_end" then - portal_center = vector.add(pos, vector.multiply(dir, 3)) - break - end - end - if not portal_center then return end - local crystals = {} - for i, dir in pairs(directions) do - local crystal_pos = vector.add(portal_center, vector.multiply(dir, 3)) - crystals[i] = find_crystal(crystal_pos) - if not crystals[i] then return end - end - for _, crystal in pairs(crystals) do - crystal_explode(crystal) - end - local portal_pos = vector.add(portal_center, vector.new(-3, -1, -3)) - mcl_structures.call_struct(portal_pos, "end_exit_portal") - minetest.add_entity(vector.add(portal_pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon"):get_luaentity()._portal_pos = portal_pos -end - -minetest.register_entity("mcl_end:crystal", { - initial_properties = { - physical = true, - visual = "mesh", - visual_size = {x = 6, y = 6}, - collisionbox = {-1, 0.5, -1, 1, 2.5, 1}, - mesh = "mcl_end_crystal.b3d", - textures = {"mcl_end_crystal.png"}, - collide_with_objects = false, - }, - on_punch = crystal_explode, - on_activate = set_crystal_animation, - _exploded = false, - _hittable_by_projectile = true -}) - -minetest.register_entity("mcl_end:crystal_beam", { - initial_properties = { - physical = false, - visual = "cube", - visual_size = {x = 1, y = 1, z = 1}, - textures = { - "mcl_end_crystal_beam.png^[transformR90", - "mcl_end_crystal_beam.png^[transformR90", - "mcl_end_crystal_beam.png", - "mcl_end_crystal_beam.png", - "blank.png", - "blank.png", - }, - static_save = false, - }, - spin = 0, - init = function(self, dragon, crystal) - self.dragon, self.crystal = dragon, crystal - crystal:get_luaentity().beam = self.object - dragon:get_luaentity().beam = self.object - end, - on_deactivate = function(self) - if self.crystal and self.crystal:get_luaentity() then - self.crystal:get_luaentity().beam = nil - end - if self.dragon and self.dragon:get_luaentity() then - self.dragon:get_luaentity().beam = nil - end - end, - on_step = function(self, dtime) - if self.dragon and self.dragon:get_luaentity() and self.crystal and self.crystal:get_luaentity() then - self.spin = self.spin + dtime * math.pi * 2 / 4 - local dragon_pos, crystal_pos = self.dragon:get_pos(), self.crystal:get_pos() - - dragon_pos.y = dragon_pos.y + 4 - crystal_pos.y = crystal_pos.y + 2 - - self.object:set_pos(vector.divide(vector.add(dragon_pos, crystal_pos), 2)) - local rot = vector.dir_to_rotation(vector.direction(dragon_pos, crystal_pos)) - rot.z = self.spin - self.object:set_rotation(rot) - self.object:set_properties({visual_size = {x = 0.5, y = 0.5, z = vector.distance(dragon_pos, crystal_pos)}}) - else - self.object:remove() - end - end, -}) - -minetest.register_craftitem("mcl_end:crystal", { - inventory_image = "mcl_end_crystal_item.png", - description = S("End Crystal"), - stack_max = 64, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type == "node" then - local pos = minetest.get_pointed_thing_position(pointed_thing) - local node = minetest.get_node(pos) - local node_name = node.name - if placer and not placer: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, placer, itemstack) or itemstack - end - end - if find_crystal(pos) then return itemstack end - if node_name == "mcl_core:obsidian" or node_name == "mcl_core:bedrock" then - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - spawn_crystal(pos) - end - end - return itemstack - end, - _tt_help = S("Ignited by a punch or a hit with an arrow").."\n"..S("Explosion radius: @1", tostring(explosion_strength)), - _doc_items_longdesc = S("End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal."), - _doc_items_usagehelp = S("Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal."), - -}) - -minetest.register_craft({ - output = "mcl_end:crystal", - recipe = { - {"mcl_core:glass", "mcl_core:glass", "mcl_core:glass"}, - {"mcl_core:glass", "mcl_end:ender_eye", "mcl_core:glass"}, - {"mcl_core:glass", "mcl_mobitems:ghast_tear", "mcl_core:glass"}, - } -}) - -minetest.register_alias("mcl_end_crystal:end_crystal", "mcl_end:crystal") diff --git a/mods/ITEMS/mcl_end/eye_of_ender.lua b/mods/ITEMS/mcl_end/eye_of_ender.lua deleted file mode 100644 index ea3d70aba2..0000000000 --- a/mods/ITEMS/mcl_end/eye_of_ender.lua +++ /dev/null @@ -1,156 +0,0 @@ --- Eye of Ender -local S = minetest.get_translator(minetest.get_current_modname()) - -minetest.register_entity("mcl_end:ender_eye", { - physical = false, - textures = {"mcl_end_ender_eye.png"}, - visual_size = {x=1.5, y=1.5}, - collisionbox = {0,0,0,0,0,0}, - pointable = false, - - -- Save and restore age - get_staticdata = function(self) - return tostring(self._age) - end, - on_activate = function(self, staticdata, dtime_s) - local age = tonumber(staticdata) - if type(age) == "number" then - self._age = age - if self._age >= 2 then - self._phase = 1 - else - self._phase = 0 - end - end - end, - - on_step = function(self, dtime) - self._age = self._age + dtime - if self._age >= 3 then - -- End of life - local r = math.random(1,5) - if r == 1 then - -- 20% chance to get destroyed completely. - -- 100% if in Creative Mode - self.object:remove() - return - else - -- 80% to drop as an item - local pos = self.object:get_pos() - local v = self.object:get_velocity() - self.object:remove() - local item = minetest.add_item(pos, "mcl_end:ender_eye") - item:set_velocity(v) - return - end - elseif self._age >= 2 then - if self._phase == 0 then - self._phase = 1 - -- Stop the eye and wait for another second. - -- The vertical speed changes are just eye candy. - self.object:set_acceleration({x=0, y=-3, z=0}) - self.object:set_velocity({x=0, y=self.object:get_velocity().y*0.2, z=0}) - end - else - -- Fly normally and generate particles - local pos = self.object:get_pos() - pos.x = pos.x + math.random(-1, 1)*0.5 - pos.y = pos.y + math.random(-1, 0)*0.5 - pos.z = pos.z + math.random(-1, 1)*0.5 - minetest.add_particle({ - pos = pos, - texture = "mcl_particles_teleport.png", - expirationtime = 1, - velocity = {x=math.random(-1, 1)*0.1, y=math.random(-30, 0)*0.1, z=math.random(-1, 1)*0.1}, - acceleration = {x=0, y=0, z=0}, - size = 2.5, - }) - end - end, - - _age = 0, -- age in seconds - _phase = 0, -- phase 0: flying. phase 1: idling in mid air, about to drop or shatter -}) - -minetest.register_craftitem("mcl_end:ender_eye", { - description = S("Eye of Ender"), - _tt_help = S("Guides the way to the mysterious End dimension"), - _doc_items_longdesc = S("This item is used to locate End portal shrines in the Overworld and to activate End portals.") .. "\n" .. S("NOTE: The End dimension is currently incomplete and might change in future versions."), - _doc_items_usagehelp = S("Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.") .. "\n" .. S("To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame."), - wield_image = "mcl_end_ender_eye.png", - inventory_image = "mcl_end_ender_eye.png", - stack_max = 64, - -- Throw eye of ender to make it fly to the closest stronghold - on_use = function(itemstack, user, pointed_thing) - if user == nil then - return - end - local origin = user:get_pos() - origin.y = origin.y + 1.5 - local strongholds = mcl_structures.get_registered_structures("stronghold") - local dim = mcl_worlds.pos_to_dimension(origin) - local is_creative = minetest.is_creative_enabled(user:get_player_name()) - - -- Just drop the eye of ender if there are no strongholds - if #strongholds <= 0 or dim ~= "overworld" then - if not is_creative then - minetest.item_drop(ItemStack("mcl_end:ender_eye"), user, user:get_pos()) - itemstack:take_item() - end - return itemstack - end - - -- Find closest stronghold. - -- Note: Only the horizontal axes are taken into account. - local closest_stronghold - local lowest_dist - for s=1, #strongholds do - local h_pos = table.copy(strongholds[s].pos) - local h_origin = table.copy(origin) - h_pos.y = 0 - h_origin.y = 0 - local dist = vector.distance(h_origin, h_pos) - if not closest_stronghold then - closest_stronghold = strongholds[s] - lowest_dist = dist - else - if dist < lowest_dist then - closest_stronghold = strongholds[s] - lowest_dist = dist - end - end - end - - -- Throw it! - local obj = minetest.add_entity(origin, "mcl_end:ender_eye") - local dir - - if lowest_dist <= 25 then - local velocity = 4 - -- Stronghold is close: Fly directly to stronghold and take Y into account. - dir = vector.normalize(vector.direction(origin, closest_stronghold.pos)) - obj:set_velocity({x=dir.x*velocity, y=dir.y*velocity, z=dir.z*velocity}) - else - local velocity = 12 - -- Don't care about Y if stronghold is still far away. - -- Fly to direction of X/Z, and always upwards so it can be seen easily. - local o = {x=origin.x, y=0, z=origin.z} - local s = {x=closest_stronghold.pos.x, y=0, z=closest_stronghold.pos.z} - dir = vector.normalize(vector.direction(o, s)) - obj:set_acceleration({x=dir.x*-3, y=4, z=dir.z*-3}) - obj:set_velocity({x=dir.x*velocity, y=3, z=dir.z*velocity}) - end - - - if not is_creative then - itemstack:take_item() - end - return itemstack - end, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_end:ender_eye", - recipe = {"mcl_mobitems:blaze_powder", "mcl_throwing:ender_pearl"}, -}) diff --git a/mods/ITEMS/mcl_end/init.lua b/mods/ITEMS/mcl_end/init.lua deleted file mode 100644 index 2adcd7cf8d..0000000000 --- a/mods/ITEMS/mcl_end/init.lua +++ /dev/null @@ -1,9 +0,0 @@ -mcl_end = {} - -local basepath = minetest.get_modpath(minetest.get_current_modname()) -dofile(basepath.."/chorus_plant.lua") -dofile(basepath.."/building.lua") -dofile(basepath.."/eye_of_ender.lua") -if not minetest.get_modpath("mcl_end_crystal") then - dofile(basepath.."/end_crystal.lua") -end diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.de.tr b/mods/ITEMS/mcl_end/locale/mcl_end.de.tr deleted file mode 100644 index 69a3408bb8..0000000000 --- a/mods/ITEMS/mcl_end/locale/mcl_end.de.tr +++ /dev/null @@ -1,33 +0,0 @@ -# textdomain: mcl_end -End Stone=Endstein -End Stone Bricks=Endsteinziegel -Purpur Block=Purpurblock -Purpur Pillar=Purpursäule -End Rod=Endstab -End rods are decorative light sources.=Endstäbe sind dekorative Lichtquellen. -Dragon Egg=Drachenei -A dragon egg is a decorative item which can be placed.=Ein Drahenei ist ein dekorativer, platzierbarer Gegenstand. -Chorus Flower=Chorusblume -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Eine Chorusblume ist der lebendige Teil einer Choruspflanze. Sie kann zu einer großen Choruspflanze heranwachsen, Schritt für Schritt. Wenn sie wächst, wird sie irgendwann am Alter absterben. Sie stirbt auch ab, wenn sie nicht weiterwachsen kann. -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Platzieren Sie sie und warten Sie darauf, dass sie wächst. Sie kann nur auf Endstein, auf einen anderen Choruspflanzenstängel oder an der Seite von genau einem Choruspflanzenstängel platziert werden. -Dead Chorus Flower=Tote Chorusblume -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Dies ist ein Teil einer Choruspflanze. Er wächst nicht. Chorusblumen werden mit der Zeit alt und sterben ab, sie sterben auch ab, wenn sie nicht weiterwachsen können. Eine tote Chorusblume kann geerntet werden, um eine frische neue Choruspflanze zu erhalten, die wieder wachsen kann. -Chorus Plant Stem=Choruspflanzenstängel -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=Ein Choruspflanzenstängel ist der Teil einer Choruspflanze, der die gesamte Pflanze zusammenhält. Sie braucht Endstein als Untergrund. Stängel wachsen aus Chorusblumen. -Chorus Fruit=Chorusfrucht -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Eine Chorusfrucht ist eine essbare Frucht von der Choruspflanze, die im Ende beheimatet ist. Wenn man sie isst, wird man auf einen zufälligen festen Block in der Nähe teleportiert, solange man nicht in eine Flüssigkeit, einen festen oder gefährlichen Block landen würde. Die Teleportation könnte fehlschlagen, wenn es sehr wenige oder keine Orte gibt, zu denen sie einen hinteleportieren könnte. -Popped Chorus Fruit=Aufgeploppte Chorusfrucht -Eye of Ender=Enderauge -This item is used to locate End portal shrines in the Overworld and to activate End portals.=Dieser Gegenstand wird benutzt, um Endportalschreine in der Oberwelt zu finden und Endportale zu aktivieren. -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Benutzen Sie die Angriffstaste, um das Enderauge loszulassen. Es wird aufsteigen und in einer horizontalen Richtung zum nächsten Endportalschrein fliegen. Wenn Sie sehr nah dran sind, wird das Enderauge stattdessen den direkten Weg zum Endportalschrein nehmen. Nach ein paar Sekunden hält es an. Es könnte als Gegenstand wieder herunterfallen, aber es wird mit einer 20%-Chance zerbrechen. -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Um ein Endportal zu aktivieren, müssen Enderaugen in jeden Block eines intakten Endportalrahmens platziert werden. -NOTE: The End dimension is currently incomplete and might change in future versions.=ANMERKUNG: Die Ende-Dimension ist momentan unfertig und könnte sich in künftigen Versionen ändern. -The stem attaches itself to end stone and other chorus blocks.=Der Stängel muss sich neben anderen Chorusblöcken oder Endstein befinden. -Grows on end stone=Wächst auf Endstein -Randomly teleports you when eaten=Zufällige Teleportation, wenn gegessen -Guides the way to the mysterious End dimension=Weist den Weg zur mysteriösen Endedimension -End Crystal=Enderkristall -End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.=Enderkristalle sind explosiv. Sie können auf Obsidian oder Grundgestein platziert werden. Man kann sie durch einen Schlag oder einen Treffer mit einem Pfeil entzünden. Außerdem können sie benutzt werden, um den Enderdrachen zu erzeugen, in dem man je einen auf jeder Seite des Endausgangsportals platziert. -Explosion radius: @1=Explosionsradius: @1 -Ignited by a punch or a hit with an arrow=Entzündbar durch einen Schlag oder einen Treffer mit einem Pfeil -Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.=Enderkistall auf Obsidian oder Grundgestein platzieren, dann Enderkristall schlagen oder mit einem Pfeil treffen. Dies bewirkt eine riesige und meistens tödliche Explosion. diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.es.tr b/mods/ITEMS/mcl_end/locale/mcl_end.es.tr deleted file mode 100644 index c98045867a..0000000000 --- a/mods/ITEMS/mcl_end/locale/mcl_end.es.tr +++ /dev/null @@ -1,25 +0,0 @@ -# textdomain: mcl_end -End Stone=Fin de la piedra -End Stone Bricks=Fin de ladrillos de piedra -Purpur Block=Bloque púrpura -Purpur Pillar=Pilar púrpura -End Rod=Barra final -End rods are decorative light sources.=Las varillas finales son fuentes de luz decorativas. -Dragon Egg=Huevo de dragón -A dragon egg is a decorative item which can be placed.=Un huevo de dragón es un elemento decorativo que se puede colocar. -Chorus Flower=Flor de coro -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Una flor de coro es la parte viva de una planta de coro. Puede convertirse en una planta de coro alto, paso a paso. Cuando crece, puede morir con la vejez eventualmente. También muere cuando no puede crecer. -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Colóquelo y espere a que crezca. Solo se puede colocar en la parte superior de la piedra del extremo, en la parte superior del tallo de la planta de coro, o al lado de exactamente un tallo de la planta de coro. -Dead Chorus Flower=Flor de coro muerto -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Esta es una parte de una planta de coro. No crece Las flores de coro mueren de vejez o cuando no pueden crecer. Se puede cosechar una flor de coro muerta para obtener una flor de coro fresca que pueda crecer nuevamente. -Chorus Plant Stem=Tallo de planta de coro -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=El tallo de una planta de coro es la parte de una planta de coro que mantiene unida a toda la planta. Necesita piedra final como su suelo. Los tallos se cultivan a partir de flores de coro. -Chorus Fruit=Fruta coro -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Una fruta de coro es una fruta comestible de la planta de coro que es el hogar del final. Comerlo te teletransporta a la parte superior de un bloque sólido aleatorio cercano, siempre que no termines dentro de un bloque líquido, sólido o dañino. La teletransportación puede fallar si hay muy pocos o ningún lugar para teletransportarse. -Popped Chorus Fruit=Fruta de coro reventado -Eye of Ender=Ojo de Ender -This item is used to locate End portal shrines in the Overworld and to activate End portals.=Este elemento se usa para localizar santuarios de portal del fin en el mundo y para activar portales del final. -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Usa la tecla de ataque para liberar el ojo de Ender. Se elevará y volará en la dirección horizontal del santuario portal más cercano. Si estás muy cerca, el ojo de Ender tomará el camino directo al Santuario del portal final. Después de unos segundos, se detiene. Puede caer como un elemento, pero hay un 20% de posibilidades de que se rompa. -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Para activar un portal final, se deben colocar ojos de ender en cada bloque de un marco intacto del portal final. -NOTE: The End dimension is currently incomplete and might change in future versions.=NOTA: La dimensión Final está actualmente incompleta y puede cambiar en futuras versiones. -The stem attaches itself to end stone and other chorus blocks.=El tallo se adhiere al extremo de la piedra y a otros bloques de coro.. \ No newline at end of file diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.fr.tr b/mods/ITEMS/mcl_end/locale/mcl_end.fr.tr deleted file mode 100644 index dc091a0f40..0000000000 --- a/mods/ITEMS/mcl_end/locale/mcl_end.fr.tr +++ /dev/null @@ -1,34 +0,0 @@ -# textdomain: mcl_end -End Stone=Pierre de L'End -End Stone Bricks=Brique de l'End -Purpur Block=Bloc de Purpur -Purpur Pillar=Bloc de Purpur Sculpté -End Rod=Barre de l'End -End rods are decorative light sources.=Les barres de l'End sont des sources de lumière décoratives. -Dragon Egg=Oeuf de Dragon -A dragon egg is a decorative item which can be placed.=Un oeuf de dragon est un objet décoratif qui peut être placé. -Chorus Flower=Plante de Chorus -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Une fleur de chorus est la partie vivante d'une plante de chorus. Il peut devenir une grande plante de chorus, étape par étape. Quand elle grandit, elle peut finir par mourir en vieillissant. Elle meurt également lorsqu'il est incapable de grandir. -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Placez-la et attendez qu'elle grandisse. Elle ne peut être placée que sur le dessus de la pierre d'End, sur le dessus d'une tige de plante de chorus ou exactement sur le côté d'une tige de plante de chorus. -Dead Chorus Flower=Plante de Chorus Morte -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Ceci fait partie d'une plante de chorus. Ça ne pousse pas. Les fleurs de chorus meurent de vieillesse ou lorsqu'elles ne peuvent pas pousser. Une fleur de chorus morte peut être récoltée pour obtenir une fleur de chorus fraîche qui peut repousser. -Chorus Plant Stem=Tige de Plante de Chorus -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=Une tige de plante de chorus est la partie d'une plante de chorus qui maintient la plante entière ensemble. Il a besoin de pierre d'End comme sol. Les tiges sont issues de fleurs de chorus. -Chorus Fruit=Fruit de Chorus -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Un fruit de chorus est un fruit comestible de l'usine de chorus qui abrite la fin. Le manger vous téléporte au sommet d'un bloc solide aléatoire à proximité, à condition de ne pas vous retrouver dans un bloc liquide, solide ou nuisible. La téléportation peut échouer s'il y a très peu ou pas d'endroits où se téléporter. -Popped Chorus Fruit=Chorus Eclaté -Eye of Ender=Oeil de l'Ender -This item is used to locate End portal shrines in the Overworld and to activate End portals.=Cet objet est utilisé pour localiser les sanctuaires du portail End dans l'Overworld et pour activer les portails End. -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Utilisez la touche d'attaque pour libérer l'oeil d'ender. Il s'élèvera et volera dans la direction horizontale du sanctuaire portail d'Ender le plus proche. Si vous êtes très proche, l'oeil d'ender empruntera le chemin direct vers le sanctuaire du portail de l'End. Après quelques secondes, il s'arrête. Il peut tomber en tant qu'objet, mais il y a 20% de chances qu'il se brise. -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Pour activer un portail d'End, les yeux d'ender doivent être placés dans chaque bloc d'un cadre de portail d'End intact. -NOTE: The End dimension is currently incomplete and might change in future versions.=REMARQUE: la dimension de l'End est actuellement incomplète et pourrait changer dans les futures versions. -The stem attaches itself to end stone and other chorus blocks.=La tige s'attache à la pierre d'End et à d'autres blocs de chorus. -Grows on end stone=Pousse sur la pierre d'End -Randomly teleports you when eaten=Vous téléporte au hasard quand il est mangé -Guides the way to the mysterious End dimension=Guide le chemin vers la dimension mystérieuse de l'End -End Crystal=Cristal de l'End -End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.=Les cristaux de l'End sont des dispositifs explosifs. Ils peuvent être placés sur de l'Obsidienne ou de la Bedrock. Allumez-les par un coup de poing ou avec une flèche. Les cristaux de l'End peuvent également être utilisés pour engendrer l'Ender dragon en en plaçant un de chaque côté du portail de sortie de l'End. -Explosion radius: @1=Rayon d'explosion: @1 -Ignited by a punch or a hit with an arrow=Enflammé par un coup de poing ou un coup avec une flèche -Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.=Placez le cristal de l'End sur l'obsidienne ou le substrat rocheux, puis frappez-le à coup de poing ou avec une flèche pour provoquer une énorme explosion probablement mortelle. Pour engendrer l'Ender dragon, placez-en un de chaque côté du portail de sortie de l'End. - diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.pl.tr b/mods/ITEMS/mcl_end/locale/mcl_end.pl.tr deleted file mode 100644 index e6526b2653..0000000000 --- a/mods/ITEMS/mcl_end/locale/mcl_end.pl.tr +++ /dev/null @@ -1,33 +0,0 @@ -# textdomain: mcl_end -End Stone=Kamień Kresu -End Stone Bricks=Ceglany kamień Kresu -Purpur Block=Blok purpury -Purpur Pillar=Filar purpury -End Rod=Różdżka Kresu -End rods are decorative light sources.=Różdżki Kresu są dekoracyjnymi źródłami światła. -Dragon Egg=Jajo smoka -A dragon egg is a decorative item which can be placed.=Jajo smoka jest przedmiotem dekoracyjnym, który można postawić. -Chorus Flower=Kwiat refrenusu -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Kwiat refrenusu jest żywą częścią rośliny refrenusu. Może wyrosnąć w wysoką roślinę refrenusu blok po bloku. Gdy rośnie może po pewnym czasie umrzeć ze starości. Umiera również gdy nie jest w stanie rosnąć. -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Postaw go i poczekaj aż urośnie. Może być postawiony tylko na kamieniu Kresu, na łodydze rośliny refrenusu lub na boku dokładnie jednej łodygi rośliny refrenusu. -Dead Chorus Flower=Martwy kwiat refrenusu -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Jest to część rośliny refrenusu, która nie rośnie. Kwiaty refrenusu umierają ze starości lub gdy nie mogą rosnąć. Martwy kwiat refrenusu może zostać zebrany by otrzymać świeży kwiat refrenusu, który znów może urosnąć. -Chorus Plant Stem=Łodyga rośliny refrenusu -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=Łodyga rośliny refrenusu to część rośliny która utrzymuje całą roślinę razem. Potrzebuje kamienia Kresu jako podłoża. Łodygi wyrastają z kwiatów refrenusu. -Chorus Fruit=Owoc refrenusu -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Owoc refrenusu jest jadalną częścią rośliny refrenusu, której naturalnym środowiskiem jest Kres. Zjedzenie go teleportuje cię na górę któregoś losowego stałego bloku w pobliżu, jeśli nie wylądowałbyś w płynie, stałym bloku lub szkodliwym bloku. Teleportacja może się nie udać jeśli nie ma, lub jest mało bloków które spełniają te warunki. -Popped Chorus Fruit=Prażony owoc refrenusu -Eye of Ender=Oko Kresu -This item is used to locate End portal shrines in the Overworld and to activate End portals.=Ten przedmiot jest wykorzystywany do znajdowaniu kapliczek portalu Kresu na Powierzchni oraz do aktywacji portali Kresu. -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Użyj przycisku ataku aby wypuścić oko Kresu. Podniesie się ono i poleci w poziomym kierunku najbliższej kapliczki portalu. Jeśli jesteś bardzo blisko, oko Kresu podąży bezpośrednią ścieżką do kapliczki portalu Kresu. Po kilku sekundach się zatrzymuje. Może wypaść jako przedmiot, jednak jest 20% szans, że się rozbije. -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Aby aktywować portal Kresu, w każdym bloku ramy portalu Kresu musi znajdować się oko Kresu. -NOTE: The End dimension is currently incomplete and might change in future versions.=UWAGA: Wymiar Kresu jest aktualnie nieukończony i może się zmienić w przyszłych wersjach. -The stem attaches itself to end stone and other chorus blocks.=Łodyga przytwierdza się do kamienia Kresu i innych refrenusowych bloków. -Grows on end stone=Rośnie na kamieniu Kresu -Randomly teleports you when eaten=Losowo teleportuje przy zjedzeniu -Guides the way to the mysterious End dimension=Prowadzi do tajemniczego wymiaru Kresu -End Crystal=Kryształ Kresu -End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.=Kryształy kresu to wybuchowe narzędzia. Mogą być postawione na obsydianie bądź skale macierzystej. Zapal je uderzeniem bądź strzałą. Kryształy kresu mogą być również wykorzystane do przywołania smoka Kresu, jeśli ułoży się po jednym na każdym boku Portalu wyjścia z Kresu. -Explosion radius: @1=Promień wybuchu: @1 -Ignited by a punch or a hit with an arrow=Zapalane przez uderzenie lub strzałę -Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.=Postaw kryształ na obsydianie lub skale macierzystej, a następnie uderz bądź strzel w niego strzałą, aby wywołać dużą, prawdopodobnie śmiertelną, eksplozję. Aby przywołać smoka Kresu postaw po jednej na każdym boku Portalu wyjścia z Kresu. diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.ru.tr b/mods/ITEMS/mcl_end/locale/mcl_end.ru.tr deleted file mode 100644 index 6ab7a3c670..0000000000 --- a/mods/ITEMS/mcl_end/locale/mcl_end.ru.tr +++ /dev/null @@ -1,33 +0,0 @@ -# textdomain: mcl_end -End Stone=Камень Предела -End Stone Bricks=Кирпичи из камня Предела -Purpur Block=Пурпурный блок -Purpur Pillar=Пурпурная колонна -End Rod=Стержень Предела -End rods are decorative light sources.=Стержень Предела это декоративный светильник. -Dragon Egg=Драконье яйцо -A dragon egg is a decorative item which can be placed.=Драконье яйцо это декоративный предмет, который можно поставить. -Chorus Flower=Цветок коруса -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Цветок коруса это живая часть растения коруса. Он может шаг за шагом вырасти в высокое растение коруса. Когда он растёт, то может иногда умирать от старости. Он также умирает, если не может расти. -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Установите его на место и ожидайте роста. Его можно помещать только на верхушку камня предела, а также верхнюю часть либо строго одну сторону стебля растения коруса. -Dead Chorus Flower=Мёртвый цветок коруса -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Это часть растения коруса. Она не растёт. Цветы коруса умирают от старости или когда не могут расти. Мёртвый цветок коруса можно собрать, чтобы получить свежий цветок коруса, который может вырасти вновь. -Chorus Plant Stem=Стебель растения коруса -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=Стебель растения коруса это часть растения коруса, которая связывает всё растение вместе. Ему нужен камень предела как почва. Стебли растут из цветков коруса. -Chorus Fruit=Фрукт коруса -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Фрукт коруса это съедобный фрукт растения коруса, домом которого является Предел. Употребление его в пищу телепортирует вас к вершине случайного твёрдого блок поблизости. Вы не закончите жизнь внутри жидкого, твёрдого или опасного блока, но телепортация может потерпеть неудачу, если поблизости слишком мало подходящих мест или такие места отсутствуют. -Popped Chorus Fruit=Лопнувший фрукт коруса -Eye of Ender=Око Предела -This item is used to locate End portal shrines in the Overworld and to activate End portals.=Этот предмет используется для обнаружения храмов порталов в Верхнем Мире и активации порталов Предела. -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Используйте клавишу [Атаковать], чтобы освободить око Предела. Оно поднимется и полетит в горизонтальном направлении к ближайшему храму портала. Если вы очень близко к храму портала Предела, то око Предела полетит к нему напрямую. Оно остановится через несколько секунд. Оно может превратиться обратно в предмет, но есть 20-процентная вероятность того, что оно разобьётся. -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Чтобы активировать портал Предела, нужно поместить по оку Предела на каждый блок целой рамки портала. -NOTE: The End dimension is currently incomplete and might change in future versions.=Предупреждение: Измерение Предела в настоящее время не завершено полностью и может измениться в будущих версиях. -The stem attaches itself to end stone and other chorus blocks.=Стебель присоединяется к камню Предела, а также к другим блокам коруса. -Grows on end stone=Растёт на камнях Предела -Randomly teleports you when eaten=Телепортирует случайным образом при употреблении в пищу -Guides the way to the mysterious End dimension=Показывает путь к загадочному измерению Предела -End Crystal=Кристалл Предела -End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.=Кристаллы Предела - это взрывные устройства. Их можно размещать на обсидиане или бедроке. Подрывайте их ударом или попаданием стрелы. Кристаллы Предела также можно использовать для порождения Дракона Предела, для этого их нужно поместить по одной штуке с каждой стороны выходного портала Предела. -Explosion radius: @1=Радиус взрыва: @1 -Ignited by a punch or a hit with an arrow=Поджигается ударом или при попадании стрелы -Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.=Разместите кристалл Предела на обсидиане или бедроке и ударьте по нему или попадите в него стрелой, чтобы вызвать огромный и, вероятно, смертельный взрыв. Чтобы вызвать Дракона Предела, поместите по одной штуке с каждой стороны портала выходного портала Предела. diff --git a/mods/ITEMS/mcl_end/locale/template.txt b/mods/ITEMS/mcl_end/locale/template.txt deleted file mode 100644 index 08c7de07b8..0000000000 --- a/mods/ITEMS/mcl_end/locale/template.txt +++ /dev/null @@ -1,33 +0,0 @@ -# textdomain: mcl_end -End Stone= -End Stone Bricks= -Purpur Block= -Purpur Pillar= -End Rod= -End rods are decorative light sources.= -Dragon Egg= -A dragon egg is a decorative item which can be placed.= -Chorus Flower= -A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.= -Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.= -Dead Chorus Flower= -This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.= -Chorus Plant Stem= -A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.= -Chorus Fruit= -A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.= -Popped Chorus Fruit= -Eye of Ender= -This item is used to locate End portal shrines in the Overworld and to activate End portals.= -Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.= -To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.= -NOTE: The End dimension is currently incomplete and might change in future versions.= -The stem attaches itself to end stone and other chorus blocks.= -Grows on end stone= -Randomly teleports you when eaten= -Guides the way to the mysterious End dimension= -End Crystal= -End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.= -Explosion radius: @1= -Ignited by a punch or a hit with an arrow= -Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.= diff --git a/mods/ITEMS/mcl_end/mod.conf b/mods/ITEMS/mcl_end/mod.conf deleted file mode 100644 index 021417e86a..0000000000 --- a/mods/ITEMS/mcl_end/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_end -depends = screwdriver, mcl_sounds, mcl_util, doc_items, mcl_worlds, mcl_structures \ No newline at end of file diff --git a/mods/ITEMS/mcl_end/models/mcl_end_crystal.b3d b/mods/ITEMS/mcl_end/models/mcl_end_crystal.b3d deleted file mode 100644 index b6c2b9a3d9..0000000000 Binary files a/mods/ITEMS/mcl_end/models/mcl_end_crystal.b3d and /dev/null differ diff --git a/mods/ITEMS/mcl_end/models/mcl_end_crystal.png b/mods/ITEMS/mcl_end/models/mcl_end_crystal.png deleted file mode 100644 index 13e12c2ea0..0000000000 Binary files a/mods/ITEMS/mcl_end/models/mcl_end_crystal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/sounds/mcl_end_teleport.ogg b/mods/ITEMS/mcl_end/sounds/mcl_end_teleport.ogg deleted file mode 100644 index addfe89c9f..0000000000 Binary files a/mods/ITEMS/mcl_end/sounds/mcl_end_teleport.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower.png b/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower.png deleted file mode 100644 index 47798ba0b7..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower_dead.png b/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower_dead.png deleted file mode 100644 index 88f798cd98..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_flower_dead.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit.png b/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit.png deleted file mode 100644 index 5c1677131c..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit_popped.png b/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit_popped.png deleted file mode 100644 index 7846d643d1..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_fruit_popped.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_plant.png b/mods/ITEMS/mcl_end/textures/mcl_end_chorus_plant.png deleted file mode 100644 index afde6feec1..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_chorus_plant.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_crystal_beam.png b/mods/ITEMS/mcl_end/textures/mcl_end_crystal_beam.png deleted file mode 100644 index b1b74265d4..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_crystal_beam.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_crystal_item.png b/mods/ITEMS/mcl_end/textures/mcl_end_crystal_item.png deleted file mode 100644 index e0eeac6a54..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_crystal_item.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_dragon_egg.png b/mods/ITEMS/mcl_end/textures/mcl_end_dragon_egg.png deleted file mode 100644 index c50d8f23dd..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_dragon_egg.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_end_bricks.png b/mods/ITEMS/mcl_end/textures/mcl_end_end_bricks.png deleted file mode 100644 index 933be6e513..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_end_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_bottom.png b/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_bottom.png deleted file mode 100644 index fc814a63bd..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_side.png b/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_side.png deleted file mode 100644 index b6a9fdf977..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_top.png b/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_top.png deleted file mode 100644 index 1485a8a261..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_end_rod_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_end_stone.png b/mods/ITEMS/mcl_end/textures/mcl_end_end_stone.png deleted file mode 100644 index 2254f82e74..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_end_stone.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_ender_eye.png b/mods/ITEMS/mcl_end/textures/mcl_end_ender_eye.png deleted file mode 100644 index 794461ac53..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_ender_eye.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_eye.png b/mods/ITEMS/mcl_end/textures/mcl_end_endframe_eye.png deleted file mode 100644 index c1d3a2bb62..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_eye.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_side.png b/mods/ITEMS/mcl_end/textures/mcl_end_endframe_side.png deleted file mode 100644 index a2370ecefe..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_top.png b/mods/ITEMS/mcl_end/textures/mcl_end_endframe_top.png deleted file mode 100644 index ad2b729fff..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_endframe_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_block.png b/mods/ITEMS/mcl_end/textures/mcl_end_purpur_block.png deleted file mode 100644 index 56889ffb28..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar.png b/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar.png deleted file mode 100644 index 4b7efbd084..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar.png and /dev/null differ diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar_top.png b/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar_top.png deleted file mode 100644 index 752e77bc1c..0000000000 Binary files a/mods/ITEMS/mcl_end/textures/mcl_end_purpur_pillar_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/API.md b/mods/ITEMS/mcl_fences/API.md deleted file mode 100644 index 39ba314f2d..0000000000 --- a/mods/ITEMS/mcl_fences/API.md +++ /dev/null @@ -1,71 +0,0 @@ -# API for adding MineClone 2 fences -This API allows you to add fences and fence gates. -The recommended function is `mcl_fences.register_fence_and_fence_gate`. - -## ` mcl_fences.register_fence = function(id, fence_name, texture, groups, connects_to, sounds)` -Adds a fence without crafting recipe. A single node is created. - -### Parameter -* `id`: A part of the itemstring of the node to create. The node name will be “`:`” -* `fence_name`: User-visible name (`description`) -* `texture`: Texture to apply on the fence (all sides) -* `groups`: Table of groups to which the fence belongs to -* `hardness`: Hardness (if unsure, pick the hardness of the material node) -* `blast_resistance`: Blast resistance (if unsure, pick the blast resistance of the material node) -* `connects_to`: Table of nodes (itemstrings) to which the fence will connect to. Use `group:` for all members of the group `` -* `sounds`: Node sound table for the fence - -### Return value -The full itemstring of the new fence node. - -Notes: Fences will always have the group `fence=1`. They will always connect to solid nodes (group `solid=1`). - -## `mcl_fences.register_fence_gate = function(id, fence_gate_name, texture, groups, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close)` -Adds a fence gate without crafting recipe. This will create 2 nodes. - -### Parameters -* `id`: A part of the itemstring of the nodes to create. The node names will be “`:_gate`” and “`:_gate_open`” -* `fence_gate_name`: User-visible name (`description`) -* `texture`: Texture to apply on the fence gate (all sides) -* `groups`: Table of groups to which the fence gate belongs to -* `hardness`: Hardness (if unsure, pick the hardness of the material node) -* `blast_resistance`: Blast resistance (if unsure, pick the blast resistance of the material node) -* `sounds`: Node sound table for the fence gate -* `sound_open`: Sound to play when opening fence gate (optional, default is wooden sound) -* `sound_close`: Sound to play when closing fence gate (optional, default is wooden sound) -* `sound_gain_open`: Gain (0.0-1.0) of the opening fence gate sound (optional, default is 0.3) -* `sound_gain_close`: Gain (0.0-1.0) of the closing fence gate sound (optional, default is 0.3) - -Notes: Fence gates will always have the group `fence_gate=1`. The open fence gate will always have the group `not_in_creative_inventory=1`. - -### Return value -This function returns 2 values, in the following order: - -1. Itemstring of the closed fence gate -2. Itemstring of the open fence gate - -## `mcl_fences.register_fence_and_fence_gate = function(id, fence_name, fence_gate_name, texture, groups, connects_to, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close)` -Registers a fence and fence gate. This is basically a combination of the two functions above. This is the recommended way to add a fence / fence gate pair. -This will register 3 nodes in total without crafting recipes. - -* `id`: A part of the itemstring of the nodes to create. -* `fence_name`: User-visible name (`description`) of the fence -* `fence_gate_name`: User-visible name (`description`) of the fence gate -* `texture`: Texture to apply on the fence and fence gate (all sides) -* `groups`: Table of groups to which the fence and fence gate belong to -* `hardness`: Hardness (if unsure, pick the hardness of the material node) -* `blast_resistance`: Blast resistance (if unsure, pick the blast resistance of the material node) -* `connects_to`: Table of nodes (itemstrings) to which the fence will connect to. Use `group:` for all members of the group `` -* `sounds`: Node sound table for the fence and the fence gate -* `sound_open`: Sound to play when opening fence gate (optional, default is wooden sound) -* `sound_close`: Sound to play when closing fence gate (optional, default is wooden sound) -* `sound_gain_open`: Gain (0.0-1.0) of the opening fence gate sound (optional, default is 0.3) -* `sound_gain_close`: Gain (0.0-1.0) of the closing fence gate sound (optional, default is 0.3) - -### Return value -This function returns 3 values, in this order: - -1. Itemstring of the fence -2. Itemstring of the closed fence gate -3. Itemstring of the open fence gate - diff --git a/mods/ITEMS/mcl_fences/README.txt b/mods/ITEMS/mcl_fences/README.txt deleted file mode 100644 index 91d5902faa..0000000000 --- a/mods/ITEMS/mcl_fences/README.txt +++ /dev/null @@ -1,22 +0,0 @@ -This mod adds fences and fence gates. - -License of source code and textures: ------------------------------------- -Written 2013 by BlockMen - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - - -License and source of sounds: ------------------------------ -doors_fencegate_open.ogg: - http://www.freesound.org/people/mhtaylor67/sounds/126041/ - (CC0 1.0) -doors_fencegate_close.ogg: - http://www.freesound.org/people/BarkersPinhead/sounds/274807/ - (CC-BY-3.0) - http://www.freesound.org/people/rivernile7/sounds/249573/ - (CC-BY-3.0) - - diff --git a/mods/ITEMS/mcl_fences/init.lua b/mods/ITEMS/mcl_fences/init.lua deleted file mode 100644 index b14d103d2f..0000000000 --- a/mods/ITEMS/mcl_fences/init.lua +++ /dev/null @@ -1,306 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Node box -local p = {-2/16, -0.5, -2/16, 2/16, 0.5, 2/16} -local x1 = {-0.5, 4/16, -1/16, -2/16, 7/16, 1/16} --oben(quer) -x -local x12 = {-0.5, -2/16, -1/16, -2/16, 1/16, 1/16} --unten(quer) -x -local x2 = {2/16, 4/16, -1/16, 0.5, 7/16, 1/16} --oben(quer) x -local x22 = {2/16, -2/16, -1/16, 0.5, 1/16, 1/16} --unten(quer) x -local z1 = {-1/16, 4/16, -0.5, 1/16, 7/16, -2/16} --oben(quer) -z -local z12 = {-1/16, -2/16, -0.5, 1/16, 1/16, -2/16} --unten(quer) -z -local z2 = {-1/16, 4/16, 2/16, 1/16, 7/16, 0.5} --oben(quer) z -local z22 = {-1/16, -2/16, 2/16, 1/16, 1/16, 0.5} --unten(quer) z - --- Collision box -local cp = {-2/16, -0.5, -2/16, 2/16, 1.01, 2/16} -local cx1 = {-0.5, -0.5, -2/16, -2/16, 1.01, 2/16} --unten(quer) -x -local cx2 = {2/16, -0.5, -2/16, 0.5, 1.01, 2/16} --unten(quer) x -local cz1 = {-2/16, -0.5, -0.5, 2/16, 1.01, -2/16} --unten(quer) -z -local cz2 = {-2/16, -0.5, 2/16, 2/16, 1.01, 0.5} --unten(quer) z - -mcl_fences = {} - -function mcl_fences.register_fence(id, fence_name, texture, groups, hardness, blast_resistance, connects_to, sounds) - local cgroups = table.copy(groups) - if cgroups == nil then cgroups = {} end - cgroups.fence = 1 - cgroups.deco_block = 1 - if connects_to == nil then - connects_to = {} - else - connects_to = table.copy(connects_to) - end - local fence_id = minetest.get_current_modname()..":"..id - table.insert(connects_to, "group:solid") - table.insert(connects_to, "group:fence_gate") - table.insert(connects_to, fence_id) - minetest.register_node(fence_id, { - description = fence_name, - _doc_items_longdesc = S("Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump."), - tiles = {texture}, - inventory_image = "mcl_fences_fence_mask.png^" .. texture .. "^mcl_fences_fence_mask.png^[makealpha:255,126,126", - wield_image = "mcl_fences_fence_mask.png^" .. texture .. "^mcl_fences_fence_mask.png^[makealpha:255,126,126", - paramtype = "light", - is_ground_content = false, - groups = cgroups, - stack_max = 64, - sunlight_propagates = true, - drawtype = "nodebox", - connect_sides = { "front", "back", "left", "right" }, - connects_to = connects_to, - node_box = { - type = "connected", - fixed = {p}, - connect_front = {z1,z12}, - connect_back = {z2,z22,}, - connect_left = {x1,x12}, - connect_right = {x2,x22}, - }, - collision_box = { - type = "connected", - fixed = {cp}, - connect_front = {cz1}, - connect_back = {cz2,}, - connect_left = {cx1}, - connect_right = {cx2}, - }, - sounds = sounds, - _mcl_blast_resistance = blast_resistance, - _mcl_hardness = hardness, - }) - - return fence_id -end - -function mcl_fences.register_fence_gate(id, fence_gate_name, texture, groups, hardness, blast_resistance, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close) - local meta2 - local state2 = 0 - - local function update_gate(pos, node) - minetest.set_node(pos, node) - end - - local gate_id = minetest.get_current_modname()..":"..id.."_gate" - local open_gate_id = gate_id .. "_open" - if not sound_open then - sound_open = "doors_fencegate_open" - end - if not sound_close then - sound_close = "doors_fencegate_close" - end - if not sound_gain_open then - sound_gain_open = 0.3 - end - if not sound_gain_close then - sound_gain_close = 0.3 - end - local function punch_gate(pos, node) - meta2 = minetest.get_meta(pos) - state2 = meta2:get_int("state") - local tmp_node2 - if state2 == 1 then - state2 = 0 - minetest.sound_play(sound_close, {gain = sound_gain_close, max_hear_distance = 10, pos = pos}, true) - tmp_node2 = {name=gate_id, param1=node.param1, param2=node.param2} - else - state2 = 1 - minetest.sound_play(sound_open, {gain = sound_gain_open, max_hear_distance = 10, pos = pos}, true) - tmp_node2 = {name=open_gate_id, param1=node.param1, param2=node.param2} - end - update_gate(pos, tmp_node2) - meta2:set_int("state", state2) - end - - local on_rotate - if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple - end - - local cgroups = table.copy(groups) - if cgroups == nil then cgroups = {} end - cgroups.fence_gate = 1 - cgroups.deco_block = 1 - - cgroups.mesecon_ignore_opaque_dig = 1 - cgroups.mesecon_effector_on = 1 - cgroups.fence_gate = 1 - minetest.register_node(open_gate_id, { - tiles = {texture}, - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - sunlight_propagates = true, - walkable = false, - groups = cgroups, - drop = gate_id, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.5, -3/16, -1/16, -6/16, 0.5, 1/16}, --links abschluss - {6/16, -3/16, -1/16, 0.5, 0.5, 1/16}, --rechts abschluss - {-0.5, 4/16, 1/16, -6/16, 7/16, 6/16}, --oben-links(quer) x - {-0.5, -2/16, 1/16, -6/16, 1/16, 6/16}, --unten-links(quer) x - {6/16, 4/16, 1/16, 0.5, 7/16, 0.5}, --oben-rechts(quer) x - {6/16, -2/16, 1/16, 0.5, 1/16, 0.5}, --unten-rechts(quer) x - {-0.5, -2/16, 6/16, -6/16, 7/16, 0.5}, --mitte links - {6/16, 1/16, 0.5, 0.5, 4/16, 6/16}, --mitte rechts - } - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -3/16, -1/16, 0.5, 0.5, 1/16}, --gate - } - }, - on_rightclick = function(pos, node, clicker) - punch_gate(pos, node) - end, - mesecons = {effector = { - action_off = (function(pos, node) - punch_gate(pos, node) - end), - }}, - on_rotate = on_rotate, - sounds = sounds, - _mcl_blast_resistance = blast_resistance, - _mcl_hardness = hardness, - }) - - local cgroups_closed = table.copy(cgroups) - cgroups_closed.mesecon_effector_on = nil - cgroups_closed.mesecon_effector_off = nil - minetest.register_node(gate_id, { - description = fence_gate_name, - _tt_help = S("Openable by players and redstone power"), - _doc_items_longdesc = S("Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates."), - _doc_items_usagehelp = S("Right-click the fence gate to open or close it."), - tiles = {texture}, - inventory_image = "mcl_fences_fence_gate_mask.png^" .. texture .. "^mcl_fences_fence_gate_mask.png^[makealpha:255,126,126", - wield_image = "mcl_fences_fence_gate_mask.png^" .. texture .. "^mcl_fences_fence_gate_mask.png^[makealpha:255,126,126", - paramtype = "light", - is_ground_content = false, - stack_max = 64, - paramtype2 = "facedir", - sunlight_propagates = true, - walkable = true, - groups = cgroups_closed, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.5, -3/16, -1/16, -6/16, 0.5, 1/16}, --links abschluss - {6/16, -3/16, -1/16, 0.5, 0.5, 1/16}, --rechts abschluss - {-2/16, -2/16, -1/16, 0, 7/16, 1/16}, --mitte links - {0, -2/16, -1/16, 2/16, 7/16, 1/16}, --mitte rechts - {-0.5, 4/16, -1/16, -2/16, 7/16, 1/16}, --oben(quer) -z - {-0.5, -2/16, -1/16, -2/16, 1/16, 1/16}, --unten(quer) -z - {2/16, 4/16, -1/16, 0.5, 7/16, 1/16}, --oben(quer) z - {2/16, -2/16, -1/16, 0.5, 1/16, 1/16}, --unten(quer) z - } - }, - collision_box = { - type = "fixed", - fixed = { - {-0.5, -3/16, -2/16, 0.5, 1, 2/16}, --gate - } - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -3/16, -1/16, 0.5, 0.5, 1/16}, --gate - } - }, - on_construct = function(pos) - meta2 = minetest.get_meta(pos) - meta2:set_int("state", 0) - state2 = 0 - end, - mesecons = {effector = { - action_on = (function(pos, node) - punch_gate(pos, node) - end), - }}, - on_rotate = on_rotate, - on_rightclick = function(pos, node, clicker) - punch_gate(pos, node) - end, - sounds = sounds, - _mcl_blast_resistance = blast_resistance, - _mcl_hardness = hardness, - }) - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", gate_id, "nodes", open_gate_id) - end - - return gate_id, open_gate_id -end - -function mcl_fences.register_fence_and_fence_gate(id, fence_name, fence_gate_name, texture_fence, groups, hardness, blast_resistance, connects_to, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close, texture_fence_gate) - if texture_fence_gate == nil then - texture_fence_gate = texture_fence - end - local fence_id = mcl_fences.register_fence(id, fence_name, texture_fence, groups, hardness, blast_resistance, connects_to, sounds) - local gate_id, open_gate_id = mcl_fences.register_fence_gate(id, fence_gate_name, texture_fence_gate, groups, hardness, blast_resistance, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close) - return fence_id, gate_id, open_gate_id -end - -local wood_groups = {handy=1,axey=1, flammable=2,fence_wood=1, fire_encouragement=5, fire_flammability=20} -local wood_connect = {"group:fence_wood"} -local wood_sounds = mcl_sounds.node_sound_wood_defaults() - -local woods = { - {"", S("Oak Fence"), S("Oak Fence Gate"), "mcl_fences_fence_oak.png", "mcl_fences_fence_gate_oak.png", "mcl_core:wood"}, - {"spruce", S("Spruce Fence"), S("Spruce Fence Gate"), "mcl_fences_fence_spruce.png", "mcl_fences_fence_gate_spruce.png", "mcl_core:sprucewood"}, - {"birch", S("Birch Fence"), S("Birch Fence Gate"), "mcl_fences_fence_birch.png", "mcl_fences_fence_gate_birch.png", "mcl_core:birchwood"}, - {"jungle", S("Jungle Fence"), S("Jungle Fence Gate"), "mcl_fences_fence_jungle.png", "mcl_fences_fence_gate_jungle.png", "mcl_core:junglewood"}, - {"dark_oak", S("Dark Oak Fence"), S("Dark Oak Fence Gate"), "mcl_fences_fence_big_oak.png", "mcl_fences_fence_gate_big_oak.png", "mcl_core:darkwood"}, - {"acacia", S("Acacia Fence"), S("Acacia Fence Gate"), "mcl_fences_fence_acacia.png", "mcl_fences_fence_gate_acacia.png", "mcl_core:acaciawood"}, -} - -for w=1, #woods do - local wood = woods[w] - local id, id_gate - if wood[1] == "" then - id = "fence" - id_gate = "fence_gate" - else - id = wood[1].."_fence" - id_gate = wood[1].."_fence_gate" - end - mcl_fences.register_fence_and_fence_gate(id, wood[2], wood[3], wood[4], wood_groups, 2, 15, wood_connect, wood_sounds) - - minetest.register_craft({ - output = "mcl_fences:"..id.." 3", - recipe = { - {wood[6], "mcl_core:stick", wood[6]}, - {wood[6], "mcl_core:stick", wood[6]}, - } - }) - minetest.register_craft({ - output = "mcl_fences:"..id_gate, - recipe = { - {"mcl_core:stick", wood[6], "mcl_core:stick"}, - {"mcl_core:stick", wood[6], "mcl_core:stick"}, - } - }) -end - - --- Nether Brick Fence (without fence gate!) -mcl_fences.register_fence("nether_brick_fence", S("Nether Brick Fence"), "mcl_fences_fence_nether_brick.png", {pickaxey=1, deco_block=1, fence_nether_brick=1}, 2, 30, {"group:fence_nether_brick"}, mcl_sounds.node_sound_stone_defaults()) - -minetest.register_craft({ - output = "mcl_fences:nether_brick_fence 6", - recipe = { - {"mcl_nether:nether_brick", "mcl_nether:netherbrick", "mcl_nether:nether_brick"}, - {"mcl_nether:nether_brick", "mcl_nether:netherbrick", "mcl_nether:nether_brick"}, - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:fence_wood", - burntime = 15, -}) diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr deleted file mode 100644 index e4f2a5fa62..0000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Zäune sind Gebäude, die den Weg blockieren. Sie verbinden sich gegenseitig und anderen festen Blöcken. Man kann sie nicht mit normalen Sprüngen überspringen. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Zauntore können geöffnet und geschlossen werden und können nicht übersprungen werden. Zäune lassen sich gut mit Zauntoren verbinden. -Right-click the fence gate to open or close it.=Rechtsklicken Sie auf ein Zauntor, um es zu öffnen oder zu schließen. -Oak Fence=Eichenzaun -Oak Fence Gate=Eichenzauntor -Spruce Fence=Fichtenzaun -Spruce Fence Gate=Fichtenzauntor -Birch Fence=Birkenzaun -Birch Fence Gate=Birkenzauntor -Jungle Fence=Dschungelzaun -Jungle Fence Gate=Dschungelzauntor -Dark Oak Fence=Schwarzeichenzaun -Dark Oak Fence Gate=Schwarzeichenzauntor -Acacia Fence=Akazienzaun -Acacia Fence Gate=Akazienzauntor -Nether Brick Fence=Netherziegelzaun -Openable by players and redstone power=Zu öffnen von Spielern und Redstoneenergie diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.es.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.es.tr deleted file mode 100644 index 1e8c3798a6..0000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.es.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Las cercas son estructuras que bloquean el camino. Las cercas se conectarán entre sí y con los bloques sólidos. No se pueden saltar con un simple salto. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Las puertas de valla se pueden abrir o cerrar y no se pueden saltar. Las cercas se conectarán muy bien a las puertas de la cerca. -Right-click the fence gate to open or close it.=Haga clic derecho en la puerta de la cerca para abrirla o cerrarla. -Oak Fence=Valla de roble -Oak Fence Gate=Puerta de roble -Spruce Fence=Valla de abeto -Spruce Fence Gate=Puerta de abeto -Birch Fence=Valla de abedul -Birch Fence Gate=Puerta de abedul -Jungle Fence=Valla de la selva -Jungle Fence Gate=Puerta de valla de la selva -Dark Oak Fence=Valla de roble oscuro -Dark Oak Fence Gate=Puerta de roble oscuro -Acacia Fence=Valla de acacia -Acacia Fence Gate=Puerta de acacia -Nether Brick Fence=Valla de ladrillo abisal \ No newline at end of file diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.fr.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.fr.tr deleted file mode 100644 index ccfb86d95b..0000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.fr.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Les barrières sont des structures qui bloquent le chemin. Les barrières se connecteront les unes aux autres et aux blocs solides. Ils ne peuvent pas être sautés par un simple saut. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Les portillions peuvent être ouvertes ou fermées et ne peuvent pas être sautées. Les barrières se connecteront bien aux portillions. -Right-click the fence gate to open or close it.=Cliquez avec le bouton droit sur le portillion pour l'ouvrir ou la fermer. -Oak Fence=Barrière en bois de Chêne -Oak Fence Gate=Portillion en bois de Chêne -Spruce Fence=Barrière en bois de Sapin -Spruce Fence Gate=Portillion en bois de Sapin -Birch Fence=Barrière en bois de Bouleau -Birch Fence Gate=Portillion en bois de Bouleau -Jungle Fence=Barrière en bois d'Acajou -Jungle Fence Gate=Portillion en bois d'Acajou -Dark Oak Fence=Barrière en bois de Chêne Noir -Dark Oak Fence Gate=Portillion en bois de Chêne Noir -Acacia Fence=Barrière en bois d'Acacia -Acacia Fence Gate=Portillion en bois d'Acacia -Nether Brick Fence=Barrière en Brique du Nether -Openable by players and redstone power=Ouvrable par les joueurs et la puissance redstone diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr deleted file mode 100644 index 794986b584..0000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Płoty są strukturami blokującymi przejścia. Nie połączą się one z innymi blokami. Nie można też nad nimi przeskoczyć pojedynczym skokiem. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Furtki mogą być otwierane i zamykane, ale nie można ich przeskoczyć. Łączą się one ładnie z płotem. -Right-click the fence gate to open or close it.=Naciśnij prawy przycisk myszy by otworzyć lub zamknąć furtkę. -Oak Fence=Dębowy płot -Oak Fence Gate=Dębowa furtka -Spruce Fence=Świerkowy płot -Spruce Fence Gate=Świerkowa furtka -Birch Fence=Brzozowy płot -Birch Fence Gate=Brzozowa furtka -Jungle Fence=Tropikalny płot -Jungle Fence Gate=Tropikalna furtka -Dark Oak Fence=Ciemno-dębowy płot -Dark Oak Fence Gate=Ciemno-dębowa furtka -Acacia Fence=Akacjowy płot -Acacia Fence Gate=Akacjowa furtka -Nether Brick Fence=Płot z Netherowych cegieł -Openable by players and redstone power=Może być otworzony przez graczy i energię czerwienitu - diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.ru.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.ru.tr deleted file mode 100644 index bafd9ba830..0000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.ru.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Заборы это сооружения, преграждающие путь. Блоки заборов соединяются между собой и прикрепляются к твёрдым блокам. Через них нельзя перепрыгивать одиночным прыжком. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Калитки могут быть открытыми и закрытыми. Их нельзя перепрыгивать. -Right-click the fence gate to open or close it.=Кликните правой по калитке, чтобы открыть или закрыть её. -Oak Fence=Дубовый забор -Oak Fence Gate=Дубовая калитка -Spruce Fence=Еловый забор -Spruce Fence Gate=Еловая калитка -Birch Fence=Берёзовый забор -Birch Fence Gate=Берёзовая калитка -Jungle Fence=Забор из дерева джунглей -Jungle Fence Gate=Калитка из дерева джунглей -Dark Oak Fence=Забор из тёмного дуба -Dark Oak Fence Gate=Калитка из тёмного дуба -Acacia Fence=Забор из акации -Acacia Fence Gate=Калитка из акации -Nether Brick Fence=Забор из адского кирпича -Openable by players and redstone power=Открываются игроками и сигналами редстоуна diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.zh_TW.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.zh_TW.tr deleted file mode 100644 index 5f360245c5..0000000000 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.zh_TW.tr +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=柵欄是阻擋道路的結構。柵欄會連接到彼此和固體方塊。它們不能用簡單的跳躍方式跳過去。 -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=柵欄門可以打開或關閉,並且不能跳過。 柵欄將很好地連接到柵欄門。 -Right-click the fence gate to open or close it.=右鍵單擊柵欄門以將其打開或關閉。 -Oak Fence=橡木柵欄 -Oak Fence Gate=橡木柵欄門 -Spruce Fence=杉木柵欄 -Spruce Fence Gate=杉木柵欄門 -Birch Fence=樺木柵欄 -Birch Fence Gate=樺木柵欄門 -Jungle Fence=叢林木柵欄 -Jungle Fence Gate=叢林木柵欄門 -Dark Oak Fence=黑橡木柵欄 -Dark Oak Fence Gate=黑橡木柵欄門 -Acacia Fence=相思木柵欄 -Acacia Fence Gate=相思木柵欄門 -Nether Brick Fence=地獄磚柵欄 -Openable by players and redstone power=可被紅石或玩家打開 diff --git a/mods/ITEMS/mcl_fences/locale/template.txt b/mods/ITEMS/mcl_fences/locale/template.txt deleted file mode 100644 index a4cd1cbe77..0000000000 --- a/mods/ITEMS/mcl_fences/locale/template.txt +++ /dev/null @@ -1,18 +0,0 @@ -# textdomain: mcl_fences -Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.= -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.= -Right-click the fence gate to open or close it.= -Oak Fence= -Oak Fence Gate= -Spruce Fence= -Spruce Fence Gate= -Birch Fence= -Birch Fence Gate= -Jungle Fence= -Jungle Fence Gate= -Dark Oak Fence= -Dark Oak Fence Gate= -Acacia Fence= -Acacia Fence Gate= -Nether Brick Fence= -Openable by players and redstone power= diff --git a/mods/ITEMS/mcl_fences/mod.conf b/mods/ITEMS/mcl_fences/mod.conf deleted file mode 100644 index 8b20dd169a..0000000000 --- a/mods/ITEMS/mcl_fences/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_fences -depends = mcl_core, mcl_sounds -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_fences/sounds/doors_fencegate_close.ogg b/mods/ITEMS/mcl_fences/sounds/doors_fencegate_close.ogg deleted file mode 100644 index d42590ffb1..0000000000 Binary files a/mods/ITEMS/mcl_fences/sounds/doors_fencegate_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/sounds/doors_fencegate_open.ogg b/mods/ITEMS/mcl_fences/sounds/doors_fencegate_open.ogg deleted file mode 100644 index f6dfd1d977..0000000000 Binary files a/mods/ITEMS/mcl_fences/sounds/doors_fencegate_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_acacia.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_acacia.png deleted file mode 100644 index 85dae567fe..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_acacia.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_big_oak.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_big_oak.png deleted file mode 100644 index de8648e8e6..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_big_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_birch.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_birch.png deleted file mode 100644 index 96121e1281..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_acacia.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_acacia.png deleted file mode 100644 index e18dc9cc2f..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_acacia.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_big_oak.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_big_oak.png deleted file mode 100644 index f7c0eccd33..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_big_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_birch.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_birch.png deleted file mode 100644 index 7d4efc7caa..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_birch.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_jungle.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_jungle.png deleted file mode 100644 index 5ce39690c7..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_jungle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_mask.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_mask.png deleted file mode 100644 index eeefdf7045..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_mask.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_oak.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_oak.png deleted file mode 100644 index 348c8b24f6..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_spruce.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_spruce.png deleted file mode 100644 index 5c8a0bb579..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_gate_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_jungle.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_jungle.png deleted file mode 100644 index dbc5684ac7..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_jungle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_mask.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_mask.png deleted file mode 100644 index dfa9b34d92..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_mask.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_nether_brick.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_nether_brick.png deleted file mode 100644 index f816090322..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_oak.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_oak.png deleted file mode 100644 index 6c48e53e81..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_oak.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_spruce.png b/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_spruce.png deleted file mode 100644 index 2ee52abf64..0000000000 Binary files a/mods/ITEMS/mcl_fences/textures/mcl_fences_fence_spruce.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/README.txt b/mods/ITEMS/mcl_fire/README.txt deleted file mode 100644 index af46528a53..0000000000 --- a/mods/ITEMS/mcl_fire/README.txt +++ /dev/null @@ -1,34 +0,0 @@ -mcl_fire: Fire mod for MineClone 2 -Based on fire from Minetest Game -================================== - -License of source code: ------------------------ -Copyright (C) 2012 Perttu Ahola (celeron55) - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -http://www.gnu.org/licenses/lgpl-2.1.html - -License of media (sounds) --------------------------------------- -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -Authors of media files ------------------------ -Muadtralk (CC BY-SA 3.0) - fire_basic_flame_animated.png - -Dynamicell (CC BY 3.0) -http://www.freesound.org/people/Dynamicell/sounds/17548/ - fire_fire.*.ogg - -Benboncan (CC BY 3.0) -https://www.freesound.org/people/Benboncan/sounds/66457/ - fire_flint_and_steel.ogg - -Other sound files by Perttu Ahola (celeron55) (CC BY-SA 3.0). diff --git a/mods/ITEMS/mcl_fire/fire_charge.lua b/mods/ITEMS/mcl_fire/fire_charge.lua deleted file mode 100644 index 4d18e44edc..0000000000 --- a/mods/ITEMS/mcl_fire/fire_charge.lua +++ /dev/null @@ -1,64 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local get_node = minetest.get_node -local add_entity = minetest.add_entity - --- Fire Charge -minetest.register_craftitem("mcl_fire:fire_charge", { - description = S("Fire Charge"), - _tt_help = S("Dispenser projectile").."\n"..S("Starts fires and ignites blocks"), - _doc_items_longdesc = S("Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly."), - _doc_items_usagehelp = S("Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up."), - inventory_image = "mcl_fire_fire_charge.png", - liquids_pointable = false, - stack_max = 64, - on_place = function(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) - if new_stack then - return new_stack - end - - -- Check protection - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - - -- Ignite/light fire - local node = get_node(pointed_thing.under) - if pointed_thing.type == "node" then - local nodedef = minetest.registered_nodes[node.name] - if nodedef and nodedef._on_ignite then - local overwrite = nodedef._on_ignite(user, pointed_thing) - if not overwrite then - mcl_fire.set_fire(pointed_thing, user, false) - end - else - mcl_fire.set_fire(pointed_thing, user, false) - end - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item() - end - end - return itemstack - end, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Throw fire charge - local shootpos = vector.add(pos, vector.multiply(dropdir, 0.51)) - local fireball = add_entity(shootpos, "mobs_mc:blaze_fireball") - local ent = fireball:get_luaentity() - ent._shot_from_dispenser = true - local v = ent.velocity or 1 - fireball:set_velocity(vector.multiply(dropdir, v)) - ent.switch = 1 - stack:take_item() - end, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_fire:fire_charge 3", - recipe = { "mcl_mobitems:blaze_powder", "group:coal", "mcl_mobitems:gunpowder" }, -}) diff --git a/mods/ITEMS/mcl_fire/flint_and_steel.lua b/mods/ITEMS/mcl_fire/flint_and_steel.lua deleted file mode 100644 index 39a4ce8823..0000000000 --- a/mods/ITEMS/mcl_fire/flint_and_steel.lua +++ /dev/null @@ -1,80 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local get_node = minetest.get_node -local add_node = minetest.add_node - --- Flint and Steel -minetest.register_tool("mcl_fire:flint_and_steel", { - description = S("Flint and Steel"), - _tt_help = S("Starts fires and ignites blocks"), - _doc_items_longdesc = S("Flint and steel is a tool to start fires and ignite blocks."), - _doc_items_usagehelp = S("Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited."), - inventory_image = "mcl_fire_flint_and_steel.png", - liquids_pointable = false, - stack_max = 1, - groups = { tool = 1, }, - on_place = function(itemstack, user, pointed_thing) - -- Use pointed node's on_rightclick function first, if present - local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) - if new_stack then - return new_stack - end - -- Check protection - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - - local idef = itemstack:get_definition() - minetest.sound_play( - "fire_flint_and_steel", - {pos = pointed_thing.above, gain = 0.5, max_hear_distance = 8}, - true - ) - local used = false - if pointed_thing.type == "node" then - local nodedef = minetest.registered_nodes[get_node(pointed_thing.under).name] - if nodedef and nodedef._on_ignite then - local overwrite = nodedef._on_ignite(user, pointed_thing) - if not overwrite then - mcl_fire.set_fire(pointed_thing, user, false) - end - else - mcl_fire.set_fire(pointed_thing, user, false) - end - used = true - end - if itemstack:get_count() == 0 and idef.sound and idef.sound.breaks then - minetest.sound_play(idef.sound.breaks, {pos=user:get_pos(), gain=0.5}, true) - end - if (not minetest.is_creative_enabled(user:get_player_name())) and used == true then - itemstack:add_wear(65535/65) -- 65 uses - end - return itemstack - end, - _dispense_into_walkable = true, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Ignite air - if dropnode.name == "air" then - add_node(droppos, {name="mcl_fire:fire"}) - if not minetest.is_creative_enabled("") then - stack:add_wear(65535/65) -- 65 uses - end - -- Ignite TNT - elseif dropnode.name == "mcl_tnt:tnt" then - tnt.ignite(droppos) - if not minetest.is_creative_enabled("") then - stack:add_wear(65535/65) -- 65 uses - end - end - return stack - end, - sound = { breaks = "default_tool_breaks" }, - _mcl_uses = 65, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_fire:flint_and_steel", - recipe = { "mcl_core:iron_ingot", "mcl_core:flint"}, -}) diff --git a/mods/ITEMS/mcl_fire/init.lua b/mods/ITEMS/mcl_fire/init.lua deleted file mode 100644 index 79b46a7013..0000000000 --- a/mods/ITEMS/mcl_fire/init.lua +++ /dev/null @@ -1,480 +0,0 @@ --- Global namespace for functions - -mcl_fire = {} - -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) - -local has_mcl_portals = minetest.get_modpath("mcl_portals") - -local set_node = minetest.set_node -local get_node = minetest.get_node -local add_node = minetest.add_node -local remove_node = minetest.remove_node -local swap_node = minetest.swap_node -local get_node_or_nil = minetest.get_node_or_nil - -local find_nodes_in_area = minetest.find_nodes_in_area -local find_node_near = minetest.find_node_near -local get_item_group = minetest.get_item_group - -local get_connected_players = minetest.get_connected_players - -local vector = vector -local math = math - -local adjacents = { - { x =-1, y = 0, z = 0 }, - { x = 1, y = 0, z = 0 }, - { x = 0, y = 1, z = 0 }, - { x = 0, y =-1, z = 0 }, - { x = 0, y = 0, z =-1 }, - { x = 0, y = 0, z = 1 }, -} - -local function shuffle_table(t) - for i = #t, 1, -1 do - local r = math.random(i) - t[i], t[r] = t[r], t[i] - end -end -shuffle_table(adjacents) - -local function has_flammable(pos) - for k,v in pairs(adjacents) do - local p=vector.add(pos,v) - local n=minetest.get_node_or_nil(p) - if n and minetest.get_item_group(n.name, "flammable") ~= 0 then - return p - end - end -end - -local smoke_pdef = { - amount = 0.009, - maxexptime = 4.0, - minvel = { x = -0.1, y = 0.3, z = -0.1 }, - maxvel = { x = 0.1, y = 1.6, z = 0.1 }, - minsize = 4.0, - maxsize = 4.5, - minrelpos = { x = -0.45, y = -0.45, z = -0.45 }, - maxrelpos = { x = 0.45, y = 0.45, z = 0.45 }, -} - --- --- Items --- - --- Flame nodes - --- Fire settings - --- When enabled, fire destroys other blocks. -local fire_enabled = minetest.settings:get_bool("enable_fire", true) - --- Enable sound -local flame_sound = minetest.settings:get_bool("flame_sound", true) - --- Help texts -local fire_help, eternal_fire_help -if fire_enabled then - fire_help = S("Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.") -else - fire_help = S("Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.") -end - -if fire_enabled then - eternal_fire_help = S("Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.") -else - eternal_fire_help = S("Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.") -end - -local function spawn_fire(pos, age) - set_node(pos, {name="mcl_fire:fire", param2 = age}) - minetest.check_single_for_falling({x=pos.x, y=pos.y+1, z=pos.z}) -end - -minetest.register_node("mcl_fire:fire", { - description = S("Fire"), - _doc_items_longdesc = fire_help, - drawtype = "firelike", - tiles = { - { - name = "fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, - }, - inventory_image = "fire_basic_flame.png", - paramtype = "light", - light_source = minetest.LIGHT_MAX, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - damage_per_second = 1, - groups = {fire = 1, dig_immediate = 3, not_in_creative_inventory = 1, dig_by_piston=1, destroys_items=1, set_on_fire=8}, - floodable = true, - on_flood = function(pos, oldnode, newnode) - if get_item_group(newnode.name, "water") ~= 0 then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - end - end, - drop = "", - sounds = {}, - -- Turn into eternal fire on special blocks, light Nether portal (if possible), start burning timer - on_construct = function(pos) - local bpos = {x=pos.x, y=pos.y-1, z=pos.z} - local under = get_node(bpos).name - - local dim = mcl_worlds.pos_to_dimension(bpos) - if under == "mcl_nether:magma" or under == "mcl_nether:netherrack" or (under == "mcl_core:bedrock" and dim == "end") then - swap_node(pos, {name = "mcl_fire:eternal_fire"}) - end - - if has_mcl_portals then - mcl_portals.light_nether_portal(pos) - end - - mcl_particles.spawn_smoke(pos, "fire", smoke_pdef) - end, - on_destruct = function(pos) - mcl_particles.delete_node_particlespawners(pos) - end, - _mcl_blast_resistance = 0, -}) - -minetest.register_node("mcl_fire:eternal_fire", { - description = S("Eternal Fire"), - _doc_items_longdesc = eternal_fire_help, - drawtype = "firelike", - tiles = { - { - name = "fire_basic_flame_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1 - }, - }, - }, - inventory_image = "fire_basic_flame.png", - paramtype = "light", - light_source = minetest.LIGHT_MAX, - walkable = false, - buildable_to = true, - sunlight_propagates = true, - damage_per_second = 1, - groups = {fire = 1, dig_immediate = 3, not_in_creative_inventory = 1, dig_by_piston = 1, destroys_items = 1, set_on_fire=8}, - floodable = true, - on_flood = function(pos, oldnode, newnode) - if get_item_group(newnode.name, "water") ~= 0 then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - end - end, - -- Start burning timer and light Nether portal (if possible) - on_construct = function(pos) - if has_mcl_portals then --Calling directly minetest.get_modpath consumes 4x more compute time - mcl_portals.light_nether_portal(pos) - end - mcl_particles.spawn_smoke(pos, "fire", smoke_pdef) - end, - on_destruct = function(pos) - mcl_particles.delete_node_particlespawners(pos) - end, - sounds = {}, - drop = "", - _mcl_blast_resistance = 0, -}) - --- --- Sound --- - -if flame_sound then - - local handles = {} - local timer = 0 - - -- Parameters - - local radius = 8 -- Flame node search radius around player - local cycle = 3 -- Cycle time for sound updates - - -- Update sound for player - - function mcl_fire.update_player_sound(player) - local player_name = player:get_player_name() - -- Search for flame nodes in radius around player - local ppos = player:get_pos() - local areamin = vector.subtract(ppos, radius) - local areamax = vector.add(ppos, radius) - local fpos, num = find_nodes_in_area( - areamin, - areamax, - {"mcl_fire:fire", "mcl_fire:eternal_fire"} - ) - -- Total number of flames in radius - local flames = (num["mcl_fire:fire"] or 0) + - (num["mcl_fire:eternal_fire"] or 0) - -- Stop previous sound - if handles[player_name] then - minetest.sound_fade(handles[player_name], -0.4, 0.0) - handles[player_name] = nil - end - -- If flames - if flames > 0 then - -- Find centre of flame positions - local fposmid = fpos[1] - -- If more than 1 flame - if #fpos > 1 then - local fposmin = areamax - local fposmax = areamin - for i = 1, #fpos do - local fposi = fpos[i] - if fposi.x > fposmax.x then - fposmax.x = fposi.x - end - if fposi.y > fposmax.y then - fposmax.y = fposi.y - end - if fposi.z > fposmax.z then - fposmax.z = fposi.z - end - if fposi.x < fposmin.x then - fposmin.x = fposi.x - end - if fposi.y < fposmin.y then - fposmin.y = fposi.y - end - if fposi.z < fposmin.z then - fposmin.z = fposi.z - end - end - fposmid = vector.divide(vector.add(fposmin, fposmax), 2) - end - -- Play sound - local handle = minetest.sound_play( - "fire_fire", - { - pos = fposmid, - to_player = player_name, - gain = math.min(0.06 * (1 + flames * 0.125), 0.18), - max_hear_distance = 32, - loop = true, -- In case of lag - } - ) - -- Store sound handle for this player - if handle then - handles[player_name] = handle - end - end - end - - -- Cycle for updating players sounds - - minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer < cycle then - return - end - - timer = 0 - local players = get_connected_players() - for n = 1, #players do - mcl_fire.update_player_sound(players[n]) - end - end) - - -- Stop sound and clear handle on player leave - - minetest.register_on_leaveplayer(function(player) - local player_name = player:get_player_name() - if handles[player_name] then - minetest.sound_stop(handles[player_name]) - handles[player_name] = nil - end - end) -end - --- [...]a fire that is not adjacent to any flammable block does not spread, even to another flammable block within the normal range. --- https://minecraft.fandom.com/wiki/Fire#Spread - -local function check_aircube(p1,p2) - local nds=minetest.find_nodes_in_area(p1,p2,{"air"}) - shuffle_table(nds) - for k,v in pairs(nds) do - if has_flammable(v) then return v end - end -end - --- [...] a fire block can turn any air block that is adjacent to a flammable block into a fire block. This can happen at a distance of up to one block downward, one block sideways (including diagonals), and four blocks upward of the original fire block (not the block the fire is on/next to). -local function get_ignitable(pos) - return check_aircube(vector.add(pos,vector.new(-1,-1,-1)),vector.add(pos,vector.new(1,4,1))) -end --- Fire spreads from a still lava block similarly: any air block one above and up to one block sideways (including diagonals) or two above and two blocks sideways (including diagonals) that is adjacent to a flammable block may be turned into a fire block. -local function get_ignitable_by_lava(pos) - return check_aircube(vector.add(pos,vector.new(-1,1,-1)),vector.add(pos,vector.new(1,1,1))) or check_aircube(vector.add(pos,vector.new(-2,2,-2)),vector.add(pos,vector.new(2,2,2))) or nil -end - --- --- ABMs --- - --- Extinguish all flames quickly with water and such - -minetest.register_abm({ - label = "Extinguish fire", - nodenames = {"mcl_fire:fire", "mcl_fire:eternal_fire"}, - neighbors = {"group:puts_out_fire"}, - interval = 3, - chance = 1, - catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - minetest.remove_node(pos) - minetest.sound_play("fire_extinguish_flame", - {pos = pos, max_hear_distance = 16, gain = 0.15}, true) - end, -}) - --- Enable the following ABMs according to 'enable fire' setting -if not fire_enabled then - - -- Occasionally remove fire if fire disabled - -- NOTE: Fire is normally extinguished in timer function - minetest.register_abm({ - label = "Remove disabled fire", - nodenames = {"mcl_fire:fire"}, - interval = 10, - chance = 10, - catch_up = false, - action = minetest.remove_node, - }) - -else -- Fire enabled - - -- Fire Spread - minetest.register_abm({ - label = "Ignite flame", - nodenames ={"mcl_fire:fire","mcl_fire:eternal_fire"}, - interval = 7, - chance = 12, - catch_up = false, - action = function(pos) - local p = get_ignitable(pos) - if p then - spawn_fire(p) - shuffle_table(adjacents) - end - end - }) - - --lava fire spread - minetest.register_abm({ - label = "Ignite fire by lava", - nodenames = {"mcl_core:lava_source","mcl_nether:nether_lava_source"}, - neighbors = {"air","group:flammable"}, - interval = 7, - chance = 3, - catch_up = false, - action = function(pos) - local p=get_ignitable_by_lava(pos) - if p then - spawn_fire(p) - end - end, - }) - - minetest.register_abm({ - label = "Remove fires", - nodenames = {"mcl_fire:fire"}, - interval = 7, - chance = 3, - catch_up = false, - action = function(pos) - local p=has_flammable(pos) - if p then - local n=minetest.get_node_or_nil(p) - if n and minetest.get_item_group(n.name, "flammable") < 1 then - minetest.remove_node(pos) - end - else - minetest.remove_node(pos) - end - end, - }) - - -- Remove flammable nodes around basic flame - minetest.register_abm({ - label = "Remove flammable nodes", - nodenames = {"mcl_fire:fire","mcl_fire:eternal_fire"}, - neighbors = {"group:flammable"}, - interval = 5, - chance = 18, - catch_up = false, - action = function(pos) - local p = has_flammable(pos) - if not p then - return - end - - local nn = minetest.get_node(p).name - local def = minetest.registered_nodes[nn] - local fgroup = minetest.get_item_group(nn, "flammable") - - if def and def._on_burn then - def._on_burn(p) - elseif fgroup ~= -1 then - spawn_fire(p) - minetest.check_for_falling(p) - end - end - }) -end - --- Set pointed_thing on (normal) fire. --- * pointed_thing: Pointed thing to ignite --- * player: Player who sets fire or nil if nobody --- * allow_on_fire: If false, can't ignite fire on fire (default: true) -function mcl_fire.set_fire(pointed_thing, player, allow_on_fire) - local pname - if player == nil then - pname = "" - else - pname = player:get_player_name() - end - local n = get_node(pointed_thing.above) - local nu = get_node(pointed_thing.under) - if allow_on_fire == false and get_item_group(nu.name, "fire") ~= 0 then - return - end - if minetest.is_protected(pointed_thing.above, pname) then - minetest.record_protection_violation(pointed_thing.above, pname) - return - end - if n.name == "air" then - add_node(pointed_thing.above, {name="mcl_fire:fire"}) - end -end - -minetest.register_lbm({ - label = "Smoke particles from fire", - name = "mcl_fire:smoke", - nodenames = {"group:fire"}, - run_at_every_load = true, - action = function(pos, node) - mcl_particles.spawn_smoke(pos, "fire", smoke_pdef) - end, -}) - -minetest.register_alias("mcl_fire:basic_flame", "mcl_fire:fire") -minetest.register_alias("fire:basic_flame", "mcl_fire:fire") -minetest.register_alias("fire:permanent_flame", "mcl_fire:eternal_fire") - -dofile(modpath.."/flint_and_steel.lua") -dofile(modpath.."/fire_charge.lua") diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.de.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.de.tr deleted file mode 100644 index e3c3088043..0000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.de.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=Feuerkugel -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Feuerkugeln sind hauptsächlich Projektile, die von Werfern geworfen werden können, sie werden in einer geraden Linie fliegen und gehen beim Einschlag in Flammen auf. Alternativ können sie benutzt werden, um direkt ein Feuer zu entfachen. -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Legen Sie die Feuerkugel in den Werfer und versorgen Sie ihn mit Redstone-Energie, um sie abzufeuern. Um ein Feuer zu entfachen, platzieren Sie die Feuerkugel auf den Boden, was die Kugel verbraucht. -Flint and Steel=Feuerzeug -Flint and steel is a tool to start fires and ignite blocks.=Ein Feuerzeug ist ein Werkzeug, um Feuer zu entfachen und Blöcke anzuzünden. -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Rechtsklicken Sie auf die Oberfläche eines Blocks, um zu versuchen, ein Feuer auf ihm zu entfachen, oder den Block selbst anzuzünden. Ein paar Blocke reagieren besonders, wenn sie angezündet werden. -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Feuer ist ein schädlicher und destruktiver aber kurzlebiger Block. Es wird sich zu entzündlichen Blöcken ausbreiten und sie zerstören, aber Feuer wird verschwinden, wenn es nichts brennbares mehr gibt. Es wird von Wasser und Regen gelöscht. Feuer kann sicher mit einem Schlag zerstört werden, aber es tut weh, wenn man direkt in ihm steht. Wird ein Feuer über Netherrack oder einem Magmablock entfacht, wird er sich sofort zu einem ewigen Feuer verwandeln. -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Feuer ist ein schädlicher aber nicht-destruktiver kurzlebiger Block. Es wird verschwinden, wenn sich keine entzündlichen Blöcke in der Nähe befinden. Feuer breitet sich nicht aus und zerstört keine Blöcke, zumindest nicht in dieser Welt. Es wird von Wasser und Regen gelöscht. Feuer kann sicher mit einem Schlag zerstört werden, aber es tut weh, wenn man direkt in ihm steht. Wird ein Feuer über Netherrack oder einem Magmablock entfacht, wird er sich sofort zu einem ewigen Feuer verwandeln. -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Ewiges Feuer ist ein schädlicher Block, der mehr Feuer machen kann. Er wird um sich Feuer machen, wenn entflammbare Blöcke in der Nähe sind. Ewiges Feuer kann von Schlägen und Wasserblöcken in der Nähe gelöscht werden. Anders als (normales) Feuer geht ein ewiges Feuer nicht von alleine aus, auch nicht unter Regen. Es ist sicher, ein ewiges Feuer zu schlagen, aber es tut weh, wenn man direkt in einem steht. -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Ewiges Feuer ist ein schädlicher Block. Ewiges Feuer kann von Schlägen und Wasserblöcken in der Nähe gelöscht werden. Anders als (normales) Feuer geht ein ewiges Feuer nicht von alleine aus, auch nicht unter Regen. Es ist sicher, ein ewiges Feuer zu schlagen, aber es tut weh, wenn man direkt in einem steht. -@1 has been cooked crisp.=@1 wurde knusprig gebraten. -@1 felt the burn.=@1 ist völlig verbrannt. -@1 died in the flames.=@1 starb in den Flammen. -@1 died in a fire.=@1 starb in einem Feuer. -Fire=Feuer -Eternal Fire=Ewiges Feuer -Dispenser projectile=Werferprojektil -Starts fires and ignites blocks=Entfacht Feuer und zündet Blöcke an diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.es.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.es.tr deleted file mode 100644 index 6f36b293c5..0000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.es.tr +++ /dev/null @@ -1,17 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=Carga de fuego -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Las cargas de fuego son principalmente proyectiles que se pueden lanzar desde dispensadores, volarán en línea recta y estallarán en un incendio al impactar. Alternativamente, se pueden usar para encender incendios directamente. -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Ponga la carga de fuego en un dispensador y suminístrele poder de redstone para lanzarlo. Para encender un fuego directamente, simplemente coloque la carga de fuego en el suelo, que la usa. -Flint and Steel=Mechero -Flint and steel is a tool to start fires and ignite blocks.=El mechero es una herramienta para iniciar incendios y encender bloques. -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Haga clic derecho en la superficie de un bloque para intentar encender un fuego frente a él o encender el bloque. Unos pocos bloques tienen una reacción única cuando se encienden. -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=El fuego es un tipo de bloque dañino y destructivo pero de corta duración. Destruirá y se extenderá hacia bloques casi inflamables, pero el fuego desaparecerá cuando no quede nada para quemar. Se extinguirá por el agua y la lluvia cercanas. El fuego puede destruirse de manera segura golpeándolo, pero es doloroso si te paras directamente en él. Si se inicia un fuego por encima de la base o un bloque de magma, se convertirá inmediatamente en un fuego eterno. -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=El fuego es un tipo de bloque dañino pero no destructivo de corta duración. Desaparecerá cuando no haya un bloque inflamable alrededor. El fuego no destruye bloques, al menos no en este mundo. Se extinguirá por el agua y la lluvia cercanas. El fuego puede destruirse de manera segura golpeándolo, pero es doloroso si te paras directamente en él. Si se inicia un fuego por encima de la base o un bloque de magma, se convertirá inmediatamente en un fuego eterno. -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=El fuego eterno es un bloque dañino que podría crear más fuego. Creará fuego alrededor cuando haya bloques inflamables cerca. El fuego eterno se puede extinguir con golpes y bloques de agua cercanos. Aparte del fuego (normal), el fuego eterno no se extingue por sí solo y también continúa ardiendo bajo la lluvia. Golpear el fuego eterno es seguro, pero duele si te paras dentro. -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=El fuego eterno es un bloque dañino. El fuego eterno se puede extinguir con golpes y bloques de agua cercanos. Aparte del fuego (normal), el fuego eterno no se extingue por sí solo y también continúa ardiendo bajo la lluvia. Golpear el fuego eterno es seguro, pero duele si te paras dentro. -@1 has been cooked crisp.=@1 se ha cocinado crujientemente. -@1 felt the burn.=@1 sintió la quemadura. -@1 died in the flames.=@1 murió en las llamas. -@1 died in a fire.=@ 1 murió en un incendio. -Fire=Fuego -Eternal Fire=Fuego eterno diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.fr.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.fr.tr deleted file mode 100644 index 60b6ffd0e3..0000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.fr.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=Boule de Feu -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Les boules de feu sont principalement des projectiles qui peuvent être lancés à partir de distributeurs, ils voleront en ligne droite et éclateront en feu à l'impact. Alternativement, ils peuvent être utilisés pour allumer des incendies directement. -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Mettez la boule de feu dans un distributeur et alimentez-la en redstone pour la lancer. Pour allumer un feu directement, placez simplement la charge de feu sur le sol, et utiliser le. -Flint and Steel=Briquet -Flint and steel is a tool to start fires and ignite blocks.=Le Briquet est uo outil pour allumer un feu ou allumer des blocs. -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Cliquez avec le bouton droit sur la surface d'un bloc pour tenter d'allumer un feu devant lui ou d'allumer le bloc. Quelques blocs ont une réaction unique lorsqu'ils sont enflammés. -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Le feu est un type de bloc dommageable et destructeur mais de courte durée. Il se détruira et se propagera vers des blocs proches de produits inflammables, mais le feu disparaîtra lorsqu'il n'y aura plus rien à brûler. Il sera éteint par l'eau et la pluie à proximité. Le feu peut être détruit en toute sécurité en le frappant, mais il est blessant si vous vous tenez directement dedans. Si un feu est déclenché au-dessus d'un netherrack ou d'un bloc de magma, il se transformera immédiatement en un feu éternel. -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Le feu est un type de bloc éphémère mais non destructif de courte durée. Il disparaîtra en l'absence de bloc inflammable. Le feu ne détruit pas les blocs, du moins pas dans ce monde. Il sera éteint par l'eau et la pluie à proximité. Le feu peut être détruit en toute sécurité en le frappant, mais il est blessant si vous vous tenez directement dedans. Si un feu est déclenché au-dessus d'un netherrack ou d'un bloc de magma, il se transformera immédiatement en un feu éternel. -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Le feu éternel est un bloc endommageant qui pourrait créer plus de feu. Il créera du feu autour de lui lorsque des blocs inflammables sont à proximité. Le feu éternel peut être éteint par des coups de poing et des blocs d'eau à proximité. À part le feu (normal), le feu éternel ne s'éteint pas tout seul et continue de brûler sous la pluie. Frapper le feu éternel est sûr, mais ça fait mal si vous vous tenez à l'intérieur. -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Le feu éternel est un bloc dommageable. Le feu éternel peut être éteint par des coups de poing et des blocs d'eau à proximité. À part le feu (normal), le feu éternel ne s'éteint pas tout seul et continue de brûler sous la pluie. Frapper le feu éternel est sûr, mais ça fait mal si vous vous tenez à l'intérieur. -@1 has been cooked crisp.=@1 a été cuit croustillant. -@1 felt the burn.=@1 sent le brûler. -@1 died in the flames.=@1 est mort dans les flammes. -@1 died in a fire.=@1 est mort dans un incendie. -Fire=Feu -Eternal Fire=Feu Eternel -Dispenser projectile=Distributeur de Projectile -Starts fires and ignites blocks=Démarre les incendies et allume les blocs diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr deleted file mode 100644 index ba55cc31e9..0000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=Ładunek ognia -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Ładunki ognia są pociskami, którymi można strzelać z dozowników. Lecą one w linii prostej a po zderzeniu zamieniają się w ogień. -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Włóż ładunek ognia do dozownika i dostarcz energię z czerwienitu aby wystrzelić. Aby bezpośrednio zapalić ładunek postaw go na ziemi co go wykorzystuje. -Flint and Steel=Krzesiwo -Flint and steel is a tool to start fires and ignite blocks.=Krzesiwo jest narzędziem do rozpalania ognia i podpalania bloków. -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Kliknij prawym przyciskiem na powierzchni bloku, ab spróbować rozpalić na nim ogień lub go podpalić. Niektóre bloki reagują na podpalenie w specjalny sposób. -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Ogień jest raniącym i niszczącym, ale krótko żyjącym blokiem. Zniszczy on i będzie się rozprzestrzeniał na inne łatwopalne bloki, ale zniknie on gdy nie zostanie nic więcej do spalenia. Zostanie zgaszony przez pobliską wodę lub deszcz. Jeśli ogień jest zapalony na skale Netheru lub bloku magmy, natychmiast zamieni się on w wieczny ogień. -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Ogień jest raniącym, ale nie niszczącym i krótko żyjącym blokiem. Zniknie gdy w pobliżu nie będzie łatwopalnych bloków. Ogień nie niszczy bloków, przynajmniej nie w tym świecie. Może być zgaszony przez pobliską wodę i deszcz. Może być bezpiecznie zniszczony przez uderzenie go, ale jest raniący gdy stanie się wewnątrz. Jeśli ogień jest zapalony nad skałą Netheru lub bloku magmy, natychmiast zamieni się w wieczny ogień. -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Wieczny ogień jest niszczącym blokiem, który może tworzyć więcej ognia. Będzie on tworzył ogień wokół gdy w pobliżu są łatwopalne bloki. Wieczny ogień można ugasić uderzeniem i blokami wody. W przeciwieństwie do (zwykłego) ognia, wieczny ogień nie gasi się sam z siebie i będzie nadal płonął w deszczu. Uderzanie wiecznego ognia jest bezpieczne, ale jest raniący gdy stoi się wewnątrz. -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Wieczny ogień jest raniącym blokiem. Może on być zgaszony przez uderzenie i bloki wody. W przeciwieństwie do (zwykłego) ognia, wieczny ogień nie zgaśnie sam z siebie i będzie nadal płonął w deszczu. Uderzanie wiecznego ognia jest bezpieczne, ale jest raniący gdy stoi się wewnątrz. -@1 has been cooked crisp.=@1 została usmażona na chrupko. -@1 felt the burn.=@1 poczuła oparzenie. -@1 died in the flames.=@1 zginęła w płomieniach. -@1 died in a fire.=@1 zginęła w ogniu. -Fire=Ogień -Eternal Fire=Wieczny ogień -Dispenser projectile=Pocisk do dozownika -Starts fires and ignites blocks=Rozpala ogień i podpala bloki diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.ru.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.ru.tr deleted file mode 100644 index 941a73aaa0..0000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.ru.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=Огненный шар -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Огненные шары это прежде всего снаряды, которые могут быть выпущены из диспенсеров, они полетят по прямой линии и превратятся в огонь при ударе. Они также могут быть использованы для непосредственного поджигания блоков. -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Положите огненный шар в диспенсер и подайте на него энергию редстоуна для запуска. Чтобы непосредственно поджигать блоки, просто поместите его на поверхность. -Flint and Steel=Огниво -Flint and steel is a tool to start fires and ignite blocks.=Огниво это инструмент для добывания огня. -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Кликните правой по поверхности блока, чтобы попытаться зажечь огонь перед ней либо поджечь блок. Некоторые блоки реагируют на поджигание индивидуально. -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Огонь - это повреждающий и разрушающий, но недолговечный блок. Он будет уничтожать и переходить на соседние легковоспламенимые блоки, но исчезнет, когда больше будет нечему гореть. Он будет погашен близлежащей водой или дождем. Его можно безопасно убрать, стукнув по нему, но если вы стоите прямо в нём, это причинит вам вред. Если огонь зажжён над адским камнем или блоком магмы, он мгновенно превращается в вечный огонь. -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Огонь - это повреждающий, но не разрушающий и недолговечный блок. Он исчезнет, когда вокруг не останется легковоспламенимых блоков. Огонь не уничтожает блоки, по крайней мере, в этом мире. Он будет погашен близлежащей водой или дождем. Его можно безопасно убрать, стукнув по нему, но если вы стоите прямо в нём, это причинит вам вред. Если огонь зажжён над адским камнем или блоком магмы, он мгновенно превращается в вечный огонь. -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Вечный огонь - это повреждающий блок, который может создать больше огня. Он будет создавать огонь вокруг себя, если поблизости окажутся легковоспламенимые блоки. Вечный огонь можно потушить ударами и находящимися рядом водными блоками. В отличие от (обычного) огня, вечный огонь не гаснет сам по себе и также продолжает гореть под дождем. Бить вечный огонь безопасно, но он причиняет боль, если вы стоите внутри. -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Вечный огонь - это повреждающий блок. Вечный огонь можно потушить ударами и находящимися рядом водными блоками. В отличие от (обычного) огня, вечный огонь не гаснет сам по себе и также продолжает гореть под дождем. Бить вечный огонь безопасно, но он причиняет боль, если вы стоите внутри. -@1 has been cooked crisp.=@1 был(а) заживо приготовлен(а). -@1 felt the burn.=@1 испытал(а) ожог. -@1 died in the flames.=@1 умер(ла) в пламени. -@1 died in a fire.=@1 умер(ла) в огне. -Fire=Огонь -Eternal Fire=Вечный огонь -Dispenser projectile=Диспенсер снаряда -Starts fires and ignites blocks=Высекает огонь, поджигает блоки diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.zh_TW.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.zh_TW.tr deleted file mode 100644 index 74394be6da..0000000000 --- a/mods/ITEMS/mcl_fire/locale/mcl_fire.zh_TW.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge=火焰彈 -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=火焰彈主要是可以從發射器中發射的投射物,它們會沿直線飛行,並在撞擊時爆裂成火。另外,它們也可以用來直接點燃火焰。 -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=將火藥放入發射器中,並為其提供紅石動力以發射火藥。要直接點火,只需將火藥放在地上,這樣就能用完。 -Flint and Steel=打火機 -Flint and steel is a tool to start fires and ignite blocks.=燧石和鋼是一種用來起火和點燃木塊的工具。 -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=右鍵點擊方塊的表面,可以在它面前點火或點燃方塊。有幾種方塊在被點燃時會有獨特的反應。 -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=火是一種具有傷害性和破壞性的方塊,但持續時間很短。它將破壞並向附近的易燃區塊蔓延,但當沒有什麼可燃燒的東西時,火就會消失。它將被附近的水和雨所熄滅。火可以通過打它來安全地摧毀,但如果你直接站在它裡面,它是有傷害的。如果火是在地獄石或岩漿塊上面點燃的,它將立即變成永恆的火。 -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=火是一種具有傷害性但無破壞性的短命方塊。當周圍沒有可燃方塊的時候,它就會消失。火不會破壞方塊,至少在這個世界上不會。它將被附近的水和雨所熄滅。火可以通過打它來安全地摧毀,但如果你直接站在它裡面,它是有傷害的。如果火是在地獄石或岩漿塊上面點燃的,它將立即變成永恆的火。 -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=永恆之火是一個具有破壞性的方塊,可能會產生更多的火。當附近有易燃塊方塊時,它將在周圍產生火焰。永恆之火可以被拳頭和附近的水所熄滅。和(普通)火不同,永恆之火不會自行熄滅,而且在雨中也會繼續燃燒。擊打永恆之火是安全的,但如果你站在裡面就會受傷。 -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=永恆之火是一種破壞性的方塊。永恆之火可以被拳頭和附近的水塊所熄滅。和(普通)火不同,永恆之火不會自行熄滅,而且在雨中也會繼續燃燒。擊打永恆之火是安全的,但如果你站在裡面就會受傷。 -@1 has been cooked crisp.=@1 被燒死了 -@1 felt the burn.=@1 被燒死了 -@1 died in the flames.=@1 在火焰中昇天 -@1 died in a fire.=@1 在火焰中昇天 -Fire=火 -Eternal Fire=永恆之火 -Dispenser projectile=發射器投射物 -Starts fires and ignites blocks=點火和點燃方塊 diff --git a/mods/ITEMS/mcl_fire/locale/template.txt b/mods/ITEMS/mcl_fire/locale/template.txt deleted file mode 100644 index 0bc7d2540c..0000000000 --- a/mods/ITEMS/mcl_fire/locale/template.txt +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_fire -Fire Charge= -Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.= -Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.= -Flint and Steel= -Flint and steel is a tool to start fires and ignite blocks.= -Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.= -Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.= -Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.= -Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.= -Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.= -@1 has been cooked crisp.= -@1 felt the burn.= -@1 died in the flames.= -@1 died in a fire.= -Fire= -Eternal Fire= -Dispenser projectile= -Starts fires and ignites blocks= diff --git a/mods/ITEMS/mcl_fire/mod.conf b/mods/ITEMS/mcl_fire/mod.conf deleted file mode 100644 index 4a1d52ee22..0000000000 --- a/mods/ITEMS/mcl_fire/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_fire -depends = mcl_core, mcl_worlds, mcl_sounds, mcl_particles, mcl_util -optional_depends = mcl_portals \ No newline at end of file diff --git a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.1.ogg b/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.1.ogg deleted file mode 100644 index 42506ddffa..0000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.2.ogg b/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.2.ogg deleted file mode 100644 index 2747ab81cb..0000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.3.ogg b/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.3.ogg deleted file mode 100644 index 8baeac32ed..0000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_extinguish_flame.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_fire.1.ogg b/mods/ITEMS/mcl_fire/sounds/fire_fire.1.ogg deleted file mode 100644 index cbfee4c65f..0000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_fire.1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_fire.2.ogg b/mods/ITEMS/mcl_fire/sounds/fire_fire.2.ogg deleted file mode 100644 index e8d0eb1356..0000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_fire.2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_fire.3.ogg b/mods/ITEMS/mcl_fire/sounds/fire_fire.3.ogg deleted file mode 100644 index 5cad3d9b8a..0000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_fire.3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/sounds/fire_flint_and_steel.ogg b/mods/ITEMS/mcl_fire/sounds/fire_flint_and_steel.ogg deleted file mode 100644 index 6996e16fc3..0000000000 Binary files a/mods/ITEMS/mcl_fire/sounds/fire_flint_and_steel.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/fire_basic_flame.png b/mods/ITEMS/mcl_fire/textures/fire_basic_flame.png deleted file mode 100644 index 5ed32ec0ea..0000000000 Binary files a/mods/ITEMS/mcl_fire/textures/fire_basic_flame.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/fire_basic_flame_animated.png b/mods/ITEMS/mcl_fire/textures/fire_basic_flame_animated.png deleted file mode 100644 index 434bdffddb..0000000000 Binary files a/mods/ITEMS/mcl_fire/textures/fire_basic_flame_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/mcl_burning_entity_flame_animated.png b/mods/ITEMS/mcl_fire/textures/mcl_burning_entity_flame_animated.png deleted file mode 100644 index 434bdffddb..0000000000 Binary files a/mods/ITEMS/mcl_fire/textures/mcl_burning_entity_flame_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/mcl_burning_hud_flame_animated.png b/mods/ITEMS/mcl_fire/textures/mcl_burning_hud_flame_animated.png deleted file mode 100644 index 434bdffddb..0000000000 Binary files a/mods/ITEMS/mcl_fire/textures/mcl_burning_hud_flame_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/mcl_fire_fire_charge.png b/mods/ITEMS/mcl_fire/textures/mcl_fire_fire_charge.png deleted file mode 100644 index 1d60f45447..0000000000 Binary files a/mods/ITEMS/mcl_fire/textures/mcl_fire_fire_charge.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fire/textures/mcl_fire_flint_and_steel.png b/mods/ITEMS/mcl_fire/textures/mcl_fire_flint_and_steel.png deleted file mode 100644 index a7c66b8f08..0000000000 Binary files a/mods/ITEMS/mcl_fire/textures/mcl_fire_flint_and_steel.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fireworks/README.txt b/mods/ITEMS/mcl_fireworks/README.txt deleted file mode 100644 index 4cf71fc9b1..0000000000 --- a/mods/ITEMS/mcl_fireworks/README.txt +++ /dev/null @@ -1,7 +0,0 @@ -Firework mod for Mineclone 2 - -by NO11 and and some parts by j45 - -Sound credits: - -* mcl_firework_rocket.ogg (tnt_ignite.ogg): Own derivate work of sound by Ned Bouhalassa (CC0) created in 2005, source: diff --git a/mods/ITEMS/mcl_fireworks/crafting.lua b/mods/ITEMS/mcl_fireworks/crafting.lua deleted file mode 100644 index a9e156aa69..0000000000 --- a/mods/ITEMS/mcl_fireworks/crafting.lua +++ /dev/null @@ -1,17 +0,0 @@ -minetest.register_craft({ - type = "shapeless", - output = "mcl_fireworks:rocket_1 3", - recipe = {"mcl_core:paper", "mcl_mobitems:gunpowder"}, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_fireworks:rocket_2 3", - recipe = {"mcl_core:paper", "mcl_mobitems:gunpowder", "mcl_mobitems:gunpowder"}, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_fireworks:rocket_3 3", - recipe = {"mcl_core:paper", "mcl_mobitems:gunpowder", "mcl_mobitems:gunpowder", "mcl_mobitems:gunpowder"}, -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/init.lua b/mods/ITEMS/mcl_fireworks/init.lua deleted file mode 100644 index cd19225805..0000000000 --- a/mods/ITEMS/mcl_fireworks/init.lua +++ /dev/null @@ -1,4 +0,0 @@ -local path = minetest.get_modpath("mcl_fireworks") - -dofile(path .. "/register.lua") -dofile(path .. "/crafting.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.de.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.de.tr deleted file mode 100644 index 9f90981037..0000000000 --- a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.de.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket=Feuerwerksrakete -Flight Duration:=Flugdauer: \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.es.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.es.tr deleted file mode 100644 index e66eb06a59..0000000000 --- a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.es.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket= -Flight Duration:= \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.fr.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.fr.tr deleted file mode 100644 index b02faa4285..0000000000 --- a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.fr.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket=Fusée -Flight Duration:=Durée de vol : \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.pl.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.pl.tr deleted file mode 100644 index d7d6db1850..0000000000 --- a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.pl.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket=Fajerwerkowa rakieta -Flight Duration:=Czas lotu: - diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.ru.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.ru.tr deleted file mode 100644 index e66eb06a59..0000000000 --- a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.ru.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket= -Flight Duration:= \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/template.txt b/mods/ITEMS/mcl_fireworks/locale/template.txt deleted file mode 100644 index e66eb06a59..0000000000 --- a/mods/ITEMS/mcl_fireworks/locale/template.txt +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_fireworks -Firework Rocket= -Flight Duration:= \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/mod.conf b/mods/ITEMS/mcl_fireworks/mod.conf deleted file mode 100644 index cf9e34e91a..0000000000 --- a/mods/ITEMS/mcl_fireworks/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_fireworks -description = Adds fun fireworks to the game which players can use. \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/register.lua b/mods/ITEMS/mcl_fireworks/register.lua deleted file mode 100644 index 23066b663c..0000000000 --- a/mods/ITEMS/mcl_fireworks/register.lua +++ /dev/null @@ -1,28 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local tt_help = S("Flight Duration:") -local description = S("Firework Rocket") - -local function register_rocket(n, duration, force) - minetest.register_craftitem("mcl_fireworks:rocket_" .. n, { - description = description, - _tt_help = tt_help .. " " .. duration, - inventory_image = "mcl_fireworks_rocket.png", - stack_max = 64, - on_use = function(itemstack, user, pointed_thing) - local elytra = mcl_playerplus.elytra[user] - if elytra.active and elytra.rocketing <= 0 then - elytra.rocketing = duration - 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()}) - end - return itemstack - end, - }) -end - -register_rocket(1, 2.2, 10) -register_rocket(2, 4.5, 20) -register_rocket(3, 6, 30) diff --git a/mods/ITEMS/mcl_fireworks/sounds/mcl_fireworks_rocket.ogg b/mods/ITEMS/mcl_fireworks/sounds/mcl_fireworks_rocket.ogg deleted file mode 100644 index aa232f0dec..0000000000 Binary files a/mods/ITEMS/mcl_fireworks/sounds/mcl_fireworks_rocket.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_fireworks/textures/mcl_fireworks_rocket.png b/mods/ITEMS/mcl_fireworks/textures/mcl_fireworks_rocket.png deleted file mode 100644 index 682a8c40d5..0000000000 Binary files a/mods/ITEMS/mcl_fireworks/textures/mcl_fireworks_rocket.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fletching_table/README.md b/mods/ITEMS/mcl_fletching_table/README.md deleted file mode 100644 index af0b88185f..0000000000 --- a/mods/ITEMS/mcl_fletching_table/README.md +++ /dev/null @@ -1,13 +0,0 @@ -mcl_fletching_table -------------------- -Fletching Tables, by PrairieWind - -Adds Fletching Tables to MineClone 2/5. - -License of source code ----------------------- -LGPLv2.1 - -License of media ----------------- -See the main MineClone 2 README.md file. \ No newline at end of file diff --git a/mods/ITEMS/mcl_fletching_table/init.lua b/mods/ITEMS/mcl_fletching_table/init.lua deleted file mode 100644 index 5fc7556b85..0000000000 --- a/mods/ITEMS/mcl_fletching_table/init.lua +++ /dev/null @@ -1,25 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) --- Fletching Table Code. No use as of current Minecraft Updates. Basically a decor block. As of now, this is complete. -minetest.register_node("mcl_fletching_table:fletching_table", { - description = S("Fletching Table"), - _tt_help = S("A fletching table"), - _doc_items_longdesc = S("This is the fletcher villager's work station. It currently has no use beyond decoration."), - tiles = { - "fletching_table_top.png", "fletching_table_top.png", - "fletching_table_side.png", "fletching_table_side.png", - "fletching_table_front.png", "fletching_table_front.png" - }, - paramtype2 = "facedir", - groups = { axey = 2, handy = 1, deco_block = 1, material_wood = 1, flammable = 1 }, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5 - }) - -minetest.register_craft({ - output = "mcl_fletching_table:fletching_table", - recipe = { - { "mcl_core:flint", "mcl_core:flint", "" }, - { "group:wood", "group:wood", "" }, - { "group:wood", "group:wood", "" }, - } -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_fletching_table/mod.conf b/mods/ITEMS/mcl_fletching_table/mod.conf deleted file mode 100644 index 5a4e9a9003..0000000000 --- a/mods/ITEMS/mcl_fletching_table/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_fletching_table -author = PrairieWind -description = Adds the fletching table villager workstation to MineClone 2/5. diff --git a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_front.png b/mods/ITEMS/mcl_fletching_table/textures/fletching_table_front.png deleted file mode 100644 index da2eb35193..0000000000 Binary files a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_side.png b/mods/ITEMS/mcl_fletching_table/textures/fletching_table_side.png deleted file mode 100644 index c79454afe0..0000000000 Binary files a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_top.png b/mods/ITEMS/mcl_fletching_table/textures/fletching_table_top.png deleted file mode 100644 index 0ecead6965..0000000000 Binary files a/mods/ITEMS/mcl_fletching_table/textures/fletching_table_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_hoppers/License.txt b/mods/ITEMS/mcl_hoppers/License.txt deleted file mode 100644 index 5c93f45654..0000000000 --- a/mods/ITEMS/mcl_hoppers/License.txt +++ /dev/null @@ -1,13 +0,0 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/mods/ITEMS/mcl_hoppers/README.md b/mods/ITEMS/mcl_hoppers/README.md deleted file mode 100644 index 52c85a5d93..0000000000 --- a/mods/ITEMS/mcl_hoppers/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Hoppers -This is the Hoppers mod for Minetest. It's just a clone of Minecraft hoppers, functions nearly identical to them minus mesecons making them stop and the way they're placed. - -## Forum Topic -- https://forum.minetest.net/viewtopic.php?f=11&t=12379 diff --git a/mods/ITEMS/mcl_hoppers/init.lua b/mods/ITEMS/mcl_hoppers/init.lua deleted file mode 100644 index 87831490f7..0000000000 --- a/mods/ITEMS/mcl_hoppers/init.lua +++ /dev/null @@ -1,498 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - ---[[ BEGIN OF NODE DEFINITIONS ]] - -local mcl_hoppers_formspec = - "size[9,7]".. - "label[2,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Hopper"))).."]".. - "list[context;main;2,0.5;5,1;]".. - mcl_formspec.get_itemslot_bg(2,0.5,5,1).. - "label[0,2;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,2.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,2.5,9,3).. - "list[current_player;main;0,5.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,5.74,9,1).. - "listring[context;main]".. - "listring[current_player;main]" - --- Downwards hopper (base definition) - -local def_hopper = { - inventory_image = "mcl_hoppers_item.png", - wield_image = "mcl_hoppers_item.png", - groups = {pickaxey=1, container=2,deco_block=1,hopper=1}, - drawtype = "nodebox", - paramtype = "light", - -- FIXME: mcl_hoppers_hopper_inside.png is unused by hoppers. - tiles = {"mcl_hoppers_hopper_inside.png^mcl_hoppers_hopper_top.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png"}, - node_box = { - type = "fixed", - fixed = { - --funnel walls - {-0.5, 0.0, 0.4, 0.5, 0.5, 0.5}, - {0.4, 0.0, -0.5, 0.5, 0.5, 0.5}, - {-0.5, 0.0, -0.5, -0.4, 0.5, 0.5}, - {-0.5, 0.0, -0.5, 0.5, 0.5, -0.4}, - --funnel base - {-0.5, 0.0, -0.5, 0.5, 0.1, 0.5}, - --spout - {-0.3, -0.3, -0.3, 0.3, 0.0, 0.3}, - {-0.1, -0.3, -0.1, 0.1, -0.5, 0.1}, - }, - }, - selection_box = { - type = "fixed", - fixed = { - --funnel - {-0.5, 0.0, -0.5, 0.5, 0.5, 0.5}, - --spout - {-0.3, -0.3, -0.3, 0.3, 0.0, 0.3}, - {-0.1, -0.3, -0.1, 0.1, -0.5, 0.1}, - }, - }, - is_ground_content = false, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", mcl_hoppers_formspec) - local inv = meta:get_inventory() - inv:set_size("main", 5) - end, - - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta:to_table() - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for i=1,inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2) - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - sounds = mcl_sounds.node_sound_metal_defaults(), - - _mcl_blast_resistance = 4.8, - _mcl_hardness = 3, -} - --- Redstone variants (on/off) of downwards hopper. --- Note a hopper is enabled when it is *not* supplied with redstone power and disabled when it is supplied with redstone power. - --- Enabled downwards hopper -local def_hopper_enabled = table.copy(def_hopper) -def_hopper_enabled.description = S("Hopper") -def_hopper_enabled._tt_help = S("5 inventory slots").."\n"..S("Collects items from above, moves items to container below").."\n"..S("Can be disabled with redstone power") -def_hopper_enabled._doc_items_longdesc = S("Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.").."\n\n".. - -S("Hoppers interact with containers the following way:").."\n".. -S("• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot").."\n".. -S("• Ender chests: No interaction.").."\n".. -S("• Other containers: Normal interaction.").."\n\n".. - -S("Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.") -def_hopper_enabled._doc_items_usagehelp = S("To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.") -def_hopper_enabled.on_place = function(itemstack, placer, pointed_thing) - local upos = pointed_thing.under - local apos = pointed_thing.above - - local uposnode = minetest.get_node(upos) - local uposnodedef = minetest.registered_nodes[uposnode.name] - if not uposnodedef then return itemstack end - -- Use pointed node's on_rightclick function first, if present - if placer and not placer:get_player_control().sneak then - if uposnodedef and uposnodedef.on_rightclick then - return uposnodedef.on_rightclick(pointed_thing.under, uposnode, placer, itemstack) or itemstack - end - end - - local x = upos.x - apos.x - local z = upos.z - apos.z - - local fake_itemstack = ItemStack(itemstack) - local param2 - if x == -1 then - fake_itemstack:set_name("mcl_hoppers:hopper_side") - param2 = 0 - elseif x == 1 then - fake_itemstack:set_name("mcl_hoppers:hopper_side") - param2 = 2 - elseif z == -1 then - fake_itemstack:set_name("mcl_hoppers:hopper_side") - param2 = 3 - elseif z == 1 then - fake_itemstack:set_name("mcl_hoppers:hopper_side") - param2 = 1 - end - local itemstack,_ = minetest.item_place_node(fake_itemstack, placer, pointed_thing, param2) - itemstack:set_name("mcl_hoppers:hopper") - return itemstack -end -def_hopper_enabled.mesecons = { - effector = { - action_on = function(pos, node) - minetest.swap_node(pos, {name="mcl_hoppers:hopper_disabled", param2=node.param2}) - end, - }, -} - -minetest.register_node("mcl_hoppers:hopper", def_hopper_enabled) - --- Disabled downwards hopper -local def_hopper_disabled = table.copy(def_hopper) -def_hopper_disabled.description = S("Disabled Hopper") -def_hopper_disabled.inventory_image = nil -def_hopper_disabled._doc_items_create_entry = false -def_hopper_disabled.groups.not_in_creative_inventory = 1 -def_hopper_disabled.drop = "mcl_hoppers:hopper" -def_hopper_disabled.mesecons = { - effector = { - action_off = function(pos, node) - minetest.swap_node(pos, {name="mcl_hoppers:hopper", param2=node.param2}) - end, - }, -} - -minetest.register_node("mcl_hoppers:hopper_disabled", def_hopper_disabled) - - - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.rotate_simple -end - --- Sidewars hopper (base definition) -local def_hopper_side = { - _doc_items_create_entry = false, - drop = "mcl_hoppers:hopper", - groups = {pickaxey=1, container=2,not_in_creative_inventory=1,hopper=2}, - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - tiles = {"mcl_hoppers_hopper_inside.png^mcl_hoppers_hopper_top.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png", "mcl_hoppers_hopper_outside.png"}, - node_box = { - type = "fixed", - fixed = { - --funnel walls - {-0.5, 0.0, 0.4, 0.5, 0.5, 0.5}, - {0.4, 0.0, -0.5, 0.5, 0.5, 0.5}, - {-0.5, 0.0, -0.5, -0.4, 0.5, 0.5}, - {-0.5, 0.0, -0.5, 0.5, 0.5, -0.4}, - --funnel base - {-0.5, 0.0, -0.5, 0.5, 0.1, 0.5}, - --spout - {-0.3, -0.3, -0.3, 0.3, 0.0, 0.3}, - {-0.5, -0.3, -0.1, 0.1, -0.1, 0.1}, - }, - }, - selection_box = { - type = "fixed", - fixed = { - --funnel - {-0.5, 0.0, -0.5, 0.5, 0.5, 0.5}, - --spout - {-0.3, -0.3, -0.3, 0.3, 0.0, 0.3}, - {-0.5, -0.3, -0.1, 0.1, -0.1, 0.1}, - }, - }, - is_ground_content = false, - - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", mcl_hoppers_formspec) - local inv = meta:get_inventory() - inv:set_size("main", 5) - end, - - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local meta = minetest.get_meta(pos) - local meta2 = meta - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - for i=1,inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2:to_table()) - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from mcl_hoppers at "..minetest.pos_to_string(pos)) - end, - on_rotate = on_rotate, - sounds = mcl_sounds.node_sound_metal_defaults(), - - _mcl_blast_resistance = 4.8, - _mcl_hardness = 3, -} - -local def_hopper_side_enabled = table.copy(def_hopper_side) -def_hopper_side_enabled.description = S("Side Hopper") -def_hopper_side_enabled.mesecons = { - effector = { - action_on = function(pos, node) - minetest.swap_node(pos, {name="mcl_hoppers:hopper_side_disabled", param2=node.param2}) - end, - }, -} -minetest.register_node("mcl_hoppers:hopper_side", def_hopper_side_enabled) - -local def_hopper_side_disabled = table.copy(def_hopper_side) -def_hopper_side_disabled.description = S("Disabled Side Hopper") -def_hopper_side_disabled.mesecons = { - effector = { - action_off = function(pos, node) - minetest.swap_node(pos, {name="mcl_hoppers:hopper_side", param2=node.param2}) - end, - }, -} -minetest.register_node("mcl_hoppers:hopper_side_disabled", def_hopper_side_disabled) - ---[[ END OF NODE DEFINITIONS ]] - ---[[ BEGIN OF ABM DEFINITONS ]] - --- Make hoppers suck in dropped items -minetest.register_abm({ - label = "Hoppers suck in dropped items", - nodenames = {"mcl_hoppers:hopper","mcl_hoppers:hopper_side"}, - interval = 1.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local abovenode = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}) - if not minetest.registered_items[abovenode.name] then return end - -- Don't bother checking item enties if node above is a container (should save some CPU) - if minetest.get_item_group(abovenode.name, "container") ~= 0 then - return - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - - for _,object in pairs(minetest.get_objects_inside_radius(pos, 2)) do - if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" and not object:get_luaentity()._removed then - if inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then - -- Item must get sucked in when the item just TOUCHES the block above the hopper - -- This is the reason for the Y calculation. - -- Test: Items on farmland and slabs get sucked, but items on full blocks don't - local posob = object:get_pos() - local posob_miny = posob.y + object:get_properties().collisionbox[2] - if math.abs(posob.x-pos.x) <= 0.5 and (posob_miny-pos.y < 1.5 and posob.y-pos.y >= 0.3) then - inv:add_item("main", ItemStack(object:get_luaentity().itemstring)) - object:get_luaentity().itemstring = "" - object:remove() - end - end - end - end - end, -}) - --- Returns true if itemstack is fuel, but not for lava bucket if destination already has one -local is_transferrable_fuel = function(itemstack, src_inventory, src_list, dst_inventory, dst_list) - if mcl_util.is_fuel(itemstack) then - if itemstack:get_name() == "mcl_buckets:bucket_lava" then - return dst_inventory:is_empty(dst_list) - else - return true - end - else - return false - end -end - - - -minetest.register_abm({ - label = "Hopper/container item exchange", - nodenames = {"mcl_hoppers:hopper"}, - neighbors = {"group:container"}, - interval = 1.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Get node pos' for item transfer - local uppos = {x=pos.x,y=pos.y+1,z=pos.z} - local downpos = {x=pos.x,y=pos.y-1,z=pos.z} - - -- Suck an item from the container above into the hopper - local upnode = minetest.get_node(uppos) - if not minetest.registered_nodes[upnode.name] then return end - local g = minetest.get_item_group(upnode.name, "container") - local sucked = mcl_util.move_item_container(uppos, pos) - - -- Also suck in non-fuel items from furnace fuel slot - if not sucked and g == 4 then - local finv = minetest.get_inventory({type="node", pos=uppos}) - if finv and not mcl_util.is_fuel(finv:get_stack("fuel", 1)) then - mcl_util.move_item_container(uppos, pos, "fuel") - end - end - - -- Move an item from the hopper into container below - local downnode = minetest.get_node(downpos) - if not minetest.registered_nodes[downnode.name] then return end - mcl_util.move_item_container(pos, downpos) - end, -}) - -minetest.register_abm({ - label = "Side-hopper/container item exchange", - nodenames = {"mcl_hoppers:hopper_side"}, - neighbors = {"group:container"}, - interval = 1.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - -- Determine to which side the hopper is facing, get nodes - local face = minetest.get_node(pos).param2 - local front = {} - if face == 0 then - front = {x=pos.x-1,y=pos.y,z=pos.z} - elseif face == 1 then - front = {x=pos.x,y=pos.y,z=pos.z+1} - elseif face == 2 then - front = {x=pos.x+1,y=pos.y,z=pos.z} - elseif face == 3 then - front = {x=pos.x,y=pos.y,z=pos.z-1} - end - local above = {x=pos.x,y=pos.y+1,z=pos.z} - - local frontnode = minetest.get_node(front) - if not minetest.registered_nodes[frontnode.name] then return end - - -- Suck an item from the container above into the hopper - local abovenode = minetest.get_node(above) - if not minetest.registered_nodes[abovenode.name] then return end - local g = minetest.get_item_group(abovenode.name, "container") - local sucked = mcl_util.move_item_container(above, pos) - - -- Also suck in non-fuel items from furnace fuel slot - if not sucked and g == 4 then - local finv = minetest.get_inventory({type="node", pos=above}) - if finv and not mcl_util.is_fuel(finv:get_stack("fuel", 1)) then - mcl_util.move_item_container(above, pos, "fuel") - end - end - - -- Move an item from the hopper into the container to which the hopper points to - local g = minetest.get_item_group(frontnode.name, "container") - if g == 2 or g == 3 or g == 5 or g == 6 then - mcl_util.move_item_container(pos, front) - elseif g == 4 then - -- Put fuel into fuel slot - local sinv = minetest.get_inventory({type="node", pos = pos}) - local dinv = minetest.get_inventory({type="node", pos = front}) - local slot_id,_ = mcl_util.get_eligible_transfer_item_slot(sinv, "main", dinv, "fuel", is_transferrable_fuel) - if slot_id then - mcl_util.move_item_container(pos, front, nil, slot_id, "fuel") - end - end - end -}) - -minetest.register_craft({ - output = "mcl_hoppers:hopper", - recipe = { - {"mcl_core:iron_ingot","","mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot","mcl_chests:chest","mcl_core:iron_ingot"}, - {"","mcl_core:iron_ingot",""}, - } -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_hoppers:hopper", "nodes", "mcl_hoppers:hopper_side") -end - --- Legacy -minetest.register_alias("mcl_hoppers:hopper_item", "mcl_hoppers:hopper") - -minetest.register_lbm({ - label = "Update hopper formspecs (0.60.0", - name = "mcl_hoppers:update_formspec_0_60_0", - nodenames = { "group:hopper" }, - run_at_every_load = false, - action = function(pos, node) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", mcl_hoppers_formspec) - end, -}) diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.de.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.de.tr deleted file mode 100644 index f0cc90d2fa..0000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.de.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=Trichter -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=Trichter sind Behälter mit 5 Inventarplätzen. Sie sammeln fallengelassene Gegenstände oberhalb auf, nehmen sich Gegenstände von einem Behälter oberhalb auf und versuchen, ihren Inhalt in einen benachbarten Behälter zu befördern. Trichter können entweder nach unten oder zur Seite zeigen. Trichter interagieren mit Truhen, Spendern, Werfern, Schulkerkisten, Öfen und Trichtern. -Hoppers interact with containers the following way:=Trichter interagieren mit Behältern auf diese Weise: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• Öfen: Trichter von oberhalb werden Gegenstände in den Quellplatz befördern. Trichter von unterhalb werden Gegenstände aus dem Ausgabeplatz nehmen. Sie werden Gegenstände auch aus dem Brennstoffplatz nehmen, wenn sie als Brennstoff ungeeignet sind. Seitwärtstrichter, die zum Ofen zeigen, befördern Gegenstände in den Brennstoffplatz. -• Ender chests: No interaction.=• Endertruhen: Keine Interaktion. -• Other containers: Normal interaction.=• Andere Behälter: Normale Interaktion. -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=Trichter können deaktiviert werden, wenn sie mit Redstone-Energie versorgt werden. Deaktivierte Trichter bewegen keine Gegenstände. -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=Um einen Trichter vertikal zu platzieren, platzieren Sie ihn auf den Boden oder an die Decke. Um ihn seitwärts zu platzieren, platzieren Sie in an die Seite eines Blocks. Der Trichter wird seine Ausrichtung behalten. Benutzen Sie den Trichter, um auf sein Inventar zuzugreifen. -Disabled Hopper=Deaktivierter Trichter -Side Hopper=Seitwärtstrichter -Disabled Side Hopper=Deaktivierter Seitwärtstrichter -Inventory=Inventar -5 inventory slots=5 Inventarplätze -Collects items from above, moves items to container below=Sammelt Gegenstände von oben, legt Gegenstände in Behälter unterhalb ab -Can be disabled with redstone power=Kann mit Redstoneenergie deaktiviert werden diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.es.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.es.tr deleted file mode 100644 index 3f819ca93d..0000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.es.tr +++ /dev/null @@ -1,13 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=Tolva -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=Las tolvas son contenedores con 5 ranuras de inventario. Recogen los artículos que se cayeron desde arriba, toman los artículos de un contenedor de arriba e intentan colocarlos en un contenedor adyacente. Las tolvas pueden ir hacia abajo o hacia los lados. Las tolvas interactúan con cofres, goteros, dispensadores, cajas de shulker, hornos y tolvas. -Hoppers interact with containers the following way:=Las tolvas interactúan con los contenedores de la siguiente manera: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• Hornos: las tolvas de arriba colocarán elementos en la ranura de origen. Las tolvas de abajo toman artículos de la ranura de salida. También toman artículos de la ranura de combustible cuando no se pueden usar como combustible. Las tolvas laterales que apuntan al horno colocan elementos en la ranura de combustible -• Ender chests: No interaction.=• Cofres Ender: Sin interacción. -• Other containers: Normal interaction.=• Otros contenedores: interacción normal. -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=Las tolvas se pueden desactivar cuando se les suministra energía de redstone. Las tolvas deshabilitadas no mueven artículos. -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=Para colocar una tolva verticalmente, colóquela en el suelo o en el techo. Para colocarlo de lado, colóquelo al lado de un bloque. Use la tolva para acceder a su inventario. -Disabled Hopper=Tolva desactivada -Side Hopper=Tolva lateral -Disabled Side Hopper=Tolva lateral desactivada -Inventory=Inventario diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.fr.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.fr.tr deleted file mode 100644 index 40795d09c0..0000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.fr.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=Entonnoir -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=Les entonoirs sont des conteneurs avec 5 emplacements d'inventaire. Ils récupèrent les objets déposés par le haut, prennent les objets d'un conteneur au-dessus et tentent de les placer dans un conteneur adjacent. Les entonnoirs peuvent aller vers le bas ou sur le côté. Les entonnoirs interagissent avec les coffres, les compte-gouttes, les distributeurs, les boites de shulker, les fours et les entonnoirs. -Hoppers interact with containers the following way:=Les entonnoirs interagissent avec les conteneurs de la manière suivante: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• Fours: les entonoires d'en haut placent les objets dans l'emplacement source. Les entonoires d'en bas prennent les éléments de la fente de sortie. Ils prennent également des objets de la fente de carburant lorsqu'ils ne peuvent pas être utilisés comme carburant. Des entonaires latérales qui pointent vers le four mettent des objets dans la fente de combustible -• Ender chests: No interaction.=• Coffres Ender: Aucune interaction. -• Other containers: Normal interaction.=• Autres conteneurs: interaction normale. -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=Les entonoires peuvent être désactivées lorsqu'elles sont alimentées en redstone. Les trémies désactivées ne déplacent pas les objets. -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=Pour placer un entonoire verticalement, placez-la au sol ou au plafond. Pour le placer sur le côté, placez-le sur le côté d'un bloc. Utilisez l'entonoire pour accéder à son inventaire. -Disabled Hopper=Entonoir Désactivé -Side Hopper=Entonoir Latéral -Disabled Side Hopper=Entonoir Latéral Désactivé -Inventory=Inventaire -5 inventory slots=5 emplacements d'inventaire -Collects items from above, moves items to container below=Collecte les éléments d'en haut, déplace les éléments vers le conteneur ci-dessous -Can be disabled with redstone power=Peut être désactivé par la puissance Redstone diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.pl.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.pl.tr deleted file mode 100644 index 8ef70f4f09..0000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.pl.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=Lej -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=Leje są pojemnikami z 5 miejscami ekwipunku. Zbierają upuszczone na nie z góry przedmioty, przedmioty z pojemników na nimi i próbują je umieścić w przyległych pojemnikach. Leje mogą być skierowane w dół bądź w bok. Leje wchodzą w interakcję ze skrzyniami, podajnikami, dozownikami, shulkerowymi skrzyniami, piecami i lejami. -Hoppers interact with containers the following way:=Leje wchodzą w interakcję z pojemnikami w następujący sposób: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=Piece: leje nad nimi będą umieszczać przedmioty w miejsce materiału źródłowego. Leje z dołu będą brały przedmioty z miejsca wyjściowego. Będą także zabierały przedmioty z miejsca na paliwo jeśli nie można ich użyć jako paliwo. Boczne leje wskazujące na piec będą wstawiać przedmioty w miejsce na paliwo. -• Ender chests: No interaction.=Skrzynie kresu: nie wchodzą w interakcję. -• Other containers: Normal interaction.=Inne pojemniki: zwykła interakcja. -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=Leje mogą być wyłączone sygnałem z czerwienitu. -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=Aby postawić lej pionowo postaw go na podłodze lub suficie. Aby postawić go bocznie ustaw go na boku bloku. Kliknij "Użyj" na leju by zarządzać jego ekwipunkiem. -Disabled Hopper=Wyłączony lej -Side Hopper=Boczny lej -Disabled Side Hopper=Wyłączony boczny lej -Inventory=Ekwipunek -5 inventory slots=5 miejsc w ekwipunku -Collects items from above, moves items to container below=Zbiera przedmioty z góry, umieszcza je w pojemniku pod spodem -Can be disabled with redstone power=Może być wyłączony czerwienitem diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.ru.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.ru.tr deleted file mode 100644 index ac7e82b179..0000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.ru.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=Воронка -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=Воронка это контейнер с 5 отсеками инвентаря. Она может собирать предметы, брошенные сверху, брать предметы из контейнеров сверху, а также пытаться класть свои предметы в примыкающий контейнер. Воронки могут действовать вниз или вбок. Воронки взаимодействуют с сундуками, выбрасывателями, диспенсерами, ящиками шалкеров, печами и другими воронками. -Hoppers interact with containers the following way:=Воронка взаимодействует с контейнерами следующим образом: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• Печи: размещённые выше воронки будут складывать предметы во входной отсек. Воронки, размещённые ниже, будут доставать предметы из выходного отсека. Они также может доставать предметы из топливного отсека, если эти предметы не могут использоваться в качестве топлива. Боковые воронки, нацеленные на печь, помещают предметы в топливный отсек. -• Ender chests: No interaction.=• Сундук Предела: не взаимодействует. -• Other containers: Normal interaction.=• Прочие контейнеры: взаимодействует обычно. -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=Воронки могут быть отключены, когда на них подаётся энергия редстоуна. -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=Чтобы установить воронку вертикально, поместите её на пол или потолок. Чтобы установить воронку по направлению в сторону, разместите её на боковой стороне блока. Нажмите [Использовать] для доступа к инвентарю воронки. -Disabled Hopper=Отключенная воронка -Side Hopper=Боковая воронка -Disabled Side Hopper=Отключенная боковая воронка -Inventory=Инвентарь -5 inventory slots=5 отсеков инвентаря -Collects items from above, moves items to container below=Собирает предметы сверху, передаёт их в контейнер ниже -Can be disabled with redstone power=Может быть отключена с помощью энергии редстоуна diff --git a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.zh_TW.tr b/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.zh_TW.tr deleted file mode 100644 index f3e8be8abb..0000000000 --- a/mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.zh_TW.tr +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper=漏斗 -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.=漏斗是有5個物品槽的容器。它們從上面收集掉落的物品,從上面的容器中取出物品,並試圖把它的物品放到鄰近的容器中。漏斗可以向下或向側面移動。漏斗與箱子、投擲器、發射器、界伏盒、熔爐和漏斗相互作用。 -Hoppers interact with containers the following way:=漏斗會對容器做以下事情: -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot=• 熔爐:從上面的漏斗會將物品放入源料槽。下方的漏斗從輸出槽中取出物品。當物品不能作為燃料使用時,它們也會從燃料槽中取出物品。指向熔爐的側邊漏斗將物品放入燃料槽。 -• Ender chests: No interaction.=• 終界箱:不會有任何動作。 -• Other containers: Normal interaction.=• 其他容器:正常動作。 -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.=供給紅石電源時,可以禁用漏斗。被禁用的漏斗不會移動物品。 -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.=要垂直放置漏斗,可將其放在地板或天花板上。要想把它放在側面,就把它放在一個方塊的側面。使用漏斗來訪問其庫存。 -Disabled Hopper=被禁用的漏斗 -Side Hopper=側面漏斗 -Disabled Side Hopper=被禁用的側面漏斗 -Inventory=物品欄 -5 inventory slots=5個物品槽 -Collects items from above, moves items to container below=從上面收集物品,並把物品放到下面的容器中 -Can be disabled with redstone power=可被紅石電源禁用 diff --git a/mods/ITEMS/mcl_hoppers/locale/template.txt b/mods/ITEMS/mcl_hoppers/locale/template.txt deleted file mode 100644 index bc614d47a0..0000000000 --- a/mods/ITEMS/mcl_hoppers/locale/template.txt +++ /dev/null @@ -1,16 +0,0 @@ -# textdomain: mcl_hoppers -Hopper= -Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.= -Hoppers interact with containers the following way:= -• Furnaces: Hoppers from above will put items into the source slot. Hoppers from below take items from the output slot. They also take items from the fuel slot when they can't be used as a fuel. Sideway hoppers that point to the furnace put items into the fuel slot= -• Ender chests: No interaction.= -• Other containers: Normal interaction.= -Hoppers can be disabled when supplied with redstone power. Disabled hoppers don't move items.= -To place a hopper vertically, place it on the floor or a ceiling. To place it sideways, place it at the side of a block. Use the hopper to access its inventory.= -Disabled Hopper= -Side Hopper= -Disabled Side Hopper= -Inventory= -5 inventory slots= -Collects items from above, moves items to container below= -Can be disabled with redstone power= diff --git a/mods/ITEMS/mcl_hoppers/mod.conf b/mods/ITEMS/mcl_hoppers/mod.conf deleted file mode 100644 index c89292f6b4..0000000000 --- a/mods/ITEMS/mcl_hoppers/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_hoppers -description = It's just a clone of Minecraft hoppers, functions nearly identical to them minus mesecons making them stop and the way they're placed. -depends = mcl_core, mcl_formspec, mcl_sounds, mcl_util -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_inside.png b/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_inside.png deleted file mode 100644 index 00b4f434ba..0000000000 Binary files a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_inside.png and /dev/null differ diff --git a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_outside.png b/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_outside.png deleted file mode 100644 index f3d9b7982c..0000000000 Binary files a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_outside.png and /dev/null differ diff --git a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_top.png b/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_top.png deleted file mode 100644 index 918e58f5d4..0000000000 Binary files a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_hopper_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_item.png b/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_item.png deleted file mode 100644 index c78b7d5e0b..0000000000 Binary files a/mods/ITEMS/mcl_hoppers/textures/mcl_hoppers_item.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/API.md b/mods/ITEMS/mcl_jukebox/API.md deleted file mode 100644 index 85900ede07..0000000000 --- a/mods/ITEMS/mcl_jukebox/API.md +++ /dev/null @@ -1,18 +0,0 @@ -# mcl_jukebox - -## mcl_jukebox.register_record(title, author, identifier, image, sound) - -* title: title of the track -* author: author of the track -* identifier: short string used in the item registration -* image: the texture of the track -* sound: sound file of the track - -## mcl_jukebox.registered_records - -Table indexed by item name containing: -* title: title of the track -* author: author of the track -* identifier: short string used in the item registration -* image: the texture of the track -* sound: sound file of the track \ No newline at end of file diff --git a/mods/ITEMS/mcl_jukebox/README.md b/mods/ITEMS/mcl_jukebox/README.md deleted file mode 100644 index bc261270a9..0000000000 --- a/mods/ITEMS/mcl_jukebox/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Jukebox mod for MineClone 2. - -Based on the `jdukebox` mod by Jordach. This adds a jukebox block and -music disc. Just place a music disc in a jukebox and music starts -to play. And that's it! - -## Track list - -`mcl_jukebox_track_1.ogg`: “The Evil Sister (Jordach's Mix)” by SoundHelix (CC0) -`mcl_jukebox_track_2.ogg`: “The Energetic Rat (Jordach's Mix)” by SoundHelix (CC0) -`mcl_jukebox_track_3.ogg`: “Eastern Feeling” by Jordach (CC0) -`mcl_jukebox_track_4.ogg`: “Minetest” by Jordach (CC0) -`mcl_jukebox_track_5.ogg`: “Credit Roll (Jordach's HD Mix)” by Junichi Masuda (CC0) -`mcl_jukebox_track_6.ogg`: “Winter Feeling" by Tom Peter (CC BY-SA 3.0) -`mcl_jukebox_track_7.ogg`: “Synthgroove (Jordach's Mix)” by HeroOfTheWinds (CC0) -`mcl_jukebox_track_8.ogg`: “The Clueless Frog (Jordach's Mix)” by SoundHelix (CC0) - -Note: 9 tracks are included. 3 music disc textures are currently unused. - -### Sources - -* “Winter Feeling”: -* Other tracks: - -### License - -Code licenced as GPLv3. Music under individual licenses (see abbreviations -above). Texture license: See main MineClone 2 README.md file. - -See here for the full license texts: - -* CC0: -* CC BY-SA 3.0: -* GPLv3: diff --git a/mods/ITEMS/mcl_jukebox/init.lua b/mods/ITEMS/mcl_jukebox/init.lua deleted file mode 100644 index 6c51a6c942..0000000000 --- a/mods/ITEMS/mcl_jukebox/init.lua +++ /dev/null @@ -1,250 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local C = minetest.colorize - -local math = math - -mcl_jukebox = {} -mcl_jukebox.registered_records = {} - --- Player name-indexed table containing the currently heard track -local active_tracks = {} - --- Player name-indexed table containing the current used HUD ID for the “Now playing” message. -local active_huds = {} - --- Player name-indexed table for the “Now playing” message. --- Used to make sure that minetest.after only applies to the latest HUD change event -local hud_sequence_numbers = {} - -function mcl_jukebox.register_record(title, author, identifier, image, sound) - mcl_jukebox.registered_records["mcl_jukebox:record_"..identifier] = {title, author, identifier, image, sound} - local entryname = S("Music Disc") - local longdesc = S("A music disc holds a single music track which can be used in a jukebox to play music.") - local usagehelp = S("Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.") - minetest.register_craftitem(":mcl_jukebox:record_"..identifier, { - description = - C(mcl_colors.AQUA, S("Music Disc")) .. "\n" .. - C(mcl_colors.GRAY, S("@1—@2", author, title)), - _doc_items_create_entry = true, - _doc_items_entry_name = entryname, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - --inventory_image = "mcl_jukebox_record_"..recorddata[r][3]..".png", - inventory_image = image, - stack_max = 1, - groups = { music_record = 1 }, - }) -end - -local function now_playing(player, name) - local playername = player:get_player_name() - local hud = active_huds[playername] - local text = S("Now playing: @1—@2", mcl_jukebox.registered_records[name][2], mcl_jukebox.registered_records[name][1]) - - if not hud_sequence_numbers[playername] then - hud_sequence_numbers[playername] = 1 - else - hud_sequence_numbers[playername] = hud_sequence_numbers[playername] + 1 - end - - local id - if hud then - id = hud - player:hud_change(id, "text", text) - else - id = player:hud_add({ - hud_elem_type = "text", - position = { x=0.5, y=0.8 }, - offset = { x=0, y = 0 }, - number = 0x55FFFF, - text = text, - z_index = 100, - }) - active_huds[playername] = id - end - minetest.after(5, function(tab) - local playername = tab[1] - local player = minetest.get_player_by_name(playername) - local id = tab[2] - local seq = tab[3] - if not player or not player:is_player() or not active_huds[playername] or not hud_sequence_numbers[playername] or seq ~= hud_sequence_numbers[playername] then - return - end - if id and id == active_huds[playername] then - player:hud_remove(active_huds[playername]) - active_huds[playername] = nil - end - end, {playername, id, hud_sequence_numbers[playername]}) -end - -minetest.register_on_leaveplayer(function(player) - active_tracks[player:get_player_name()] = nil - active_huds[player:get_player_name()] = nil - hud_sequence_numbers[player:get_player_name()] = nil -end) - --- Jukebox crafting -minetest.register_craft({ - output = "mcl_jukebox:jukebox", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "mcl_core:diamond", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - } -}) - -local function play_record(pos, itemstack, player) - local item_name = itemstack:get_name() - -- ensure the jukebox uses the new record names for old records - local name = minetest.registered_aliases[item_name] or item_name - if mcl_jukebox.registered_records[name] then - local cname = player:get_player_name() - if active_tracks[cname] then - minetest.sound_stop(active_tracks[cname]) - active_tracks[cname] = nil - end - active_tracks[cname] = minetest.sound_play(mcl_jukebox.registered_records[name][5], { - to_player = cname, - gain = 1, - }) - now_playing(player, name) - return true - end - return false -end - --- Jukebox -minetest.register_node("mcl_jukebox:jukebox", { - description = S("Jukebox"), - _tt_help = S("Uses music discs to play music"), - _doc_items_longdesc = S("Jukeboxes play music when they're supplied with a music disc."), - _doc_items_usagehelp = S("Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players."), - tiles = {"mcl_jukebox_top.png", "mcl_jukebox_side.png", "mcl_jukebox_side.png"}, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {handy=1,axey=1, container=7, deco_block=1, material_wood=1, flammable=-1}, - is_ground_content = false, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - inv:set_size("main", 1) - end, - on_rightclick= function(pos, node, clicker, itemstack, pointed_thing) - if not clicker then return end - local cname = clicker:get_player_name() - if minetest.is_protected(pos, cname) then - minetest.record_protection_violation(pos, cname) - return - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if not inv:is_empty("main") then - -- Jukebox contains a disc: Stop music and remove disc - if active_tracks[cname] then - minetest.sound_stop(active_tracks[cname]) - end - local lx = pos.x - local ly = pos.y+1 - local lz = pos.z - local record = inv:get_stack("main", 1) - local dropped_item = minetest.add_item({x=lx, y=ly, z=lz}, record) - -- Rotate record to match with “slot” texture - dropped_item:set_yaw(math.pi/2) - inv:set_stack("main", 1, "") - if active_tracks[cname] then - minetest.sound_stop(active_tracks[cname]) - active_tracks[cname] = nil - end - if active_huds[cname] then - clicker:hud_remove(active_huds[cname]) - active_huds[cname] = nil - end - else - -- Jukebox is empty: Play track if player holds music record - local playing = play_record(pos, itemstack, clicker) - if playing then - local put_itemstack = ItemStack(itemstack) - put_itemstack:set_count(1) - inv:set_stack("main", 1, put_itemstack) - itemstack:take_item() - end - end - return itemstack - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return count - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local name = digger:get_player_name() - local meta = minetest.get_meta(pos) - local meta2 = meta - meta:from_table(oldmetadata) - local inv = meta:get_inventory() - local stack = inv:get_stack("main", 1) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - local dropped_item = minetest.add_item(p, stack) - -- Rotate record to match with “slot” texture - dropped_item:set_yaw(math.pi/2) - if active_tracks[name] then - minetest.sound_stop(active_tracks[name]) - active_tracks[name] = nil - end - if active_huds[name] then - digger:hud_remove(active_huds[name]) - active_huds[name] = nil - end - end - meta:from_table(meta2:to_table()) - end, - _mcl_blast_resistance = 6, - _mcl_hardness = 2, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_jukebox:jukebox", - burntime = 15, -}) - -mcl_jukebox.register_record("The Evil Sister (Jordach's Mix)", "SoundHelix", "13", "mcl_jukebox_record_13.png", "mcl_jukebox_track_1") -mcl_jukebox.register_record("The Energetic Rat (Jordach's Mix)", "SoundHelix", "wait", "mcl_jukebox_record_wait.png", "mcl_jukebox_track_2") -mcl_jukebox.register_record("Eastern Feeling", "Jordach", "blocks", "mcl_jukebox_record_blocks.png", "mcl_jukebox_track_3") -mcl_jukebox.register_record("Minetest", "Jordach", "far", "mcl_jukebox_record_far.png", "mcl_jukebox_track_4") -mcl_jukebox.register_record("Credit Roll (Jordach's HD Mix)", "Junichi Masuda", "chirp", "mcl_jukebox_record_chirp.png", "mcl_jukebox_track_5") -mcl_jukebox.register_record("Winter Feeling", "Tom Peter", "strad", "mcl_jukebox_record_strad.png", "mcl_jukebox_track_6") -mcl_jukebox.register_record("Synthgroove (Jordach's Mix)", "HeroOfTheWinds", "mellohi", "mcl_jukebox_record_mellohi.png", "mcl_jukebox_track_7") -mcl_jukebox.register_record("The Clueless Frog (Jordach's Mix)", "SoundHelix", "mall", "mcl_jukebox_record_mall.png", "mcl_jukebox_track_8") - ---add backward compatibility -minetest.register_alias("mcl_jukebox:record_1", "mcl_jukebox:record_13") -minetest.register_alias("mcl_jukebox:record_2", "mcl_jukebox:record_wait") -minetest.register_alias("mcl_jukebox:record_3", "mcl_jukebox:record_blocks") -minetest.register_alias("mcl_jukebox:record_4", "mcl_jukebox:record_far") -minetest.register_alias("mcl_jukebox:record_5", "mcl_jukebox:record_chirp") -minetest.register_alias("mcl_jukebox:record_6", "mcl_jukebox:record_strad") -minetest.register_alias("mcl_jukebox:record_7", "mcl_jukebox:record_mellohi") -minetest.register_alias("mcl_jukebox:record_8", "mcl_jukebox:record_mall") \ No newline at end of file diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.de.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.de.tr deleted file mode 100644 index c7071f6f60..0000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.de.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=Musikplatte -A music disc holds a single music track which can be used in a jukebox to play music.=Eine Musikplatte enthält eine einzelnes Musikstück, die in einer Musikbox benutzt werden kann, um Musik zu spielen. -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Platzieren Sie eine Musikplatte in eine leere Musikbox, um die Musik abzuspielen. Benutzen Sie die Musikbox erneut, um die Musikplatte zu erhalten. Die Musik kann nur von Ihnen gehört werden, nicht von anderen Spielern. -Music Disc=Musikplatte -@1—@2=@1 – @2 -Jukebox=Musikbox -Jukeboxes play music when they're supplied with a music disc.=Musikboxen spielen Musik, wenn man ihnen eine Musikplatte gibt. -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Platzieren Sie eine Musikplatte in eine leere Musikbox, um die Musikplatte einzulegen und Musik zu spielen. Wenn die Musikbox schon eine Musikplatte hat, werden Sie zuerst diese Musikplatte erhalten. Die Musik kann nur von Ihnen gehört werden, aber nicht von anderen Spielern. -Now playing: @1—@2=Sie hören: @1 – @2 -Uses music discs to play music=Benutzt Musikplatten, um Musik zu spielen diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.es.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.es.tr deleted file mode 100644 index 14373c9644..0000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.es.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=Disco de música -A music disc holds a single music track which can be used in a jukebox to play music.=Un disco de música contiene una sola pista que se puede usar en una máquina de discos para reproducirla. -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Coloque un disco de música en una máquina de discos vacía para reproducir la música. Use la máquina de discos nuevamente para recuperar el disco de música. La música solo puede ser escuchada por ti, no por otros jugadores. -Music Disc=Disco de música -@1—@2=@1 – @2 -Jukebox=Tocadiscos -Jukeboxes play music when they're supplied with a music disc.=Los tocadiscos reproducen música cuando se les inserta un disco de música. -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Coloque un disco de música en una máquina de discos vacía para insertar el disco de música y reproducir música. Si el jukebox ya tiene un disco de música, primero recuperará este disco de música. La música solo puede ser escuchada por ti, no por otros jugadores. -Now playing: @1—@2=Reproduciendo actualmente: @1 – @2 diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.fr.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.fr.tr deleted file mode 100644 index f89510fa64..0000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.fr.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=Disque de musique -A music disc holds a single music track which can be used in a jukebox to play music.=Un disque de musique contient une seule piste musicale qui peut être utilisée dans un juke-box pour lire de la musique. -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Placez un disque de musique dans un juke-box vide pour lire la musique. Utilisez à nouveau le juke-box pour récupérer le disque de musique. La musique ne peut être entendue que par vous, pas par les autres joueurs. -Music Disc=Disque de musique -@1—@2=@1—@2 -Jukebox=Juke-box -Jukeboxes play music when they're supplied with a music disc.=Les juke-box diffusent de la musique lorsqu'ils sont fournis avec un disque de musique. -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Placez un disque de musique dans un juke-box vide pour insérer le disque de musique et lire de la musique. Si le juke-box possède déjà un disque de musique, vous allez d'abord récupérer ce disque de musique. La musique ne peut être entendue que par vous, pas par les autres joueurs. -Now playing: @1—@2=En cours de lecture: @1—@2 -Uses music discs to play music=Utilise des disques de musique pour lire de la musique diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.pl.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.pl.tr deleted file mode 100644 index a0c2eccd57..0000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.pl.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=Płyta z muzyką -A music disc holds a single music track which can be used in a jukebox to play music.=Płyta z muzyką zawiera ścieżkę muzyczną, którą można użyć na szafie grającej aby włączyć muzykę. -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Włóż płyty z muzyką do pustej szafy grającej aby włączyć muzykę. Kliknij użycie na szafie grającej ponownie, aby odzyskać płytę. Muzyka jest słyszalna tylko przez ciebie, nie przez innych graczy. -Music Disc=Płyta z muzyką -@1—@2=@1-@2 -Jukebox=Szafa grająca -Jukeboxes play music when they're supplied with a music disc.=Szafa grająca gra muzykę, gdy ma w sobie płytę z muzyką. -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Włóż płytę z muzyką do szafy grającej aby muzyka zaczęła grać. Jeśli w szafie grającej jest już płyta odzyskasz najpierw tę muzykę. Muzyka będzie słyszalna tylko przez ciebie, nie przez innych graczy. -Now playing: @1—@2=Aktualna muzyka: @1—@2 -Uses music discs to play music=Używa płyt z muzyką by odtwarzać muzykę diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.ru.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.ru.tr deleted file mode 100644 index 1787ca229a..0000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.ru.tr +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=Диск с музыкой -A music disc holds a single music track which can be used in a jukebox to play music.=Диск с музыкой содержит одну музыкальную запись, которую можно прослушивать при помощи проигрывателя. -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Поместите диск в пустой проигрыватель, чтобы включить музыку. [Используйте] проигрыватель вновь, чтобы вытащить диск. Музыку слышите только вы, другие игроки не слышат. -Music Disc=Диск с музыкой -@1—@2=@1—@2 -Jukebox=Проигрыватель -Jukeboxes play music when they're supplied with a music disc.=Проигрыватель воспроизводит музыку, если снабдить его музыкальным диском. -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Поместите диск в пустой проигрыватель, диск окажется в проигрывателе и заиграет музыка. Если в проигрывателе уже есть диск, вы сначала извлечёте его. Музыку можете услышать только вы, другие игроки не услышат. -Now playing: @1—@2=Сейчас звучит: @1-@2 -Uses music discs to play music=Проигрывает музыку с дисков diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.zh_TW.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.zh_TW.tr deleted file mode 100644 index ba48ae9de7..0000000000 --- a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.zh_TW.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc=唱片 -A music disc holds a single music track which can be used in a jukebox to play music.=一張唱片可容納單一的音樂曲目,可在唱片機中用於播放音樂。 -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=將唱片放入空的唱片機中播放音樂。再次使用唱片機取出唱片。音樂只能由您自己聽,而不能由其他玩家聽。 -@1—@2= -Jukebox=唱片機 -Jukeboxes play music when they're supplied with a music disc.=唱片機在提供唱片的情况下播放音樂。 -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=將音樂光盤放入空的點唱機,插入音樂光盤並播放音樂。如果點唱機已經有一張音樂光盤,你要先取回這張音樂光盤。音樂只能被你聽到,不能被其他玩家聽到。 -Now playing: @1—@2=正在播放:@1—@2 -Uses music discs to play music=使用唱片播放音樂 diff --git a/mods/ITEMS/mcl_jukebox/locale/template.txt b/mods/ITEMS/mcl_jukebox/locale/template.txt deleted file mode 100644 index 67d7ac97ce..0000000000 --- a/mods/ITEMS/mcl_jukebox/locale/template.txt +++ /dev/null @@ -1,11 +0,0 @@ -# textdomain: mcl_jukebox -Music Disc= -A music disc holds a single music track which can be used in a jukebox to play music.= -Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.= -Music Disc= -@1—@2= -Jukebox= -Jukeboxes play music when they're supplied with a music disc.= -Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.= -Now playing: @1—@2= -Uses music discs to play music= diff --git a/mods/ITEMS/mcl_jukebox/mod.conf b/mods/ITEMS/mcl_jukebox/mod.conf deleted file mode 100644 index 9046ff7d32..0000000000 --- a/mods/ITEMS/mcl_jukebox/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_jukebox -description = Jukebox and music discs are used to play background music on a per-player basis. -depends = mcl_core, mcl_sounds, mcl_colors diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_1.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_1.ogg deleted file mode 100644 index c97a779750..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_1.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_2.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_2.ogg deleted file mode 100644 index e727dc8130..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_2.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_3.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_3.ogg deleted file mode 100644 index f23b01ebc1..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_3.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_4.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_4.ogg deleted file mode 100644 index e6965024e6..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_4.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_5.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_5.ogg deleted file mode 100644 index dcad499d96..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_5.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_6.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_6.ogg deleted file mode 100644 index 9982d29624..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_6.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_7.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_7.ogg deleted file mode 100644 index 125eff574c..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_7.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_8.ogg b/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_8.ogg deleted file mode 100644 index d6ad04b22a..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/sounds/mcl_jukebox_track_8.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_11.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_11.png deleted file mode 100644 index d0ded01cd6..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_11.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_13.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_13.png deleted file mode 100644 index 93431042c8..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_13.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_blocks.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_blocks.png deleted file mode 100644 index 6f0607fbad..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_blocks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_cat.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_cat.png deleted file mode 100644 index 7fcbaca4fe..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_cat.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_chirp.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_chirp.png deleted file mode 100644 index d54390bdee..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_chirp.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_far.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_far.png deleted file mode 100644 index 5669cd546c..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_far.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mall.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mall.png deleted file mode 100644 index 9be0849857..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mall.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mellohi.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mellohi.png deleted file mode 100644 index 60e2b3464d..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_mellohi.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_stal.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_stal.png deleted file mode 100644 index 24a55f7550..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_stal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_strad.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_strad.png deleted file mode 100644 index 7048b4db73..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_strad.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_wait.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_wait.png deleted file mode 100644 index 627ddb2004..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_wait.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_ward.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_ward.png deleted file mode 100644 index 8660a4a172..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_record_ward.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_side.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_side.png deleted file mode 100644 index 621979bff6..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_top.png b/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_top.png deleted file mode 100644 index 66c3332e62..0000000000 Binary files a/mods/ITEMS/mcl_jukebox/textures/mcl_jukebox_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/init.lua b/mods/ITEMS/mcl_lanterns/init.lua deleted file mode 100644 index 65faa5e8c6..0000000000 --- a/mods/ITEMS/mcl_lanterns/init.lua +++ /dev/null @@ -1,284 +0,0 @@ -local S = minetest.get_translator("mcl_lanterns") -local modpath = minetest.get_modpath("mcl_lanterns") - -mcl_lanterns = {} - ---[[ -TODO: -- add lantern specific sounds -- remove the hack arround walmounted nodes -]] - -local allowed_non_solid_nodes_floor = { - "mcl_core:ice", - "mcl_nether:soul_sand", - "mcl_mobspawners:spawner", - "mcl_core:barrier", - "mcl_end:chorus_flower", - "mcl_end:chorus_flower_dead", - "mcl_end:end_rod", - "mcl_end:dragon_egg", - "mcl_portals:end_portal_frame_eye", - "mcl_lanterns:chain" -} - -local allowed_non_solid_groups_floor = {"anvil", "wall", "glass", "fence", "fence_gate", "pane"} - -local allowed_non_solid_nodes_ceiling = { - "mcl_core:ice", - "mcl_nether:soul_sand", - "mcl_mobspawners:spawner", - "mcl_core:barrier", - "mcl_end:chorus_flower", - "mcl_end:chorus_flower_dead", - "mcl_end:end_rod", - "mcl_core:grass_path", - "mcl_lanterns:chain" -} - -local allowed_non_solid_groups_ceiling = {"anvil", "wall", "glass", "fence", "fence_gate", "soil", "pane", "end_portal_frame"} - -local function check_placement(node, wdir) - local nn = node.name - local def = minetest.registered_nodes[nn] - - if not def then - return false - else - --wdir: - --0: ceiling - --1: floor - if wdir == 0 then - if def.groups.solid or def.groups.opaque then - return true - else - for _,i in ipairs(allowed_non_solid_nodes_ceiling) do - if nn == i then - return true - end - end - for _,j in ipairs(allowed_non_solid_groups_ceiling) do - if def.groups[j] then - return true - end - end - return false - end - else --assuming wdir == 1 - if def.groups.solid or def.groups.opaque then - return true - else - for _,i in ipairs(allowed_non_solid_nodes_floor) do - if nn == i then - return true - end - end - for _,j in ipairs(allowed_non_solid_groups_floor) do - if def.groups[j] then - return true - end - end - return false - end - end - end -end - -function mcl_lanterns.register_lantern(name, def) - local itemstring_floor = "mcl_lanterns:"..name.."_floor" - local itemstring_ceiling = "mcl_lanterns:"..name.."_ceiling" - - local sounds = mcl_sounds.node_sound_metal_defaults() - - minetest.register_node(itemstring_floor, { - description = def.description, - _doc_items_longdesc = def.longdesc, - drawtype = "mesh", - mesh = "mcl_lanterns_lantern_floor.obj", - inventory_image = def.texture_inv, - wield_image = def.texture_inv, - tiles = { - { - name = def.texture, - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - } - }, - use_texture_alpha = "clip", - paramtype = "light", - paramtype2 = "wallmounted", - place_param2 = 1, - node_placement_prediction = "", - sunlight_propagates = true, - light_source = def.light_level, - groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1}, - selection_box = { - type = "fixed", - fixed = { - {-0.1875, -0.5, -0.1875, 0.1875, -0.0625, 0.1875}, - {-0.125, -0.0625, -0.125, 0.125, 0.0625, 0.125}, - {-0.0625, -0.5, -0.0625, 0.0625, 0.1875, 0.0625}, - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.1875, -0.5, -0.1875, 0.1875, -0.0625, 0.1875}, - {-0.125, -0.0625, -0.125, 0.125, 0.0625, 0.125}, - {-0.0625, -0.5, -0.0625, 0.0625, 0.1875, 0.0625}, - }, - }, - sounds = sounds, - on_place = function(itemstack, placer, pointed_thing) - local new_stack = mcl_util.call_on_rightclick(itemstack, placer, pointed_thing) - if new_stack then - return new_stack - end - - local under = pointed_thing.under - local above = pointed_thing.above - local node = minetest.get_node(under) - - local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above)) - local fakestack = itemstack - - if check_placement(node, wdir) == false then - return itemstack - end - - if wdir == 0 then - fakestack:set_name(itemstring_ceiling) - elseif wdir == 1 then - fakestack:set_name(itemstring_floor) - end - - local success - itemstack, success = minetest.item_place(fakestack, placer, pointed_thing, wdir) - itemstack:set_name(itemstring_floor) - - if success then - minetest.sound_play(sounds.place, {pos = under, gain = 1}, true) - end - - return itemstack - end, - on_rotate = false, - _mcl_hardness = 3.5, - _mcl_blast_resistance = 3.5, - }) - - minetest.register_node(itemstring_ceiling, { - description = def.description, - _doc_items_create_entry = false, - drawtype = "mesh", - mesh = "mcl_lanterns_lantern_ceiling.obj", - tiles = { - { - name = def.texture, - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - } - }, - use_texture_alpha = "clip", - paramtype = "light", - paramtype2 = "wallmounted", - place_param2 = 0, - node_placement_prediction = "", - sunlight_propagates = true, - light_source = def.light_level, - groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1, not_in_creative_inventory = 1}, - drop = itemstring_floor, - selection_box = { - type = "fixed", - fixed = { - {-0.1875, 0, -0.1875, 0.1875, 0.4375, 0.1875}, - {-0.125, -0.125, -0.125, 0.125, 0, 0.125}, - {-0.0625, -0.5, -0.0625, 0.0625, -0.125, 0.0625}, - }, - }, - collision_box = { - type = "fixed", - fixed = { - {-0.1875, 0, -0.1875, 0.1875, 0.4375, 0.1875}, - {-0.125, -0.125, -0.125, 0.125, 0, 0.125}, - {-0.0625, -0.5, -0.0625, 0.0625, -0.125, 0.0625}, - }, - }, - sounds = sounds, - on_rotate = false, - _mcl_hardness = 3.5, - _mcl_blast_resistance = 3.5, - }) -end - -minetest.register_node("mcl_lanterns:chain", { - description = S("Chain"), - _doc_items_longdesc = S("Chains are metallic decoration blocks."), - inventory_image = "mcl_lanterns_chain_inv.png", - tiles = {"mcl_lanterns_chain.png"}, - drawtype = "mesh", - paramtype = "light", - paramtype2 = "facedir", - use_texture_alpha = "clip", - mesh = "mcl_lanterns_chain.obj", - is_ground_content = false, - sunlight_propagates = true, - collision_box = { - type = "fixed", - fixed = { - {-0.0625, -0.5, -0.0625, 0.0625, 0.5, 0.0625}, - } - }, - selection_box = { - type = "fixed", - fixed = { - {-0.0625, -0.5, -0.0625, 0.0625, 0.5, 0.0625}, - } - }, - groups = {pickaxey = 1, deco_block = 1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - local p0 = pointed_thing.under - local p1 = pointed_thing.above - local param2 = 0 - - local placer_pos = placer:get_pos() - if placer_pos then - local dir = { - x = p1.x - placer_pos.x, - y = p1.y - placer_pos.y, - z = p1.z - placer_pos.z - } - param2 = minetest.dir_to_facedir(dir) - end - - if p0.y - 1 == p1.y then - param2 = 20 - elseif p0.x - 1 == p1.x then - param2 = 16 - elseif p0.x + 1 == p1.x then - param2 = 12 - elseif p0.z - 1 == p1.z then - param2 = 8 - elseif p0.z + 1 == p1.z then - param2 = 4 - end - - return minetest.item_place(itemstack, placer, pointed_thing, param2) - end, - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - -minetest.register_craft({ - output = "mcl_lanterns:chain", - recipe = { - {"mcl_core:iron_nugget"}, - {"mcl_core:iron_ingot"}, - {"mcl_core:iron_nugget"}, - }, -}) - -dofile(modpath.."/register.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/locale/mcl_lanterns.fr.tr b/mods/ITEMS/mcl_lanterns/locale/mcl_lanterns.fr.tr deleted file mode 100644 index b28822b75b..0000000000 --- a/mods/ITEMS/mcl_lanterns/locale/mcl_lanterns.fr.tr +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_lanterns -Lantern=Lanterne -Soul Lantern=Lanterne des âmes -Lanterns are light sources which can be placed on the top or the bottom of most blocks.=Les lanternes sont des blocs lumineux qui peuvent être placés au dessus ou en dessous de la plupart des blocs. -Chain=Chaîne -Chains are metallic decoration blocks.=La chaîne est un bloc de décoration métalique. \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/locale/template.txt b/mods/ITEMS/mcl_lanterns/locale/template.txt deleted file mode 100644 index 545118b54a..0000000000 --- a/mods/ITEMS/mcl_lanterns/locale/template.txt +++ /dev/null @@ -1,6 +0,0 @@ -# textdomain: mcl_lanterns -Lantern= -Soul Lantern= -Lanterns are light sources which can be placed on the top or the bottom of most blocks.= -Chain= -Chains are metallic decoration blocks.= \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/mod.conf b/mods/ITEMS/mcl_lanterns/mod.conf deleted file mode 100644 index 746ffcb158..0000000000 --- a/mods/ITEMS/mcl_lanterns/mod.conf +++ /dev/null @@ -1,6 +0,0 @@ -name = mcl_lanterns -description = Add lanterns and chains to MineClone2 -depends = mcl_sounds -optional_depends = -author = AFCMS -title = MineClone2 Lanterns \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_chain.obj b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_chain.obj deleted file mode 100644 index 94a7b8971f..0000000000 --- a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_chain.obj +++ /dev/null @@ -1,24 +0,0 @@ -# Blender v3.0.1 OBJ File: 'chain.blend' -# www.blender.org -o Plane -v 0.066291 0.500000 0.066291 -v 0.066291 -0.500000 0.066291 -v -0.066291 0.500000 -0.066291 -v -0.066291 -0.500000 -0.066291 -v -0.066291 0.500000 0.066291 -v -0.066291 -0.500000 0.066291 -v 0.066291 0.500000 -0.066291 -v 0.066291 -0.500000 -0.066291 -vt -0.000000 1.000000 -vt 0.000000 -0.000000 -vt 0.187500 0.000000 -vt 0.187500 1.000000 -vt 0.187500 1.000000 -vt 0.187500 -0.000000 -vt 0.375000 -0.000000 -vt 0.375000 1.000000 -vn 0.7071 0.0000 -0.7071 -vn 0.7071 0.0000 0.7071 -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 5/5/2 6/6/2 8/7/2 7/8/2 diff --git a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_ceiling.obj b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_ceiling.obj deleted file mode 100644 index 7079aa7cb2..0000000000 --- a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_ceiling.obj +++ /dev/null @@ -1,104 +0,0 @@ -# Blender v3.0.1 OBJ File: 'lantern.blend' -# www.blender.org -o Lantern_Ceiling -v 0.187500 -0.000000 0.187500 -v 0.187500 0.437500 0.187500 -v 0.187500 0.000000 -0.187500 -v 0.187500 0.437500 -0.187500 -v -0.187500 -0.000000 0.187500 -v -0.187500 0.437500 0.187500 -v -0.187500 0.000000 -0.187500 -v -0.187500 0.437500 -0.187500 -v 0.125000 -0.125000 0.125000 -v 0.125000 -0.000000 0.125000 -v 0.125000 -0.125000 -0.125000 -v 0.125000 0.000000 -0.125000 -v -0.125000 -0.125000 0.125000 -v -0.125000 -0.000000 0.125000 -v -0.125000 -0.125000 -0.125000 -v -0.125000 0.000000 -0.125000 -v 0.066291 -0.500000 -0.066291 -v 0.066291 -0.125000 -0.066291 -v -0.066291 -0.500000 0.066291 -v -0.066291 -0.125000 0.066291 -v -0.066291 -0.500000 -0.066291 -v -0.066291 -0.125000 -0.066291 -v 0.066291 -0.500000 0.066291 -v 0.066291 -0.125000 0.066291 -vt 0.000000 0.062500 -vt 0.375000 0.062500 -vt 0.375000 0.437500 -vt 0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt -0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt 0.000000 0.437500 -vt 0.000000 0.062500 -vt 0.375000 0.062500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt 0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt -0.000000 0.437500 -vt 0.062500 0.125000 -vt 0.312500 0.125000 -vt 0.312500 0.375000 -vt 0.062500 0.375000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.687500 0.625000 -vt 0.687500 0.250000 -vt 0.875000 0.250000 -vt 0.875000 0.625000 -vt 0.687500 1.000000 -vt 0.687500 0.625000 -vt 0.875000 0.625000 -vt 0.875000 1.000000 -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 -vn 0.7071 -0.0000 0.7071 -vn 0.7071 0.0000 -0.7071 -s off -f 1/1/1 5/2/1 7/3/1 3/4/1 -f 4/5/2 3/6/2 7/7/2 8/8/2 -f 8/9/3 7/10/3 5/11/3 6/12/3 -f 6/13/4 2/14/4 4/5/4 8/8/4 -f 2/15/5 1/16/5 3/17/5 4/18/5 -f 6/19/6 5/20/6 1/21/6 2/22/6 -f 9/23/1 13/24/1 15/25/1 11/26/1 -f 12/27/2 11/28/2 15/29/2 16/30/2 -f 16/31/3 15/32/3 13/33/3 14/34/3 -f 14/35/4 10/36/4 12/37/4 16/38/4 -f 10/39/5 9/40/5 11/41/5 12/42/5 -f 14/43/6 13/44/6 9/45/6 10/46/6 -f 17/47/7 18/48/7 20/49/7 19/50/7 -f 21/51/8 22/52/8 24/53/8 23/54/8 diff --git a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj deleted file mode 100644 index c90ece6804..0000000000 --- a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj +++ /dev/null @@ -1,104 +0,0 @@ -# Blender v3.0.1 OBJ File: 'lantern.blend' -# www.blender.org -o Lantern_Floor -v 0.187500 -0.062500 -0.187500 -v 0.187500 -0.500000 -0.187500 -v 0.187500 -0.062500 0.187500 -v 0.187500 -0.500000 0.187500 -v -0.187500 -0.062500 -0.187500 -v -0.187500 -0.500000 -0.187500 -v -0.187500 -0.062500 0.187500 -v -0.187500 -0.500000 0.187500 -v 0.125000 0.062500 -0.125000 -v 0.125000 -0.062500 -0.125000 -v 0.125000 0.062500 0.125000 -v 0.125000 -0.062500 0.125000 -v -0.125000 0.062500 -0.125000 -v -0.125000 -0.062500 -0.125000 -v -0.125000 0.062500 0.125000 -v -0.125000 -0.062500 0.125000 -v 0.066291 0.187500 0.066291 -v 0.066291 0.062500 0.066291 -v -0.066291 0.187500 -0.066291 -v -0.066291 0.062500 -0.066291 -v -0.066291 0.187500 0.066291 -v -0.066291 0.062500 0.066291 -v 0.066291 0.187500 -0.066291 -v 0.066291 0.062500 -0.066291 -vt 0.000000 0.062500 -vt 0.375000 0.062500 -vt 0.375000 0.437500 -vt 0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt -0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt 0.000000 0.437500 -vt 0.000000 0.062500 -vt 0.375000 0.062500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt 0.000000 0.437500 -vt 0.375000 0.437500 -vt 0.375000 0.875000 -vt -0.000000 0.875000 -vt -0.000000 0.437500 -vt 0.062500 0.125000 -vt 0.312500 0.125000 -vt 0.312500 0.375000 -vt 0.062500 0.375000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.500000 0.770833 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 1.000000 -vt 0.062500 1.000000 -vt 0.062500 0.875000 -vt 0.687500 0.937500 -vt 0.687500 0.812500 -vt 0.875000 0.812500 -vt 0.875000 0.937500 -vt 0.687500 0.937500 -vt 0.687500 0.812500 -vt 0.875000 0.812500 -vt 0.875000 0.937500 -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 -vn 0.7071 0.0000 -0.7071 -vn 0.7071 0.0000 0.7071 -s off -f 1/1/1 5/2/1 7/3/1 3/4/1 -f 4/5/2 3/6/2 7/7/2 8/8/2 -f 8/9/3 7/10/3 5/11/3 6/12/3 -f 6/13/4 2/14/4 4/5/4 8/8/4 -f 2/15/5 1/16/5 3/17/5 4/18/5 -f 6/19/6 5/20/6 1/21/6 2/22/6 -f 9/23/1 13/24/1 15/25/1 11/26/1 -f 12/27/2 11/28/2 15/29/2 16/30/2 -f 16/31/3 15/32/3 13/33/3 14/34/3 -f 14/35/4 10/36/4 12/37/4 16/38/4 -f 10/39/5 9/40/5 11/41/5 12/42/5 -f 14/43/6 13/44/6 9/45/6 10/46/6 -f 17/47/7 18/48/7 20/49/7 19/50/7 -f 21/51/8 22/52/8 24/53/8 23/54/8 diff --git a/mods/ITEMS/mcl_lanterns/register.lua b/mods/ITEMS/mcl_lanterns/register.lua deleted file mode 100644 index efdd1ed98d..0000000000 --- a/mods/ITEMS/mcl_lanterns/register.lua +++ /dev/null @@ -1,26 +0,0 @@ -local S = minetest.get_translator("mcl_lanterns") - -mcl_lanterns.register_lantern("lantern", { - description = S("Lantern"), - longdesc = S("Lanterns are light sources which can be placed on the top or the bottom of most blocks."), - texture = "mcl_lanterns_lantern.png", - texture_inv = "mcl_lanterns_lantern_inv.png", - light_level = 14, -}) - -mcl_lanterns.register_lantern("soul_lantern", { - description = S("Soul Lantern"), - longdesc = S("Lanterns are light sources which can be placed on the top or the bottom of most blocks."), - texture = "mcl_lanterns_soul_lantern.png", - texture_inv = "mcl_lanterns_soul_lantern_inv.png", - light_level = 10, -}) - -minetest.register_craft({ - output = "mcl_lanterns:lantern_floor", - recipe = { - {"mcl_core:iron_nugget", "mcl_core:iron_nugget", "mcl_core:iron_nugget"}, - {"mcl_core:iron_nugget", "mcl_torches:torch" , "mcl_core:iron_nugget"}, - {"mcl_core:iron_nugget", "mcl_core:iron_nugget", "mcl_core:iron_nugget"}, - }, -}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png deleted file mode 100644 index 01725114a6..0000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png deleted file mode 100644 index a8c89dab46..0000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern.png deleted file mode 100644 index f9936e0fbb..0000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern_inv.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern_inv.png deleted file mode 100644 index 8bdc8095fc..0000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern.png deleted file mode 100644 index 6e20058ea3..0000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern.png and /dev/null differ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern_inv.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern_inv.png deleted file mode 100644 index 55624c7492..0000000000 Binary files a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/README.md b/mods/ITEMS/mcl_loom/README.md deleted file mode 100644 index 08ee0dea37..0000000000 --- a/mods/ITEMS/mcl_loom/README.md +++ /dev/null @@ -1,13 +0,0 @@ -mcl_loom --------- -Looms, by PrairieWind - -Adds Looms to MineClone 2/5. Used to add patterns to banners. - -License of source code ----------------------- -LGPLv2.1 - -License of media ----------------- -See the main MineClone 2 README.md file. \ No newline at end of file diff --git a/mods/ITEMS/mcl_loom/init.lua b/mods/ITEMS/mcl_loom/init.lua deleted file mode 100644 index 89960e1330..0000000000 --- a/mods/ITEMS/mcl_loom/init.lua +++ /dev/null @@ -1,27 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) --- Loom Code. Used to craft banner designs easier. Still needs a GUI. https://minecraft.fandom.com/wiki/Loom - -minetest.register_node("mcl_loom:loom", { - description = S("Loom"), - _tt_help = S("Used to create banner designs"), - _doc_items_longdesc = S("This is the shepherd villager's work station. It is used to create banner designs."), - tiles = { - "loom_top.png", "loom_bottom.png", - "loom_side.png", "loom_side.png", - "loom_front.png", "loom_front.png" - }, - paramtype2 = "facedir", - groups = { axey = 2, handy = 1, deco_block = 1, material_wood = 1, flammable = 1 }, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5 - }) - - -minetest.register_craft({ - output = "mcl_loom:loom", - recipe = { - { "", "", "" }, - { "mcl_mobitems:string", "mcl_mobitems:string", "" }, - { "group:wood", "group:wood", "" }, - } -}) diff --git a/mods/ITEMS/mcl_loom/mod.conf b/mods/ITEMS/mcl_loom/mod.conf deleted file mode 100644 index 9ebb10ff31..0000000000 --- a/mods/ITEMS/mcl_loom/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_loom -author = PrairieWind -description = Adds the loom villager workstation to MineClone 2/5. Used to add patterns to banners. \ No newline at end of file diff --git a/mods/ITEMS/mcl_loom/textures/loom_bottom.png b/mods/ITEMS/mcl_loom/textures/loom_bottom.png deleted file mode 100644 index 835d36fca7..0000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_bottom1.png b/mods/ITEMS/mcl_loom/textures/loom_bottom1.png deleted file mode 100644 index f5dfe81895..0000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_bottom1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_front.png b/mods/ITEMS/mcl_loom/textures/loom_front.png deleted file mode 100644 index ba1aebc800..0000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_front.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_front1.png b/mods/ITEMS/mcl_loom/textures/loom_front1.png deleted file mode 100644 index 411e518913..0000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_front1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_side.png b/mods/ITEMS/mcl_loom/textures/loom_side.png deleted file mode 100644 index bbeaeb6d80..0000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_side1.png b/mods/ITEMS/mcl_loom/textures/loom_side1.png deleted file mode 100644 index baf1aed5d3..0000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_side1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_top.png b/mods/ITEMS/mcl_loom/textures/loom_top.png deleted file mode 100644 index af980f3c19..0000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_loom/textures/loom_top1.png b/mods/ITEMS/mcl_loom/textures/loom_top1.png deleted file mode 100644 index febcb864d0..0000000000 Binary files a/mods/ITEMS/mcl_loom/textures/loom_top1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/README.md b/mods/ITEMS/mcl_mushrooms/README.md deleted file mode 100644 index eefe3c3ff9..0000000000 --- a/mods/ITEMS/mcl_mushrooms/README.md +++ /dev/null @@ -1 +0,0 @@ -This mod adds small and huge mushrooms. Small mushrooms like to spread in darkness. diff --git a/mods/ITEMS/mcl_mushrooms/huge.lua b/mods/ITEMS/mcl_mushrooms/huge.lua deleted file mode 100644 index 0e99ae0be2..0000000000 --- a/mods/ITEMS/mcl_mushrooms/huge.lua +++ /dev/null @@ -1,228 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local vector = vector - -local template = { - groups = { - handy = 1, axey = 1, building_block = 1, material_wood = 1, - flammable = -1, compostability = 85 - }, - sounds = mcl_sounds.node_sound_wood_defaults(), - is_ground_content = true, - _mcl_blast_resistance = 0.2, - _mcl_hardness = 0.2, - _mcl_silk_touch_drop = true, -} - -local red = table.copy(template) -red.drop = { - items = { - { items = {"mcl_mushrooms:mushroom_red"}, rarity = 2 }, - { items = {"mcl_mushrooms:mushroom_red"}, rarity = 2 }, - } -} - -local brown= table.copy(template) -brown.drop = { - items = { - { items = {"mcl_mushrooms:mushroom_brown"}, rarity = 2 }, - { items = {"mcl_mushrooms:mushroom_brown"}, rarity = 2 }, - } -} - --- Convert a number to a string with 6 binary digits -local function to_binary(num) - local binary = "" - while (num > 0) do - local remainder_binary = (num % 2) > 0 and 1 or 0 - binary = binary .. remainder_binary - num = math.floor(num/2) - end - binary = string.reverse(binary) - while (string.len(binary) < 6) do - binary = "0" .. binary - end - return binary -end - -local function register_mushroom(color, species_id, template, d_cap, d_stem, d_stem_all, longdesc_cap, longdesc_stem) - - -- Stem texture on all sides - local stem_full = table.copy(template) - stem_full.description = d_stem_all - stem_full._doc_items_longdesc = S("This decorative block is like a huge mushroom stem, but with the stem texture on all sides.") - stem_full.tiles = { "mcl_mushrooms_mushroom_block_skin_stem.png" } - stem_full.groups.huge_mushroom = species_id - stem_full.groups.huge_mushroom_stem = 2 - stem_full.groups.compostability = 65 - minetest.register_node("mcl_mushrooms:"..color.."_mushroom_block_stem_full", stem_full) - - -- Stem - local stem = table.copy(template) - stem.description = d_stem - stem._doc_items_longdesc = longdesc_stem - stem.tiles = { "mcl_mushrooms_mushroom_block_inside.png", "mcl_mushrooms_mushroom_block_inside.png", "mcl_mushrooms_mushroom_block_skin_stem.png" } - stem.groups.huge_mushroom = species_id - stem.groups.huge_mushroom_stem = 1 - stem.groups.compostability = 65 - minetest.register_node("mcl_mushrooms:"..color.."_mushroom_block_stem", stem) - - -- Mushroom block (cap) - -- Each side can either be the cap or the pores texture. - -- Cubes have 6 sides, so there's a total of 2^6 = 64 combinations - for s=0,63 do - local block = table.copy(template) - local bin = to_binary(s) - if s == 63 then - -- All-faces cap. This block is exposed to the player - block.description = d_cap - block._doc_items_longdesc = longdesc_cap - block._doc_items_usagehelp = S("By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.") - block.tiles = { "mcl_mushrooms_mushroom_block_skin_"..color..".png" } - - function block.on_construct(pos) - local sides = { - { { x= 0, y= 1, z= 0 }, 2 }, - { { x= 0, y=-1, z= 0 }, 1 }, - { { x= 1, y= 0, z= 0 }, 4 }, - { { x=-1, y= 0, z= 0 }, 3 }, - { { x= 0, y= 0, z= 1 }, 6 }, - { { x= 0, y= 0, z=-1 }, 5 }, - } - - -- Replace the side of a mushroom node. Returns the new node. - -- Or nil, if unchanged. - local function replace_side(pos, node, side) - local bin = string.sub(node.name, -6) - if string.sub(bin, side, side) == "1" then - local new_bin - if side == 1 then - new_bin = "0" .. string.sub(bin, side+1, 6) - elseif side == 6 then - new_bin = string.sub(bin, 1, side-1) .. "0" - else - new_bin = string.sub(bin, 1, side-1) .. "0" .. string.sub(bin, side+1, 6) - end - - return { name = string.sub(node.name, 1, -7) .. new_bin } - end - end - - local node = minetest.get_node(pos) - local species_self = minetest.get_item_group(node.name, "huge_mushroom") - local node_update = table.copy(node) - for i=1, #sides do - local neighbor = vector.add(pos, sides[i][1]) - local neighbor_node = minetest.get_node(neighbor) - local node_set = false - if minetest.get_item_group(neighbor_node.name, "huge_mushroom_cap") ~= 0 and minetest.get_item_group(neighbor_node.name, "huge_mushroom") == species_self then - - local i2 = sides[i][2] - local node_return = replace_side(pos, node_update, i) - if node_return then - node_update = node_return - node_set = true - end - local new_neighbor = replace_side(neighbor, neighbor_node, i2) - if new_neighbor then - minetest.set_node(neighbor, new_neighbor) - end - end - if node_set then - minetest.set_node(pos, node_update) - end - end - end - else - -- Cap block with pores on at least 1 side. - -- These blocks are used internally. - block._doc_items_create_entry = false - block.groups.not_in_creative_inventory = 1 - block.groups.not_in_craft_guide = 1 - block.tiles = {} - for t=1, string.len(bin) do - if string.sub(bin, t, t) == "1" then - block.tiles[t] = "mcl_mushrooms_mushroom_block_skin_"..color..".png" - else - block.tiles[t] = "mcl_mushrooms_mushroom_block_inside.png" - end - end - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_mushrooms:"..color.."_mushroom_block_cap_111111", "nodes", "mcl_mushrooms:"..color.."_mushroom_block_cap_"..bin) - end - end - - block.groups.huge_mushroom = species_id - block.groups.huge_mushroom_cap = s - - -- bin is a binary string with 6 digits. Each digit stands for the - -- texture of one of the sides, in the same order as the tiles parameter. - -- 0 = pores; 1 = cap. - minetest.register_node("mcl_mushrooms:"..color.."_mushroom_block_cap_"..bin, block) - end - -end - - -local longdesc_red = S("Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.") -local longdesc_red_stem = S("The stem part of a huge red mushroom.") -register_mushroom("red", 1, red, S("Huge Red Mushroom Block"), S("Huge Red Mushroom Stem"), S("Huge Red Mushroom All-Faces Stem"), longdesc_red, longdesc_red_stem) - - -local longdesc_brown = S("Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.") -local longdesc_brown_stem = S("The stem part of a huge brown mushroom.") -register_mushroom("brown", 2, brown, S("Huge Brown Mushroom Block"), S("Huge Brown Mushroom Stem"), S("Huge Brown Mushroom All-Faces Stem"), longdesc_brown, longdesc_brown_stem) - -minetest.register_craft({ - type = "fuel", - recipe = "group:huge_mushroom", - burntime = 15, -}) - --- Legacy support -local colors = { "red", "brown" } -for c=1, 2 do - local color = colors[c] - minetest.register_alias("mcl_mushrooms:"..color.."_mushroom_block_cap_full", "mcl_mushrooms:"..color.."_mushroom_block_cap_111111") - minetest.register_alias("mcl_mushrooms:"..color.."_mushroom_block_cap_top", "mcl_mushrooms:"..color.."_mushroom_block_cap_100000") - minetest.register_alias("mcl_mushrooms:"..color.."_mushroom_block_pores_full", "mcl_mushrooms:"..color.."_mushroom_block_cap_000000") -end - -minetest.register_lbm({ - label = "Replace legacy mushroom cap blocks", - name = "mcl_mushrooms:replace_legacy_mushroom_caps", - nodenames = { "mcl_mushrooms:brown_mushroom_block_cap_corner", "mcl_mushrooms:brown_mushroom_block_cap_side", "mcl_mushrooms:red_mushroom_block_cap_corner", "mcl_mushrooms:red_mushroom_block_cap_side" }, - action = function(pos, node) - for c=1, 2 do - local color = colors[c] - if node.name == "mcl_mushrooms:"..color.."_mushroom_block_cap_side" then - if node.param2 == 0 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_100001"}) - elseif node.param2 == 1 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_100100"}) -- OK - elseif node.param2 == 2 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_100010"}) - elseif node.param2 == 3 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_101000"}) - else - -- Fallback - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_101111"}) - end - elseif node.name == "mcl_mushrooms:"..color.."_mushroom_block_cap_corner" then - if node.param2 == 0 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_101001"}) - elseif node.param2 == 1 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_100101"}) -- OK - elseif node.param2 == 2 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_100110"}) -- OK - elseif node.param2 == 3 then - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_101010"}) - else - -- Fallback - minetest.set_node(pos, {name = "mcl_mushrooms:"..color.."_mushroom_block_cap_101111"}) - end - end - end - end, -}) diff --git a/mods/ITEMS/mcl_mushrooms/init.lua b/mods/ITEMS/mcl_mushrooms/init.lua deleted file mode 100644 index 1360eabe7c..0000000000 --- a/mods/ITEMS/mcl_mushrooms/init.lua +++ /dev/null @@ -1,6 +0,0 @@ -dofile(minetest.get_modpath("mcl_mushrooms").."/small.lua") -dofile(minetest.get_modpath("mcl_mushrooms").."/huge.lua") - --- Aliases for old MCL2 versions -minetest.register_alias("mcl_farming:mushroom_red", "mcl_mushrooms:mushroom_red") -minetest.register_alias("mcl_farming:mushroom_brown", "mcl_mushrooms:mushroom_brown") diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.de.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.de.tr deleted file mode 100644 index 55996ed45f..0000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.de.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Dieser dekorative Block ist wie ein Riesenpilzstängel, aber mit der Stängeltextur auf allen Seiten. -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Rote Riesenpilzblöcke sind die Kappenteile von roten Riesenpilzen. Sie bestehen aus einer roten Haut und können Poren an jede ihrer Seiten haben. -The stem part of a huge red mushroom.=Der Stängelteil eines roten Riesenpilzes. -Huge Red Mushroom Block=Roter Riesenpilzblock -Huge Red Mushroom Stem=Roter Riesenpilzstängel -Huge Red Mushroom All-Faces Stem=Roter allseitiger Riesenpilzstängel -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=Braune Riesenpilzblöcke sind die Kappenteile von braunen Riesenpilzen. Sie bestehen aus einer braunen Haut und können Poren an jede ihrer Seiten haben. -The stem part of a huge brown mushroom.=Der Stängelteil eines braunen Riesenpilzes. -Huge Brown Mushroom Block=Brauner Riesenpilzblock -Huge Brown Mushroom Stem=Brauner Riesenpilzstängel -Huge Brown Mushroom All-Faces Stem=Brauner allseitiger Riesenpilzstängel -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Braune Pilze wachsen und breiten sich in der Dunkelheit aus, aber sie sind lichtempfindlich. Als solche sind sie ungenießbar, aber sie können benutzt werden, um Lebensmittel herzustellen. -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Rote Pilze wachsen und breiten sich in der Dunkelheit aus, aber sie sind lichtempfindlich. Als solche sind sie ungenießbar, aber sie können benutzt werden, um Lebensmittel herzustellen. -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Ein einzelner Pilz dieser Art wird sich im Laufe der Zeit zu einem zufälligen festem undurchsichtigem Block mit einer Lichtstärke von 12 oder weniger in einem 3×3×3-Würfel um den Pilz hin ausbreiten. Er wird sich nicht weiter ausbreiten, wenn sich 5 oder mehr Pilze der gleichen Art innerhalb eines Bereichs von 9×3×9 Blöcken um den Pilz befinden. -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Pilze werden sich bei einer Lichtstärke von mindestens 12 irgendwann selbst entwurzeln. Auf Myzel oder Podsol überleben sie und breiten sich bei jeder Lichtstärke aus. -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Diser Pilz kann auf Myzel und Podsol in jeder Lichtstärke platziert werden. Er kann auch auf Blöcken platziert werden, die sowohl fest als auch undurchsichtig sind, solange die Lichtstärke des Tageslichts nicht höher als 12 ist. -Brown Mushroom=Brauner Pilz -Red Mushroom=Roter Pilz -Mushroom Stew=Pilzsuppe -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=Pilzsuppe ist eine gesunde Suppe, die für ein paar Hungerpunkte konsumiert werden kann. -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=Wenn Riesenpilzblöcke der selben Art nebeneinander platziert werden, werden sich die Seiten, die sich berühren, dauerhaft zu Poren verwandeln. -Grows on podzol, mycelium and other blocks=Wächst auf Podsol, Myzel und anderen Blöcken -Spreads in darkness=Breitet sich in der Dunkelheit aus diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.es.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.es.tr deleted file mode 100644 index fc81adf985..0000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.es.tr +++ /dev/null @@ -1,22 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Este bloque decorativo es como un gran tallo de hongo, pero con la textura del tallo en todos los lados. -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Enormes bloques de hongos rojos son las partes de la tapa de enormes hongos rojos. Consiste en una piel roja y puede tener poros en cada uno de sus lados. -The stem part of a huge red mushroom.=La parte del tallo de un champiñón rojo enorme. -Huge Red Mushroom Block=Bloque de champiñón rojo -Huge Red Mushroom Stem=Tallo de champiñón rojo -Huge Red Mushroom All-Faces Stem=Tallo de champiñón rojo (Todas las caras) -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=Braune Riesenpilzblöcke sind die Kappenteile von braunen Riesenpilzen. Sie bestehen aus einer braunen Haut und können Poren an jede ihrer Seiten haben. -The stem part of a huge brown mushroom.=Der Stängelteil eines braunen Riesenpilzes. -Huge Brown Mushroom Block=Bloque de champiñón marrón -Huge Brown Mushroom Stem=Tallo de champiñón marrón -Huge Brown Mushroom All-Faces Stem=Tallo de champiñón marrón (Todas las caras) -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Los hongos marrones son hongos que crecen y se propagan en la oscuridad, pero son sensibles a la luz. No son comestibles como tales, pero pueden usarse para fabricar alimentos. -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Los hongos rojos son hongos que crecen y se propagan en la oscuridad, pero son sensibles a la luz. No son comestibles como tales, pero pueden usarse para fabricar alimentos. -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Un solo hongo de esta especie se extenderá lentamente con el tiempo hacia un bloque opaco sólido aleatorio con un nivel de luz de 12 o menos en un cubo de 3 × 3 × 3 alrededor del hongo. Se detiene cuando hay 5 o más hongos de la misma especie dentro de un área de 9 × 3 × 9 bloques alrededor del hongo. -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Los hongos eventualmente se desarraigarán a un nivel de luz de 12 o más. En micelio o podzol, sobreviven y se propagan a cualquier nivel de luz. -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Este hongo se puede colocar sobre micelio y podzol a cualquier nivel de luz. También se puede colocar en bloques que sean sólidos y opacos, siempre que el nivel de luz durante el día no sea superior a 12. -Brown Mushroom=Champiñón marrón -Red Mushroom=Champiñón rojo -Mushroom Stew=Estofado de champiñones -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=El estofado de champiñones es una sopa saludable que se puede consumir para restaurar algunos puntos de hambre. -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=Al colocar enormes bloques de hongos de la misma especie uno al lado del otro, los lados que se tocan se convertirán en poros permanentemente. diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.fr.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.fr.tr deleted file mode 100644 index 647b364433..0000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.fr.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Ce bloc décoratif ressemble à une tige de champignon géant, mais avec la texture de la tige de tous les côtés. -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Blocs de champignons rouges géants sont les parties du chapeau d'énormes champignons rouges. Il se compose d'une peau rouge et peut avoir des pores sur chacun de ses côtés. -The stem part of a huge red mushroom.=La partie tige d'un énorme champignon rouge. -Huge Red Mushroom Block=Bloc de Champignon Rouge Géant -Huge Red Mushroom Stem=Tige de Champignon Rouge Géant -Huge Red Mushroom All-Faces Stem=Tige de Champignon Rouge Géant avec Pores -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=D'énormes blocs de champignons bruns sont les parties du chapeau d'énormes champignons bruns. Il se compose d'une peau brune et peut avoir des pores sur chacun de ses côtés. -The stem part of a huge brown mushroom.=La partie tige d'un énorme champignon brun. -Huge Brown Mushroom Block=Bloc de Champignon Marron Géant -Huge Brown Mushroom Stem=Tige de Champignon Marron Géant -Huge Brown Mushroom All-Faces Stem=Tige de Champignon Marron Géant avec Pores -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Les champignons bruns sont des champignons qui poussent et se propagent dans l'obscurité, mais sont sensibles à la lumière. Ils sont non comestibles en tant que tels, mais ils peuvent être utilisés pour fabriquer des aliments. -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Les champignons rouges sont des champignons qui poussent et se propagent dans l'obscurité, mais sont sensibles à la lumière. Ils sont non comestibles en tant que tels, mais ils peuvent être utilisés pour fabriquer des aliments. -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Un seul champignon de cette espèce se propagera lentement au fil du temps vers un bloc opaque solide aléatoire avec un niveau de lumière de 12 ou moins dans un cube 3×3×3 autour du champignon. Il cesse de se propager lorsqu'il y a 5 champignons ou plus de la même espèce dans une zone de 9×3×9 blocs autour du champignon. -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Les champignons finiront par déraciner à un niveau de lumière de 12 ou plus. Sur le mycélium ou le podzol, ils survivent et se propagent à n'importe quel niveau de lumière. -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Ce champignon peut être placé sur le mycélium et le podzol à n'importe quel niveau de lumière. Il peut également être placé sur des blocs à la fois solides et opaques, tant que le niveau de lumière pendant la journée n'est pas supérieur à 12. -Brown Mushroom=Champignon Marron -Red Mushroom=Champignon Rouge -Mushroom Stew=Ragoût de Champignon -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=Le ragoût de champignons est une soupe saine qui peut être consommée pour restaurer certains points de faim. -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=En plaçant d'énormes blocs de champignons de la même espèce les uns à côté des autres, les côtés qui se touchent se transformeront en pores de façon permanente. -Grows on podzol, mycelium and other blocks=Pousse sur podzol, mycélium et autres blocs -Spreads in darkness=Se propage dans l'obscurité diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.pl.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.pl.tr deleted file mode 100644 index 3a05b5fb0d..0000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.pl.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Ten dekoracyjny blok jest jak łodyga grzyba, ale z teksturą łodygi na każdej stronie. -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Duże czerwone bloki grzybów to część kapelusza dużych czerwonych grzybów. Składają się z czerwonej skóry i mogą mieć pory na ścianach. -The stem part of a huge red mushroom.=Część łodygi dużego czerwonego grzyba. -Huge Red Mushroom Block=Blok dużego czerwonego grzyba -Huge Red Mushroom Stem=Łodyga dużego czerwonego grzyba -Huge Red Mushroom All-Faces Stem=Łodyga dużego czerwonego grzyba (wszystkie ściany) -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=Duże brązowe bloki grzybów to część kapelusza dużych brązowych grzybów. Składają się z czerwonej skóry i mogą mieć pory na ścianach. -The stem part of a huge brown mushroom.=Część łodygi dużego brązowego grzyba. -Huge Brown Mushroom Block=Blok dużego brązowego grzyba -Huge Brown Mushroom Stem=Łodyga dużego brązowego grzyba -Huge Brown Mushroom All-Faces Stem=Łodyga dużego brązowego grzyba (wszystkie ściany) -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Brązowe grzyby to grzyby rosnące i rozprzestrzeniające się w ciemności i czułe na światło. Same są niejadalne, jednak można je wykorzystać do stworzenia jedzenia. -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Czerwone grzyby to grzyby rosnące i rozprzestrzeniające się w ciemności i czułe na światło. Same są niejadalne, jednak można je wykorzystać do stworzenia jedzenia. -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Pojedynczy grzyb tego gatunku będzie powoli rozrastał się na losowe, nieprzezroczyste, stałe bloki z poziomem oświetlenia 12 lub niższym w sześcianie 3×3×3 wokół grzyba. -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Grzyby po jakimś czasie obumrą w oświetlenie o poziomie 12 i wyższym. Na grzybni i bielicy przeżyją i będą się rozprzestrzeniać przy każdym poziomie oświetlenia. -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Ten grzyb może być postawiony na grzybni oraz bielicy przy dowolnym poziomie oświetlenia. Można go również postawić na dowolnym stałym, nieprzezroczystym bloku tylko jeśli poziom oświetlenia jest nie większy niż 12. -Brown Mushroom=Brązowy grzyb -Red Mushroom=Czerwony grzyb -Mushroom Stew=Zupa grzybowa -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=Zupa grzybowa jest zdrową zupą, którą można zjeść by odzyskać punkty głodu. -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=Kładą bloki dużych grzybów tego samego gatunku obok siebie, ich dotykające się boki zamienią się na stałe w pory. -Grows on podzol, mycelium and other blocks=Rośnie na bielicy, grzybni i innych blokach. -Spreads in darkness=Rozprzestrzenia się w ciemności diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.ru.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.ru.tr deleted file mode 100644 index ba3cb171e2..0000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.ru.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Этот декоративный блок похож на огромную ножку гриба, но имеет структуру ножки с каждой стороны. -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Блоки огромных красных грибов это части шляпок огромных красных грибов. Они состоят из красной кожицы и могут иметь поры на каждой стороне. -The stem part of a huge red mushroom.=Часть ножки огромного красного гриба. -Huge Red Mushroom Block=Блок огромного красного гриба -Huge Red Mushroom Stem=Ножка огромного красного гриба -Huge Red Mushroom All-Faces Stem=Многоликая ножка огромного красного гриба -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=Блоки огромных коричневых грибов это части шляпок огромных коричневых грибов. Они состоят из коричневой кожицы и могут иметь поры на каждой стороне. -The stem part of a huge brown mushroom.=Часть ножки огромного коричневого гриба. -Huge Brown Mushroom Block=Блок огромного коричневого гриба -Huge Brown Mushroom Stem=Ножка огромного коричневого гриба -Huge Brown Mushroom All-Faces Stem=Многоликая ножка огромного коричневого гриба -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Коричневые грибы растут в темноте, но чувствительны к свету. Они несъедобны как таковые, но их можно использовать для приготовления продуктов питания. -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Красные грибы растут в темноте, но чувствительны к свету. Они несъедобны как таковые, но их можно использовать для приготовления продуктов питания. -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Одиночный гриб этого вида со временем будет медленно распространяться в направлении случайного твердого непрозрачного блока при уровне освещённости 12 и ниже пределах куба 3×3×3 вокруг себя. Он перестает распространяться, когда будет уже 5 и более грибов одного и того же вида на участке 9×3×9 блоков вокруг гриба. -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Грибы вымирают при уровне света 12 и выше. Но на мицелии и подзоле они выживают и распространяются при любом уровне освещенности. -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Этот гриб можно высадить на мицелий и подзол при любом уровне света. Его также можно размещать на плотных непрозрачных блоках, если уровень освещенности в дневное время не превышает 12. -Brown Mushroom=Коричневый гриб -Red Mushroom=Красный гриб -Mushroom Stew=Грибная похлёбка -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=Грибная похлёбка - это полезный суп, который можно употребить в пищу для восстановления нескольких очков голода. -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=Если поместить блоки огромных грибов одного и того же вида рядом друг с другом, стороны, которыми они соприкасаются друг с другом, сразу превратятся в поры. -Grows on podzol, mycelium and other blocks=Растёт на подзолах, мицелии и других блоках -Spreads in darkness=Распространяется в темноте diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.zh_TW.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.zh_TW.tr deleted file mode 100644 index f4c6ba1928..0000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.zh_TW.tr +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=這個裝飾塊就像一個巨大的蘑菇莖,但四面都有莖的紋理。 -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=紅色蘑菇方塊是巨大的紅蘑菇的菌蓋部分。它由紅色的皮膚組成,每一面都可以有毛孔。 -The stem part of a huge red mushroom.= -Huge Red Mushroom Block=紅色蘑菇方塊 -Huge Red Mushroom Stem=紅色蘑菇柄 -Huge Red Mushroom All-Faces Stem=紅色蘑菇(全紋理)柄 -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.= -The stem part of a huge brown mushroom.= -Huge Brown Mushroom Block=棕色蘑菇方塊 -Huge Brown Mushroom Stem=棕色蘑菇柄 -Huge Brown Mushroom All-Faces Stem=棕色蘑菇(全紋理)柄 -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=棕色蘑菇是在黑暗中生長和傳播的真菌,但對光線敏感。它們本身不能食用,但可以用來製作食品。 -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=紅色蘑菇是在黑暗中生長和傳播的真菌,但對光線敏感。它們本身不能食用,但可以用來製作食品。 -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=這個品種的單個蘑菇會隨著時間的推移,慢慢地向蘑菇周圍3×3×3立方體中光照度為12或更低的隨機固體不透明方塊擴散。當蘑菇周圍9×3×9塊的區域內有5個或更多相同種類的蘑菇時,它就會停止擴散。 -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=蘑菇最終會在12或更高的光照水平下連根拔起。在菌絲體或灰壤上,它們在任何光照水平下都能生存和傳播。 -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=這種蘑菇可以放置在任何光照水平的菌絲和莢膜上。只要白天的光照度不高於12,它也可以放在既堅固又不透明的木塊上。 -Brown Mushroom=棕色蘑菇 -Red Mushroom=紅色蘑菇 -Mushroom Stew=蘑菇湯 -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=蘑菇湯是一種健康的湯,食用後可以恢復一些飢餓值。 -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=通過將同一物種的巨大蘑菇塊放在一起,相互接觸的側面將永久地變成毛孔。 -Grows on podzol, mycelium and other blocks=在灰壤,菌絲體和其他方塊上生長 -Spreads in darkness=在黑暗中擴散 diff --git a/mods/ITEMS/mcl_mushrooms/locale/template.txt b/mods/ITEMS/mcl_mushrooms/locale/template.txt deleted file mode 100644 index 41ebdaa8fb..0000000000 --- a/mods/ITEMS/mcl_mushrooms/locale/template.txt +++ /dev/null @@ -1,24 +0,0 @@ -# textdomain: mcl_mushrooms -This decorative block is like a huge mushroom stem, but with the stem texture on all sides.= -Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.= -The stem part of a huge red mushroom.= -Huge Red Mushroom Block= -Huge Red Mushroom Stem= -Huge Red Mushroom All-Faces Stem= -Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.= -The stem part of a huge brown mushroom.= -Huge Brown Mushroom Block= -Huge Brown Mushroom Stem= -Huge Brown Mushroom All-Faces Stem= -Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.= -Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.= -A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.= -Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.= -This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.= -Brown Mushroom= -Red Mushroom= -Mushroom Stew= -Mushroom stew is a healthy soup which can be consumed to restore some hunger points.= -By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.= -Grows on podzol, mycelium and other blocks= -Spreads in darkness= diff --git a/mods/ITEMS/mcl_mushrooms/mod.conf b/mods/ITEMS/mcl_mushrooms/mod.conf deleted file mode 100644 index 20f7bef167..0000000000 --- a/mods/ITEMS/mcl_mushrooms/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_mushrooms -depends = mcl_sounds, mcl_util -optional_depends = doc diff --git a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_brown.mts b/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_brown.mts deleted file mode 100644 index b74e726863..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_brown.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_red.mts b/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_red.mts deleted file mode 100644 index 84e6981095..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_giant_red.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_brown.mts b/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_brown.mts deleted file mode 100644 index 431cf65660..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_brown.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_red.mts b/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_red.mts deleted file mode 100644 index 57520bf67f..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/schematics/mcl_mushrooms_huge_red.mts and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/small.lua b/mods/ITEMS/mcl_mushrooms/small.lua deleted file mode 100644 index f6fbd29091..0000000000 --- a/mods/ITEMS/mcl_mushrooms/small.lua +++ /dev/null @@ -1,166 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local on_place = mcl_util.generate_on_place_plant_function(function(place_pos, place_node) - local soil_node = minetest.get_node_or_nil({x=place_pos.x, y=place_pos.y-1, z=place_pos.z}) - if not soil_node then return false end - local snn = soil_node.name -- soil node name - - -- Placement rules: - -- * Always allowed on podzol or mycelimu - -- * Otherwise, must be solid, opaque and have daylight light level <= 12 - local light = minetest.get_node_light(place_pos, 0.5) - local light_ok = false - if light and light <= 12 then - light_ok = true - end - return ((snn == "mcl_core:podzol" or snn == "mcl_core:podzol_snow" or snn == "mcl_core:mycelium" or snn == "mcl_core:mycelium_snow") or (light_ok and minetest.get_item_group(snn, "solid") == 1 and minetest.get_item_group(snn, "opaque") == 1)) -end) - -local longdesc_intro_brown = S("Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.") -local longdesc_intro_red = S("Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.") - -local longdesc_append = S("A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.").."\n".. -S("Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.") - -local tt_help = S("Grows on podzol, mycelium and other blocks").."\n"..S("Spreads in darkness") - -local usagehelp = S("This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.") - -minetest.register_node("mcl_mushrooms:mushroom_brown", { - description = S("Brown Mushroom"), - _doc_items_longdesc = longdesc_intro_brown .. "\n\n" .. longdesc_append, - _doc_items_usagehelp = usagehelp, - _tt_help = tt_help, - drawtype = "plantlike", - tiles = { "farming_mushroom_brown.png" }, - inventory_image = "farming_mushroom_brown.png", - wield_image = "farming_mushroom_brown.png", - sunlight_propagates = true, - paramtype = "light", - walkable = false, - groups = { - attached_node = 1, deco_block = 1, destroy_by_lava_flow = 1, - dig_immediate = 3, dig_by_water = 1, dig_by_piston = 1, - mushroom = 1, enderman_takable = 1, compostability = 65 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - light_source = 1, - selection_box = { - type = "fixed", - fixed = { -3/16, -0.5, -3/16, 3/16, -2/16, 3/16 }, - }, - node_placement_prediction = "", - on_place = on_place, - _mcl_blast_resistance = 0, -}) - -minetest.register_node("mcl_mushrooms:mushroom_red", { - description = S("Red Mushroom"), - _doc_items_longdesc = longdesc_intro_red .. "\n\n" .. longdesc_append, - _doc_items_usagehelp = usagehelp, - _tt_help = tt_help, - drawtype = "plantlike", - tiles = { "farming_mushroom_red.png" }, - inventory_image = "farming_mushroom_red.png", - wield_image = "farming_mushroom_red.png", - sunlight_propagates = true, - paramtype = "light", - walkable = false, - groups = { - attached_node = 1, deco_block = 1, destroy_by_lava_flow = 1, - dig_immediate = 3, dig_by_water = 1, dig_by_piston = 1, - mushroom = 1, enderman_takable = 1, compostability = 65 - }, - sounds = mcl_sounds.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = { -3/16, -0.5, -3/16, 3/16, -2/16, 3/16 }, - }, - node_placement_prediction = "", - on_place = on_place, - _mcl_blast_resistance = 0, -}) - -minetest.register_craftitem("mcl_mushrooms:mushroom_stew", { - description = S("Mushroom Stew"), - _doc_items_longdesc = S("Mushroom stew is a healthy soup which can be consumed to restore some hunger points."), - inventory_image = "farming_mushroom_stew.png", - on_place = minetest.item_eat(6, "mcl_core:bowl"), - on_secondary_use = minetest.item_eat(6, "mcl_core:bowl"), - groups = { food = 3, eatable = 6 }, - _mcl_saturation = 7.2, - stack_max = 1, -}) - -minetest.register_craft({ - type = "shapeless", - output = "mcl_mushrooms:mushroom_stew", - recipe = {"mcl_core:bowl", "mcl_mushrooms:mushroom_brown", "mcl_mushrooms:mushroom_red"} -}) - ---[[ Mushroom spread and death -Code based on information gathered from Minecraft Wiki - -]] -minetest.register_abm({ - label = "Mushroom spread and death", - nodenames = {"mcl_mushrooms:mushroom_brown", "mcl_mushrooms:mushroom_red"}, - interval = 11, - chance = 50, - action = function(pos, node) - local node_soil = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name - -- Mushrooms uproot in light except on podzol or mycelium - if node_soil ~= "mcl_core:podzol" and node_soil ~= "mcl_core:mycelium" and - node_soil ~= "mcl_core:podzol_snow" and node_soil ~= "mcl_core:mycelium_snow" and minetest.get_node_light(pos, nil) > 12 then - minetest.dig_node(pos) - return - end - - local pos0 = vector.add(pos, {x=-4, y=-1, z=-4}) - local pos1 = vector.add(pos, {x=4, y=1, z=4}) - - -- Stop mushroom spread if a 9×3×9 box is too crowded - if #minetest.find_nodes_in_area(pos0, pos1, node.name) >= 5 then - return - end - - local selected_pos = table.copy(pos) - - -- Do two random selections which may place the new mushroom in a 5×5×5 cube - local random = { - x = selected_pos.x + math.random(-1, 1), - y = selected_pos.y + math.random(0, 1) - math.random(0, 1), - z = selected_pos.z + math.random(-1, 1) - } - local random_node = minetest.get_node_or_nil(random) - if not random_node or random_node.name ~= "air" then - return - end - local node_under = minetest.get_node_or_nil({x = random.x, y = random.y - 1, z = random.z}) - if not node_under then - return - end - - if minetest.get_node_light(random, 0.5) > 12 or (minetest.get_item_group(node_under.name, "opaque") == 0) then - return - end - local random2 = { - x = random.x + math.random(-1, 1), - y = random.y, - z = random.z + math.random(-1, 1) - } - random_node = minetest.get_node_or_nil(random2) - if not random_node or random_node.name ~= "air" then - return - end - node_under = minetest.get_node_or_nil({x = random2.x, y = random2.y - 1, z = random2.z}) - if not node_under then - return - end - if minetest.get_node_light(random2, 0.5) > 12 or (minetest.get_item_group(node_under.name, "opaque") == 0) or (minetest.get_item_group(node_under.name, "solid") == 0) then - return - end - - minetest.set_node(random2, {name = node.name}) - end -}) diff --git a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_brown.png b/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_brown.png deleted file mode 100644 index 37e1d11e84..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_red.png b/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_red.png deleted file mode 100644 index 5f91358630..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_stew.png b/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_stew.png deleted file mode 100644 index 4532250886..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/farming_mushroom_stew.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_inside.png b/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_inside.png deleted file mode 100644 index 06377fee84..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_inside.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_brown.png b/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_brown.png deleted file mode 100644 index 65d27c4c27..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_red.png b/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_red.png deleted file mode 100644 index 3907e37919..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_stem.png b/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_stem.png deleted file mode 100644 index 43e2ff1b20..0000000000 Binary files a/mods/ITEMS/mcl_mushrooms/textures/mcl_mushrooms_mushroom_block_skin_stem.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/init.lua b/mods/ITEMS/mcl_nether/init.lua deleted file mode 100644 index 2d8def90d0..0000000000 --- a/mods/ITEMS/mcl_nether/init.lua +++ /dev/null @@ -1,341 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local mod_screwdriver = minetest.get_modpath("screwdriver") -local on_rotate -if mod_screwdriver then - on_rotate = screwdriver.rotate_3way -end - -minetest.register_node("mcl_nether:glowstone", { - description = S("Glowstone"), - _doc_items_longdesc = S("Glowstone is a naturally-glowing block which is home to the Nether."), - tiles = {"mcl_nether_glowstone.png"}, - is_ground_content = true, - stack_max = 64, - groups = {handy=1,building_block=1, material_glass=1}, - drop = { - max_items = 1, - items = { - {items = {"mcl_nether:glowstone_dust 4"}, rarity = 3}, - {items = {"mcl_nether:glowstone_dust 3"}, rarity = 3}, - {items = {"mcl_nether:glowstone_dust 2"}}, - } - }, - paramtype = "light", - light_source = minetest.LIGHT_MAX, - sounds = mcl_sounds.node_sound_glass_defaults(), - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = { - discrete_uniform_distribution = true, - items = {"mcl_nether:glowstone_dust"}, - min_count = 2, - max_count = 4, - cap = 4, - } -}) - -minetest.register_node("mcl_nether:quartz_ore", { - description = S("Nether Quartz Ore"), - _doc_items_longdesc = S("Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether."), - stack_max = 64, - tiles = {"mcl_nether_quartz_ore.png"}, - is_ground_content = true, - groups = {pickaxey=1, building_block=1, material_stone=1, xp=3}, - drop = "mcl_nether:quartz", - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 3, - _mcl_hardness = 3, - _mcl_silk_touch_drop = true, - _mcl_fortune_drop = mcl_core.fortune_drop_ore -}) - --- For eternal fire on top of netherrack and magma blocks --- (this code does not require a dependency on mcl_fire) -local function eternal_after_destruct(pos, oldnode) - pos.y = pos.y + 1 - if minetest.get_node(pos).name == "mcl_fire:eternal_fire" then - minetest.remove_node(pos) - end -end - -local function eternal_on_ignite(player, pointed_thing) - local pos = pointed_thing.under - local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} - local fn = minetest.get_node(flame_pos) - local pname = player:get_player_name() - if minetest.is_protected(flame_pos, pname) then - minetest.record_protection_violation(flame_pos, pname) - return - end - if fn.name == "air" and pointed_thing.under.y < pointed_thing.above.y then - minetest.set_node(flame_pos, {name = "mcl_fire:eternal_fire"}) - return true - else - return false - end -end - -minetest.register_node("mcl_nether:netherrack", { - description = S("Netherrack"), - _doc_items_longdesc = S("Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire."), - stack_max = 64, - tiles = {"mcl_nether_netherrack.png"}, - is_ground_content = true, - groups = {pickaxey=1, building_block=1, material_stone=1, enderman_takable=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.4, - _mcl_hardness = 0.4, - - -- Eternal fire on top - after_destruct = eternal_after_destruct, - _on_ignite = eternal_on_ignite, -}) - -minetest.register_node("mcl_nether:magma", { - description = S("Magma Block"), - _tt_help = minetest.colorize(mcl_colors.YELLOW, S("Burns your feet")), - _doc_items_longdesc = S("Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire."), - stack_max = 64, - tiles = {{name="mcl_nether_magma.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.5}}}, - is_ground_content = true, - light_source = 3, - sunlight_propagates = false, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - -- From walkover mod - on_walk_over = function(loc, nodeiamon, player) - local armor_feet = player:get_inventory():get_stack("armor", 5) - if player and player:get_player_control().sneak or (minetest.global_exists("mcl_enchanting") and mcl_enchanting.has_enchantment(armor_feet, "frost_walker")) or (minetest.global_exists("mcl_potions") and mcl_potions.player_has_effect(player, "fire_proof")) then - return - end - -- Hurt players standing on top of this block - if player:get_hp() > 0 then - mcl_util.deal_damage(player, 1, {type = "hot_floor"}) - end - end, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - - -- Eternal fire on top - after_destruct = eternal_after_destruct, - _on_ignite = eternal_on_ignite, -}) - -minetest.register_node("mcl_nether:soul_sand", { - description = S("Soul Sand"), - _tt_help = S("Reduces walking speed"), - _doc_items_longdesc = S("Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block."), - stack_max = 64, - tiles = {"mcl_nether_soul_sand.png"}, - is_ground_content = true, - groups = {handy = 1, shovely = 1, building_block = 1, soil_nether_wart = 1, material_sand = 1, soul_block = 1 }, - collision_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0.5 - 2/16, 0.5 }, - }, - sounds = mcl_sounds.node_sound_sand_defaults(), - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - -- Movement handling is done in mcl_playerplus mod -}) - -minetest.register_node("mcl_nether:nether_brick", { - -- Original name: Nether Brick - description = S("Nether Brick Block"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - tiles = {"mcl_nether_nether_brick.png"}, - is_ground_content = false, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 2, -}) - -minetest.register_node("mcl_nether:red_nether_brick", { - -- Original name: Red Nether Brick - description = S("Red Nether Brick Block"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - tiles = {"mcl_nether_red_nether_brick.png"}, - is_ground_content = false, - groups = {pickaxey=1, building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 2, -}) - - -minetest.register_node("mcl_nether:nether_wart_block", { - description = S("Nether Wart Block"), - _doc_items_longdesc = S("A nether wart block is a purely decorative block made from nether wart."), - stack_max = 64, - tiles = {"mcl_nether_nether_wart_block.png"}, - is_ground_content = false, - groups = {handy=1, hoey=1, building_block=1, compostability = 85}, - sounds = mcl_sounds.node_sound_leaves_defaults( - { - footstep={name="default_dirt_footstep", gain=0.7}, - dug={name="default_dirt_footstep", gain=1.5}, - } - ), - _mcl_blast_resistance = 1, - _mcl_hardness = 1, -}) - -minetest.register_node("mcl_nether:quartz_block", { - description = S("Block of Quartz"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - is_ground_content = false, - tiles = {"mcl_nether_quartz_block_top.png", "mcl_nether_quartz_block_bottom.png", "mcl_nether_quartz_block_side.png"}, - groups = {pickaxey=1, quartz_block=1,building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_nether:quartz_chiseled", { - description = S("Chiseled Quartz Block"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - is_ground_content = false, - tiles = {"mcl_nether_quartz_chiseled_top.png", "mcl_nether_quartz_chiseled_top.png", "mcl_nether_quartz_chiseled_side.png"}, - groups = {pickaxey=1, quartz_block=1,building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_node("mcl_nether:quartz_pillar", { - description = S("Pillar Quartz Block"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - paramtype2 = "facedir", - is_ground_content = false, - on_place = mcl_util.rotate_axis, - tiles = {"mcl_nether_quartz_pillar_top.png", "mcl_nether_quartz_pillar_top.png", "mcl_nether_quartz_pillar_side.png"}, - groups = {pickaxey=1, quartz_block=1,building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rotate = on_rotate, - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) -minetest.register_node("mcl_nether:quartz_smooth", { - description = S("Smooth Quartz"), - _doc_items_longdesc = doc.sub.items.temp.build, - stack_max = 64, - is_ground_content = false, - tiles = {"mcl_nether_quartz_block_bottom.png"}, - groups = {pickaxey=1, quartz_block=1,building_block=1, material_stone=1}, - sounds = mcl_sounds.node_sound_stone_defaults(), - _mcl_blast_resistance = 0.8, - _mcl_hardness = 0.8, -}) - -minetest.register_craftitem("mcl_nether:glowstone_dust", { - description = S("Glowstone Dust"), - _doc_items_longdesc = S("Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting."), - inventory_image = "mcl_nether_glowstone_dust.png", - stack_max = 64, - groups = { craftitem=1, brewitem=1 }, -}) - -minetest.register_craftitem("mcl_nether:quartz", { - description = S("Nether Quartz"), - _doc_items_longdesc = S("Nether quartz is a versatile crafting ingredient."), - inventory_image = "mcl_nether_quartz.png", - stack_max = 64, - groups = { craftitem = 1 }, -}) - -minetest.register_craftitem("mcl_nether:netherbrick", { - description = S("Nether Brick"), - _doc_items_longdesc = S("Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences."), - inventory_image = "mcl_nether_netherbrick.png", - stack_max = 64, - groups = { craftitem = 1 }, -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_nether:quartz", - recipe = "mcl_nether:quartz_ore", - cooktime = 10, -}) - -minetest.register_craft({ - output = "mcl_nether:quartz_block", - recipe = { - {"mcl_nether:quartz", "mcl_nether:quartz"}, - {"mcl_nether:quartz", "mcl_nether:quartz"}, - } -}) - -minetest.register_craft({ - output = "mcl_nether:quartz_pillar 2", - recipe = { - {"mcl_nether:quartz_block"}, - {"mcl_nether:quartz_block"}, - } -}) - -minetest.register_craft({ - output = "mcl_nether:glowstone", - recipe = { - {"mcl_nether:glowstone_dust", "mcl_nether:glowstone_dust"}, - {"mcl_nether:glowstone_dust", "mcl_nether:glowstone_dust"}, - } -}) - -minetest.register_craft({ - output = "mcl_nether:magma", - recipe = { - {"mcl_mobitems:magma_cream", "mcl_mobitems:magma_cream"}, - {"mcl_mobitems:magma_cream", "mcl_mobitems:magma_cream"}, - } -}) - -minetest.register_craft({ - type = "cooking", - output = "mcl_nether:netherbrick", - recipe = "mcl_nether:netherrack", - cooktime = 10, -}) - -minetest.register_craft({ - output = "mcl_nether:nether_brick", - recipe = { - {"mcl_nether:netherbrick", "mcl_nether:netherbrick"}, - {"mcl_nether:netherbrick", "mcl_nether:netherbrick"}, - } -}) - -minetest.register_craft({ - output = "mcl_nether:red_nether_brick", - recipe = { - {"mcl_nether:nether_wart_item", "mcl_nether:netherbrick"}, - {"mcl_nether:netherbrick", "mcl_nether:nether_wart_item"}, - } -}) -minetest.register_craft({ - output = "mcl_nether:red_nether_brick", - recipe = { - {"mcl_nether:netherbrick", "mcl_nether:nether_wart_item"}, - {"mcl_nether:nether_wart_item", "mcl_nether:netherbrick"}, - } -}) - -minetest.register_craft({ - output = "mcl_nether:nether_wart_block", - recipe = { - {"mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item"}, - {"mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item"}, - {"mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item"}, - } -}) - -dofile(minetest.get_modpath(minetest.get_current_modname()).."/nether_wart.lua") -dofile(minetest.get_modpath(minetest.get_current_modname()).."/lava.lua") diff --git a/mods/ITEMS/mcl_nether/lava.lua b/mods/ITEMS/mcl_nether/lava.lua deleted file mode 100644 index 035a50322c..0000000000 --- a/mods/ITEMS/mcl_nether/lava.lua +++ /dev/null @@ -1,32 +0,0 @@ --- Lava in the Nether - -local S = minetest.get_translator(minetest.get_current_modname()) - --- TODO: Increase flow speed. This could be done by reducing viscosity, --- but this would also allow players to swim faster in lava. - -local lava_src_def = table.copy(minetest.registered_nodes["mcl_core:lava_source"]) -lava_src_def.description = S("Nether Lava Source") -lava_src_def._doc_items_create_entry = false -lava_src_def._doc_items_entry_name = nil -lava_src_def._doc_items_longdesc = nil -lava_src_def._doc_items_usagehelp = nil -lava_src_def.liquid_range = 7 -lava_src_def.liquid_alternative_source = "mcl_nether:nether_lava_source" -lava_src_def.liquid_alternative_flowing = "mcl_nether:nether_lava_flowing" -minetest.register_node("mcl_nether:nether_lava_source", lava_src_def) - -local lava_flow_def = table.copy(minetest.registered_nodes["mcl_core:lava_flowing"]) -lava_flow_def.description = S("Flowing Nether Lava") -lava_flow_def._doc_items_create_entry = false -lava_flow_def.liquid_range = 7 -lava_flow_def.liquid_alternative_flowing = "mcl_nether:nether_lava_flowing" -lava_flow_def.liquid_alternative_source = "mcl_nether:nether_lava_source" -minetest.register_node("mcl_nether:nether_lava_flowing", lava_flow_def) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_core:lava_source", "nodes", "mcl_nether:nether_lava_source") - doc.add_entry_alias("nodes", "mcl_core:lava_source", "nodes", "mcl_nether:nether_lava_flowing") -end - diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr deleted file mode 100644 index f81f381e25..0000000000 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_nether -Glowstone=Leuchtstein -Glowstone is a naturally-glowing block which is home to the Nether.=Leuchtstein ist ein Block aus dem Nether. Er leuchtet von Natur aus hell. -Nether Quartz Ore=Nether-Quarzerz -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=Nether-Quarzerz ist ein Erz, das Nethererz enthält. Es wird oft zwischen Netherrack im Nether gefunden. -Netherrack=Netherrack -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Netherrack ist ein gesteinsartiger Block aus dem Nether. Auf diesem Block wird ein Feuer immer ein ewiges Feuer sein. -Magma Block=Magmablock -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Magmablöcke sind heiße feste Blöcke, die jeden, der auf ihm steht, verletzen, es sei denn, sie sind gegen Feuer immun. Auf diesem Block wird ein Feuer immer ein ewiges Feuer sein. -Soul Sand=Seelensand -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=Seelensand ist ein Block aus dem Nether. Man kann auf ihm nur langsam gehen. Die Verlangsamung ist verstärkt, wenn sich der Seelensand auf Eis, Packeis oder einem Schleimblock befindet. -Nether Brick Block=Netherziegelblock -Red Nether Brick Block=Roter Netherziegelblock -Nether Wart Block=Netherwurzblock -A nether wart block is a purely decorative block made from nether wart.=Ein Netherwurzblock ist ein rein dekorativer Block aus Netherwurz. -Block of Quartz=Quarzblock -Chiseled Quartz Block=Gemeißelter Quarzblock -Pillar Quartz Block=Quarzsäulenblock -Smooth Quartz=Glatter Quarz -Glowstone Dust=Leuchtsteinstaub -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=Leuchtsteinstaub ist das Staub aus zerbrochenen Leuchtsteinen. -Nether Quartz=Netherquarz -Nether quartz is a versatile crafting ingredient.=Netherquarz ist eine vielseitige Fertigungskomponente. -Nether Brick=Netherziegel -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Netherziegel werden hauptsächlich zur Fertigung von Netherziegelblöcken und Netherzäunen benutzt. -Nether Lava Source=Netherlavaquelle -Flowing Nether Lava=Fließende Netherlava -@1 stood too long on a magma block.=@1 stand zu lange auf einem Magmablock. -Premature Nether Wart (Stage 1)=Junger Netherwurz (1. Stufe) -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Ein junger Netherwurz wurde erst kürzlich auf Seelensand gepflanzt. Netherwurz wächst langsam auf Seelensand in 4 Stufen (die 2. und 3. Stufe sehen identisch aus). Obwohl Netherwurz im Nether beheimatet ist, wächst er in jeder Dimension. -Premature Nether Wart (Stage 2)=Junger Netherwurz (2. Stufe) -Premature Nether Wart (Stage 3)=Junger Netherwurz (3. Stufe) -Mature Nether Wart=Ausgewachsener Netherwurz -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=Der ausgewachsene Netherwurz ist eine Pflanze aus dem Nether. Er hat seine volle Größe erreicht, ist erntereif und wächst nicht weiter. -Nether Wart=Netherwurz -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Netherwurze sind Pflanzen, die im Nether beheimatet sind. Sie können auf Seelensand gepflanzt werden und wachsen in 4 Stufen. -Place this item on soul sand to plant it and watch it grow.=Platzieren Sie den Gegenstand auf Seelensand, um ihn zu pflanzen und sehen Sie dabei zu, wie es wächst. -Burns your feet=Verbrennt Ihre Füße -Grows on soul sand=Wächst auf Seelensand -Reduces walking speed=Reduziert das Schritttempo diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.es.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.es.tr deleted file mode 100644 index 046b95f270..0000000000 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.es.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_nether -Glowstone=Piedra luminosa -Glowstone is a naturally-glowing block which is home to the Nether.=Glowstone es un bloque que brilla de forma natural y que lo alberga el Nether. -Nether Quartz Ore=Mena de cuarzo -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=La mena de cuarzo es un mineral que contiene cuarzo inferior. Se encuentra comúnmente alrededor del tramo inferior en el Nether. -Netherrack=Netherrack -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Netherrack es un bloque de piedra que alberga el Nether. Comenzar un incendio en este bloque creará un fuego eterno. -Magma Block=Bloque de magma -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Los bloques de magma son bloques sólidos y calientes que lastiman a cualquiera que esté parado sobre él, a menos que tengan resistencia al fuego. Comenzar un incendio en este bloque creará un fuego eterno. -Soul Sand=Arena de almas -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=La arena del alma está a una cuadra del Nether. Uno solo puede caminar lentamente sobre la arena del alma. El efecto de desaceleración se amplifica cuando la arena del alma está encima del hielo, hielo empaquetado o un bloque de limo. -Nether Brick Block=Ladrillos del Nether -Red Nether Brick Block=Ladrillos del Nether rojos -Nether Wart Block=Bloque de verrugas del Nether -A nether wart block is a purely decorative block made from nether wart.=Un bloque de verruga inferior es un bloque puramente decorativo hecho de verruga inferior. -Block of Quartz=Bloque de cuarzo -Chiseled Quartz Block=Cuarzo cincelado -Pillar Quartz Block=Pilar de cuarzo -Smooth Quartz=Cuarzo liso -Glowstone Dust=Polvo de piedra luminosa -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=El polvo de piedra luminosa es el polvo que sale de las piedras luminiscentes rotas. Se utiliza principalmente en la elaboración. -Nether Quartz=Infracuarzo -Nether quartz is a versatile crafting ingredient.=El cuarzo abisal es un ingrediente de elaboración versátil. -Nether Brick=Ladrillos del Nether -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Los ladrillos abisales son el ingrediente principal para la elaboración de bloques de ladrillo y cercas inferiores. -Nether Lava Source=Fuente de lava del Nether -Flowing Nether Lava=Fuente de lava fluida del Nether -@1 stood too long on a magma block.=@1 permaneció demasiado tiempo sobre un bloque de magma. -Premature Nether Wart (Stage 1)=Verruga del Nether prematura (Etapa 1) -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Recientemente se ha plantado una verruga inferior prematura en la arena del alma. La verruga abisal crece lentamente en la arena del alma en 4 etapas (la segunda y la tercera etapa son idénticas). Aunque la verruga inferior es el hogar del Nether, crece en cualquier dimensión. -Premature Nether Wart (Stage 2)=Verruga del Nether prematura (Etapa 2) -Premature Nether Wart (Stage 3)=Verruga del Nether prematura (Etapa 3) -Mature Nether Wart=Verruga del Nether madura -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=La verruga inferior madura es una planta del Nether y alcanzó su tamaño completo y no crecerá más. Está listo para ser cosechado por sus artículos. -Nether Wart=Verruga del Nether -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Las verrugas abisales son plantas que albergan al abismo Se pueden plantar en la arena del alma y crecer en 4 etapas. -Place this item on soul sand to plant it and watch it grow.=Coloque este artículo en la arena del alma para plantarlo y verlo crecer. diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr deleted file mode 100644 index 3e35833558..0000000000 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_nether -Glowstone=Pierre Lumineuse -Glowstone is a naturally-glowing block which is home to the Nether.=La Pierre Lumineuse est un bloc naturellement brillant qui abrite le Nether. -Nether Quartz Ore=Minerai de quartz du Nether -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=Le minerai de quartz du Nether est un minerai contenant du quartz du Nether. Il se trouve généralement autour du Néantrack dans le Nether. -Netherrack=Netherrack -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Netherrack est un bloc de pierre qui abrite le Nether. Démarrer un feu sur ce bloc créera un feu éternel. -Magma Block=Bloc de Magma -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Les blocs de magma sont des blocs solides chauds qui blessent quiconque s'y tient, à moins qu'ils n'aient une résistance au feu. Démarrer un feu sur ce bloc créera un feu éternel. -@1 stood too long on a magma block.=@1 s'est tenu trop longtemps sur un bloc de magma. -Soul Sand=Sable des âmes -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=Le sable de l'âme est un bloc du Nether. On ne peut que marcher lentement sur le sable de l'âme. L'effet de ralentissement est amplifié lorsque le sable de l'âme est au-dessus de la glace, de la glace tassée ou d'un bloc de slime. -Nether Brick Block=Bloc de Briques du Nether -Red Nether Brick Block=Bloc de Briques Rouges du Nether -Nether Wart Block=Bloc de Verrues du Nether -A nether wart block is a purely decorative block made from nether wart.=Un bloc de verrues du Nether est un bloc purement décoratif fabriqué à partir de verrue du Nether. -Block of Quartz=Bloc de Quartz -Chiseled Quartz Block=Bloc de Quartz sculpté -Pillar Quartz Block=Bloc de Quartz rayé -Smooth Quartz=Quartz Lisse -Glowstone Dust=Poudre Lumineuse -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=La poudre lumineuse est la poussière qui sort des pierres incandescentes brisées. Il est principalement utilisé dans l'artisanat. -Nether Quartz=Quartz du Nether -Nether quartz is a versatile crafting ingredient.=Le quartz du Nether est un ingrédient artisanal polyvalent. -Nether Brick=Brique du Nether -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Les briques du Nether sont le principal ingrédient pour la fabrication de blocs de briques et de clôtures du Nether. -Nether Lava Source=Source de Lave du Nether -Flowing Nether Lava=Lave du Nether en Mouvement -Premature Nether Wart (Stage 1)=Verrue du Néant prématurée (étape 1) -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Une verrue du Nether prématurée vient d'être plantée sur du sable d'âme. La verrue du Nether pousse lentement sur le sable de l'âme en 4 étapes (les deuxième et troisième étapes semblent identiques). Bien que la verrue du Nether habite le Nether, elle se développe dans toutes les dimensions. -Premature Nether Wart (Stage 2)=Verrue du Néant prématurée (étape 2) -Premature Nether Wart (Stage 3)=Verrue du Néant prématurée (étape 3) -Mature Nether Wart=Verrue du Néant Mature -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=La verrue du Nether mature est une plante du Nether qui a atteint sa taille maximale et ne poussera plus. Il est prêt à être récolté pour ses articles. -Nether Wart=Verrues du Nether -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Les verrues du Nether sont des plantes qui habitent le Nether. Ils peuvent être plantés sur du sable d'âme et se développer en 4 étapes. -Place this item on soul sand to plant it and watch it grow.=Placez cet article sur du sable d'âme pour le planter et regardez-le grandir. -Burns your feet=Vous brûle les pieds -Grows on soul sand=Pousse sur le sable de l'âme -Reduces walking speed=Réduit la vitesse de marche \ No newline at end of file diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr deleted file mode 100644 index 11edbe3d42..0000000000 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_nether -Glowstone=Jasnogłaz -Glowstone is a naturally-glowing block which is home to the Nether.=Jasnogłaz jest naturalnie świecącym blokiem, występującym w Netherze. -Nether Quartz Ore=Ruda Netherowego kwarcu -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=Ruda Netherowego kwarcu jest rudą zawierającą Netherowy kwarc. Występuje często nieopodal skał Netheru. -Netherrack=Skała Netheru -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Skała Netheru jest blokiem podobnym do kamienia występującym w Netherze. -Magma Block=Blok magmy -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Bloki magmy są gorącymi stałymi blokami, które ranią każdego kto na nich stanie, chyba, że mają odporność na ogień. Rozpalenie ognia na tym bloku stworzy wieczny ogień. -@1 stood too long on a magma block.=@1 zbyt długo stała na bloku magmy. -Soul Sand=Piasek dusz -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=Piasek dusz jest blokiem z Netheru. Można na nim tylko chodzić powoli. Efekt spowolnienia jest mocniejszy gdy piasek dusz jest położony na lodzie, zbitym lodzi lub bloku szlamu. -Nether Brick Block=Blok Netherowych cegieł -Red Nether Brick Block=Blok czerwonych Netherowych cegieł -Nether Wart Block=Blok Netherowej brodawki -A nether wart block is a purely decorative block made from nether wart.=Blok Netherowej brodawki jest dekoracyjnym blokiem utworzonym z Netherowej brodawki. -Block of Quartz=Blok kwarcu -Chiseled Quartz Block=Rzeźbiony blok kwarcu -Pillar Quartz Block=Filarowy blok kwarcu -Smooth Quartz=Gładki kwarc -Glowstone Dust=Pył jasnogłazu -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=Pył jasnogłazu to pył wyrzucany przez rozbite jasnogłazy. Jest głównie wykorzystywany w wytwarzaniu. -Nether Quartz=Netherowy kwarc -Nether quartz is a versatile crafting ingredient.=Netherowy kwarc jest wszechstronnym przedmiotem użytecznym w wytwarzaniu. -Nether Brick=Netherowa cegła -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Netherowe cegły są głównym składnikiem do wytwarzania bloków Netherowej cegły oraz Netherowych ogrodzeń. -Nether Lava Source=Netherowe źródło lawy -Flowing Nether Lava=Płynąca Netherowa lawa -Premature Nether Wart (Stage 1)=Niedojrzała Netherowa brodawka (Etap 1) -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Niedojrzała Netherowa brodawka to brodawka, która niedawno została zasadzona na piasku dusz. Netherowa brodawka rośnie na piasku dusz w 4 etapach (drugi i trzeci wyglądają identycznie). Pomimo tego, że brodawki te naturalnie występują tylko w Netherze, mogą one rosnąć w każdym wymiarze. -Premature Nether Wart (Stage 2)=Niedojrzała Netherowa brodawka (Etap 2) -Premature Nether Wart (Stage 3)=Niedojrzała Netherowa brodawka (Etap 3) -Mature Nether Wart=Dojrzała Netherowa brodawka -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=Dojrzała Netherowa brodawka jest rośliną z Netheru, która osiągnęła swój maksymalny rozmiar i nie urośnie więcej. Jest gotowa do zebrania dla swojego zrzutu. -Nether Wart=Netherowa brodawka -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Netherowe brodawki to rośliny występujące w Netherze. Mogą być posadzone na piasku dusz i wyrosną w 4 fazach. -Place this item on soul sand to plant it and watch it grow.=Postaw ten przedmiot na piasku dusz aby zasadzić go i patrz jak rośnie. -Burns your feet=Pali w stopy -Grows on soul sand=Rośnie na piasku dusz -Reduces walking speed=Zmniejsza prędkość poruszania diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr deleted file mode 100644 index f546d16ca7..0000000000 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_nether -Glowstone=Светящийся камень -Glowstone is a naturally-glowing block which is home to the Nether.=Светящийся камень это природный источник света, блок, встречающийся в Аду. -Nether Quartz Ore=Кварцевая руда -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=Кварцевая руда это порода, содержащая адский кварц. Часто встречается в Аду вокруг адского камня. -Netherrack=Адский камень -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Адский камень это блок, выглядящий как камень, домом которого является Ад. Разжигание огня на этом блоке создаст вечный огонь. -Magma Block=Блок магмы -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Блоки магмы это горячие твёрдые блоки, причиняющие боль тем, кто на них стоит, если у них нет защиты от огня. Разжигание огня на таком блоке создаст вечный огонь. -@1 stood too long on a magma block.=@1 слишком долго стоял(а) на магмовом блоке. -Soul Sand=Песок душ -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=Песок душ это блок из Ада. Идти по нему можно только медленно. Замедляющий эффект усиливается, если песок душ лежит на льду, упакованном льду или блоке слизи. -Nether Brick Block=Блок адского кирпича -Red Nether Brick Block=Красный блок адского кирпича -Nether Wart Block=Блок адского нароста -A nether wart block is a purely decorative block made from nether wart.=Блок адского нароста это чисто декоративный блок, сделанный из адского нароста. -Block of Quartz=Кварцевый блок -Chiseled Quartz Block=Точёный кварцевый блок -Pillar Quartz Block=Кварцевый столб -Smooth Quartz=Гладкий кварц -Glowstone Dust=Светящаяся пыль -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=Светящаяся пыль это пыль, которая получается из сломанного светящегося камня. -Nether Quartz=Адский кварц -Nether quartz is a versatile crafting ingredient.=Адский кварц это универсальный ингредиент для крафтинга. -Nether Brick=Адский кирпич -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Адские кирпичи это главный ингредиент для создания блоков адских кирпичей. -Nether Lava Source=Адский источник лавы -Flowing Nether Lava=Текущая адская лава -Premature Nether Wart (Stage 1)=Саженец адского нароста (стадия 1) -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Саженец адского нароста был недавно высажен на песке душ. Его медленный рост происходит 4 стадии (вторая и третья стадии неотличимы на глаз). Хотя домом адского нароста является Ад, он растёт в любом измерении. -Premature Nether Wart (Stage 2)=Саженец адского нароста (стадия 2) -Premature Nether Wart (Stage 3)=Саженец адского нароста (стадия 3) -Mature Nether Wart=Зрелый адский нарост -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=Зрелый адский нарост это растение Ада, достигшее своего полного размера, дальше расти оно уже не будет. Оно готово к сбору в качестве предметов. -Nether Wart=Адский нарост -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Адские наросты это растения, домом которых является Ад. Их можно высаживать на песке душ, и они растут в 4 стадии. -Place this item on soul sand to plant it and watch it grow.=Поместите этот предмет на песок душ, чтобы посадить его и наблюдать за его ростом. -Burns your feet=Обжигает ваши ноги -Grows on soul sand=Растёт на песке душ -Reduces walking speed=Уменьшает скорость ходьбы diff --git a/mods/ITEMS/mcl_nether/locale/template.txt b/mods/ITEMS/mcl_nether/locale/template.txt deleted file mode 100644 index 0e69ad5204..0000000000 --- a/mods/ITEMS/mcl_nether/locale/template.txt +++ /dev/null @@ -1,40 +0,0 @@ -# textdomain: mcl_nether -Glowstone= -Glowstone is a naturally-glowing block which is home to the Nether.= -Nether Quartz Ore= -Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.= -Netherrack= -Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.= -Magma Block= -Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.= -@1 stood too long on a magma block.= -Soul Sand= -Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.= -Nether Brick Block= -Red Nether Brick Block= -Nether Wart Block= -A nether wart block is a purely decorative block made from nether wart.= -Block of Quartz= -Chiseled Quartz Block= -Pillar Quartz Block= -Smooth Quartz= -Glowstone Dust= -Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.= -Nether Quartz= -Nether quartz is a versatile crafting ingredient.= -Nether Brick= -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.= -Nether Lava Source= -Flowing Nether Lava= -Premature Nether Wart (Stage 1)= -A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.= -Premature Nether Wart (Stage 2)= -Premature Nether Wart (Stage 3)= -Mature Nether Wart= -The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.= -Nether Wart= -Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.= -Place this item on soul sand to plant it and watch it grow.= -Burns your feet= -Grows on soul sand= -Reduces walking speed= \ No newline at end of file diff --git a/mods/ITEMS/mcl_nether/mod.conf b/mods/ITEMS/mcl_nether/mod.conf deleted file mode 100644 index f5ffa61ac1..0000000000 --- a/mods/ITEMS/mcl_nether/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_nether -depends = mcl_core, mcl_sounds, mcl_util, walkover, doc_items, mcl_colors -optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_nether/nether_wart.lua b/mods/ITEMS/mcl_nether/nether_wart.lua deleted file mode 100644 index f6eb0c03cc..0000000000 --- a/mods/ITEMS/mcl_nether/nether_wart.lua +++ /dev/null @@ -1,187 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local table = table - -minetest.register_node("mcl_nether:nether_wart_0", { - description = S("Premature Nether Wart (Stage 1)"), - _doc_items_longdesc = S("A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension."), - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_nether:nether_wart_item", - tiles = {"mcl_nether_nether_wart_stage_0.png"}, - wield_image = "mcl_nether_nether_wart_stage_0.png", - inventory_image = "mcl_nether_nether_wart_stage_0.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -0.125, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), -}) - -minetest.register_node("mcl_nether:nether_wart_1", { - description = S("Premature Nether Wart (Stage 2)"), - _doc_items_create_entry = false, - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_nether:nether_wart_item", - tiles = {"mcl_nether_nether_wart_stage_1.png"}, - wield_image = "mcl_nether_nether_wart_stage_1.png", - inventory_image = "mcl_nether_nether_wart_stage_1.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0.15, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), -}) - -minetest.register_node("mcl_nether:nether_wart_2", { - description = S("Premature Nether Wart (Stage 3)"), - _doc_items_create_entry = false, - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = "mcl_nether:nether_wart_item", - tiles = {"mcl_nether_nether_wart_stage_1.png"}, - wield_image = "mcl_nether_nether_wart_stage_1.png", - inventory_image = "mcl_nether_nether_wart_stage_1.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0.15, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), -}) - -minetest.register_node("mcl_nether:nether_wart", { - description = S("Mature Nether Wart"), - _doc_items_longdesc = S("The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items."), - paramtype = "light", - paramtype2 = "meshoptions", - place_param2 = 3, - walkable = false, - drawtype = "plantlike", - drop = { - max_items = 2, - items = { - { items = {"mcl_nether:nether_wart_item 2"}, rarity = 1 }, - { items = {"mcl_nether:nether_wart_item 2"}, rarity = 3 }, - { items = {"mcl_nether:nether_wart_item 1"}, rarity = 3 }, - }, - }, - tiles = {"mcl_nether_nether_wart_stage_2.png"}, - wield_image = "mcl_nether_nether_wart_stage_2.png", - inventory_image = "mcl_nether_nether_wart_stage_2.png", - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0.45, 0.5} - }, - }, - groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1}, - sounds = mcl_sounds.node_sound_leaves_defaults(), - _mcl_fortune_drop = { - discrete_uniform_distribution = true, - items = {"mcl_nether:nether_wart_item"}, - min_count = 2, - max_count = 4, - } -}) - -minetest.register_craftitem("mcl_nether:nether_wart_item", { - description = S("Nether Wart"), - _tt_help = S("Grows on soul sand"), - _doc_items_longdesc = S("Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages."), - _doc_items_usagehelp = S("Place this item on soul sand to plant it and watch it grow."), - inventory_image = "mcl_nether_nether_wart.png", - wield_image = "mcl_nether_nether_wart.png", - groups = {craftitem = 1, brewitem = 1, compostability = 30}, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer: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, placer, itemstack) or itemstack - end - end - - local placepos = pointed_thing.above - local soilpos = table.copy(placepos) - soilpos.y = soilpos.y - 1 - - -- Check for correct soil type - local chk = minetest.get_item_group(minetest.get_node(soilpos).name, "soil_nether_wart") - if chk and chk ~= 0 then - -- Check if node above soil node allows placement - if minetest.registered_items[minetest.get_node(placepos).name].buildable_to then - -- Place nether wart - minetest.sound_play({name="default_place_node", gain=1.0}, {pos=placepos}, true) - minetest.set_node(placepos, {name="mcl_nether:nether_wart_0", param2 = 3}) - - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - return itemstack - end - end - end, -}) - -local names = {"mcl_nether:nether_wart_0", "mcl_nether:nether_wart_1", "mcl_nether:nether_wart_2"} - -minetest.register_abm({ - label = "Nether wart growth", - nodenames = {"mcl_nether:nether_wart_0", "mcl_nether:nether_wart_1", "mcl_nether:nether_wart_2"}, - neighbors = {"group:soil_nether_wart"}, - interval = 35, - chance = 11, - action = function(pos, node) - pos.y = pos.y-1 - if minetest.get_item_group(minetest.get_node(pos).name, "soil_nether_wart") == 0 then - return - end - pos.y = pos.y+1 - local step = nil - for i,name in ipairs(names) do - if name == node.name then - step = i - break - end - end - if step == nil then - return - end - local new_node = {name=names[step+1]} - if new_node.name == nil then - new_node.name = "mcl_nether:nether_wart" - end - new_node.param = node.param - new_node.param2 = node.param2 - minetest.set_node(pos, new_node) - end -}) - -if minetest.get_modpath("doc") then - for i=1,2 do - doc.add_entry_alias("nodes", "mcl_nether:nether_wart_0", "nodes", "mcl_nether:nether_wart_"..i) - end -end diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone.png deleted file mode 100644 index d42c9c9c50..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone_dust.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone_dust.png deleted file mode 100644 index 446fffc0c4..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_glowstone_dust.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_magma.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_magma.png deleted file mode 100644 index 8f378e02b3..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_magma.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_brick.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_brick.png deleted file mode 100644 index 43a1af1bb4..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart.png deleted file mode 100644 index 456a760b90..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_block.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_block.png deleted file mode 100644 index 6968c99c9a..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_0.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_0.png deleted file mode 100644 index 37779d3792..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_1.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_1.png deleted file mode 100644 index 30b38186a7..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_2.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_2.png deleted file mode 100644 index 0478c760a0..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_nether_wart_stage_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherbrick.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_netherbrick.png deleted file mode 100644 index 9d8c32d85a..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherbrick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherrack.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_netherrack.png deleted file mode 100644 index 43b978c434..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_netherrack.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz.png deleted file mode 100644 index 70512029eb..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_bottom.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_bottom.png deleted file mode 100644 index fd2bc57016..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_side.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_side.png deleted file mode 100644 index 2e522f8a42..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_top.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_top.png deleted file mode 100644 index 2e522f8a42..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_block_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_side.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_side.png deleted file mode 100644 index 6029dace3d..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_top.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_top.png deleted file mode 100644 index a6bd32950d..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_chiseled_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_ore.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_ore.png deleted file mode 100644 index ee9f5977e2..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_ore.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_side.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_side.png deleted file mode 100644 index 32dd3d8c1c..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_top.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_top.png deleted file mode 100644 index 1b6fe45b6d..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_quartz_pillar_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_red_nether_brick.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_red_nether_brick.png deleted file mode 100644 index cd21828869..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_red_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mcl_nether/textures/mcl_nether_soul_sand.png b/mods/ITEMS/mcl_nether/textures/mcl_nether_soul_sand.png deleted file mode 100644 index dcde3812df..0000000000 Binary files a/mods/ITEMS/mcl_nether/textures/mcl_nether_soul_sand.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/LICENSE b/mods/ITEMS/mcl_portals/LICENSE deleted file mode 100644 index ece42d0aaa..0000000000 --- a/mods/ITEMS/mcl_portals/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -The MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/mods/ITEMS/mcl_portals/README.md b/mods/ITEMS/mcl_portals/README.md deleted file mode 100644 index d3faaa8e2d..0000000000 --- a/mods/ITEMS/mcl_portals/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Portals mod for MineClone 2 -## How to create portals - -Nether portal: Build an upright frame of obsidian, 4 blocks wide and 5 blocks high, and use a flint and steel inside it. -End portal: Build an upright frame of red nether brick blocks, 4 blocks wide and 5 blocks high, and use an eye of ender inside it. - -## Credits -Created by maikerumine and Wuzzy. -Code license: MIT License (see `LICENSE`). - -Texture license: See README.md in main MineClone 2 directory. - -`mcl_portals_teleport.ogg` - * License: [CC BY 3.0](http://creativecommons.org/licenses/by/3.0/) - * Authors: [FreqMan](https://freesound.org/people/FreqMan/) and Wuzzy - * Source: - -`mcl_portals_open_end_portal.ogg` - * License: CC0 - * Author: Johnnie\_Holiday - * Source: diff --git a/mods/ITEMS/mcl_portals/init.lua b/mods/ITEMS/mcl_portals/init.lua deleted file mode 100644 index 972e934736..0000000000 --- a/mods/ITEMS/mcl_portals/init.lua +++ /dev/null @@ -1,18 +0,0 @@ --- Load files - -mcl_portals = { - storage = minetest.get_mod_storage(), -} - -local modpath = minetest.get_modpath(minetest.get_current_modname()) - --- Nether portal: --- Obsidian frame, activated by flint and steel -dofile(modpath.."/portal_nether.lua") - --- End portal (W.I.P): --- Red nether brick block frame, activated by an eye of ender -dofile(modpath.."/portal_end.lua") - -dofile(modpath.."/portal_gateway.lua") - diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.de.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.de.tr deleted file mode 100644 index 58478faa46..0000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.de.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_portals -End Portal=Endportal -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Ein Endportal teleportiert Kreaturen und Objekte zur mysteriösen Ende-Dimension (und wieder zurück!). -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Springen Sie ins Portal, um sich zu teleportieren. Von der Oberwelt aus werden Sie zu einer festen Position im Ende hin teleportiert. Eine 5×5-Obsidianplattform wird am Zielort erzeugt. Im Ende werden Sie zurück zu Ihrem Startpunkt in der Oberwelt teleportiert. -End Portal Frame=Endportalrahmen -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Endportalrahmen werden in der Konstruktion von Endportalen benutzt. Jeder Block hat einen Sockel für ein Enderauge. -NOTE: The End dimension is currently incomplete and might change in future versions.=ANMERKUNG: Die Ende-Dimension ist momentan unfertig und könnte sich in künftigen Versionen ändern. -To create an End portal, you need 12 end portal frames and 12 eyes of ender. The end portal frames have to be arranged around a horizontal 3×3 area with each block facing inward. Any other arrangement will fail.=Um ein Endportal zu bauen, brauchen sie 12 Endportalrahmen und 12 Enderaugen. Die Endportalrahmenblöcke muss um ein horizontales Feld von 3×3 platziert sein, wobei jeder von ihnen nach innen zeigt. Jede andere Anordnung wird nicht funktionieren. -Place an eye of ender into each block. The end portal appears in the middle after placing the final eye.=Platzieren Sie ein Enderauge in jeden Block. Das Endportal wird sich in der Mitte öffnen, wenn das letzte Auge platziert wurde. -End Portal Frame with Eye of Ender=Endportalrahmen mit Enderauge -Nether Portal=Netherportal -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=Ein Netherportal teleportiert Kreaturen und Objekte zur heißen und gefährlichen Nether-Dimension (und zurück!). Betreten auf eigene Gefahr! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Stellen Sie sich ins Portal für einen Moment, um sich zu teleportieren. Beim ersten Mal wird auch ein Portal in der anderen Dimension erschaffen. Wenn ein Netherportal im Nether gebaut wird, wird es zurück zur Oberwelt führen. Ein Netherportal wird zerstört, wenn das Obsidian, das ihn umgibt, zerstört wird, oder, wenn es einer Explosion ausgesetzt war. -Obsidian is also used as the frame of Nether portals.=Obsidian wird auch als Rahmen von Netherportalen benutzt. -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Um ein Netherportal zu öffnen, platzieren Sie einen aufrechten Rahmen aus Obsidian mit einer Breite von mindestens 4 Blöcken und einer Höhe von mindestens 5 Blöcken, nur mit Luft in der Mitte. Nachdem Sie den Rahmen gebaut haben, entfachen Sie ein Feuer im Obsidianrahmen. Netherportale funktionieren nur in der Oberwelt und im Nether. -Once placed, an eye of ender can not be taken back.=Sobald platziert, kann ein Enderauge nicht mehr zurück genommen werden. -Used to construct end portals=Benutzt zur Konstruktion von Endportalen -Liquid container=Flüssigkeitsbehälter -No effect=Keine Wirkung diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.es.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.es.tr deleted file mode 100644 index 5f85090260..0000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.es.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_portals -End Portal=Portal del End -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Un portal final teletransporta criaturas y objetos a la misteriosa dimensión final (¡y viceversa!). -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Salta al portal para teletransportarte. Entrar en un portal final en el Overworld te teletransporta a una posición fija en la dimensión final y crea una plataforma de obsidiana 5 × 5 en tu destino. Los portales finales en el final lo llevarán de regreso a su punto de generación en el mundo terrenal -End Portal Frame=Marco de portal del End -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Los marcos del portal final se utilizan en la construcción de portales finales. Cada bloque tiene un zócalo para un ojo de ender. -NOTE: The End dimension is currently incomplete and might change in future versions.=NOTA: El portal del end está actualmente incompleto y puede cambiar en futuras versiones. -To create an End portal, you need 12 end portal frames and 12 eyes of ender. The end portal frames have to be arranged around a horizontal 3×3 area with each block facing inward. Any other arrangement will fail.=Para crear un portal final, necesita 12 marcos de portal final y 12 ojos de ender. Los marcos del portal final deben estar dispuestos alrededor de un área horizontal de 3 × 3 con cada bloque mirando hacia adentro. Cualquier otro arreglo fallará. -Place an eye of ender into each block. The end portal appears in the middle after placing the final eye.=Coloque un ojo de ender en cada bloque. El portal final aparece en el medio después de colocar el ojo final. -End Portal Frame with Eye of Ender=Marco de portal del End con ojo de ender -Nether Portal=Portal del Nether -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=Un portal Nether teletransporta criaturas y objetos a la dimensión Nether ardiente y peligrosa (¡y viceversa!). ¡Entra bajo tu propio riesgo! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=SPárate en el portal por un momento para activar la teletransportación. Entrar en un portal Nether por primera vez también creará un nuevo portal en la otra dimensión. Si se ha construido un portal Nether en Nether, conducirá al Overworld. Un portal abisal se destruye si se destruye cualquiera de las obsidianas que lo rodean, o si quedó atrapado en una explosión. -Obsidian is also used as the frame of Nether portals.=La obsidiana también se usa como marco de portal del End. -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.= -Once placed, an eye of ender can not be taken back.=Una vez colocado, un ojo de ender no puede ser retirado. - -#OUTDATED: -#To open a Nether portal, place an upright frame of obsidian with a width of 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Para abrir un portal Nether, coloque un marco vertical de obsidiana con un ancho de 4 bloques y una altura de 5 bloques, dejando solo aire en el centro. Después de colocar este marco, enciende un fuego en el marco de obsidiana. Los portales de Nether solo funcionan en Overworld y Nether. diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.fr.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.fr.tr deleted file mode 100644 index 4b2598b13c..0000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.fr.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_portals -End Portal=Portail de l'End -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Un portail de l'End téléporte des créatures et des objets dans la mystérieuse dimension End (et vice-versa!). -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Sautez dans le portail pour vous téléporter. Entrer dans un portail d'End dans l'Overworld vous téléporte à une position fixe dans la dimension d'End et crée une plate-forme d'obsidienne 5×5 à votre destination. Les portails de l'End à la fin vous ramèneront à votre point d'apparition dans l'Overworld. -End Portal Frame=Cadre de Portail de l'End -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Les portiques d'End sont utilisés dans la construction de portails d'End. Chaque bloc a une prise pour un oeil d'ender. -NOTE: The End dimension is currently incomplete and might change in future versions.=REMARQUE: la dimension d'End est actuellement incomplète et pourrait changer dans les futures versions. -End Portal Frame with Eye of Ender=Cadre de portail de l'End avec Oeil d'Ender -Nether Portal=Portail du Nether -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Tenez-vous un instant dans le portail pour activer la téléportation. Entrer pour la première fois sur un portail Nether créera également un nouveau portail dans l'Overworld. Si un portail du Nether a été construit dans le Nether, il mènera à l'Overworld. Un portail du Nether est détruit si l'une des obsidiennes qui l'entourent est détruit, ou s'il a été pris dans une explosion. -Obsidian is also used as the frame of Nether portals.=Obsidian is also used as the frame of Nether portals. -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Pour ouvrir un portail du Nether, placez un cadre vertical d'obsidienne d'une largeur d'au moins 4 blocs et d'une hauteur de 5 blocs, ne laissant que de l'air au centre. Après avoir placé ce cadre, allumez un feu dans le cadre d'obsidienne. Les portails du Nether ne fonctionnent que dans l'Overworld et le Nether. -Once placed, an eye of ender can not be taken back.=Une fois placé, un œil d'ender ne peut pas être repris. -Used to construct end portals=Utilisé pour construire des portails d'End \ No newline at end of file diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.pl.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.pl.tr deleted file mode 100644 index 18d9b4b7be..0000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.pl.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_portals -End Portal=Portal Kresu -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Portal Kresu teleportuje osoby i rzeczy do tajemniczego wymiaru Kresu (i z powrotem!). -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Wskocz do portalu by się teleportować. Wejście do portalu Kresu na Powierzchni przeniesie cię do ustalonej pozycji w wymiarze Kresu i tworzy obsydianową platformę 5×5 w tym miejscu. Portal Kresu w Kresie przeniesie cię do twojego miejsca odradzania. -End Portal Frame=Rama portalu Kresu -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Ramy portalu Kresu są wykorzystywane do konstrukcji portali Kresu. Każdy blok ma miejsce na oko Kresu. -NOTE: The End dimension is currently incomplete and might change in future versions.=UWAGA: Wymiar Kresu jest aktualnie nieukończony i może się zmienić w przyszłych wersjach. -End Portal Frame with Eye of Ender=Rama portalu Kresu z okiem Kresu. -Nether Portal=Portal Netheru -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=Portal Netheru teleportuje osoby i obiekty do gorącego i niebezpiecznego wymiaru Nether (i z powrotem!). Wejdź na własne ryzyko! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Stań w portalu na krótki moment aby aktywować teleport. Wejście przez portal Netheru po raz pierwszy stworzy również nowy portal w drugim wymiarze. Jeśli portal Netheru został zbudowany w Netherze będzie prowadził z powrotem na Powierzchnię. Portal Netheru przestanie działać jeśli któryś z otaczających go bloków obsydianu zostanie zniszczony lub gdy dosięgnie go wybuch. -Obsidian is also used as the frame of Nether portals.=Obsydian jest również wykorzystywany do budowania portali Netheru. -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Aby otworzyć portal Netheru umieść ramę z obsydianu o szerokości co najmniej 4 i wysokości 5 bloków, zostawiając tylko powietrze wewnątrz. Po postawieniu tej ramy rozpal ogień wewnątrz ramy. Portale Netheru działają tylko w Netherze i na Powierzchni. -Once placed, an eye of ender can not be taken back.=Raz umieszczone oko Kresu nie może być odzyskane -Used to construct end portals=Używane do konstrukcji portali Kresu diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.ru.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.ru.tr deleted file mode 100644 index 8b6310793d..0000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.ru.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_portals -End Portal=Портал Предела -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Портал Предела телепортирует создания и объекты в загадочное измерение Предел (и обратно!) -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Прыгайте в портал, чтобы телепортироваться. Вход в портал Предела в Верхнем мире телепортирует вас в определённое место в измерении Предела и создаёт обсидиановую платформу 5×5 в пункте вашего назначения. Портал предела в Пределе перебросит вас в вашу точку возрождения в Верхнем мире. -End Portal Frame=Рамка портала Предела -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Рамка портала Предела используется для построения порталов Предела. Каждый блок имеет отсек для ока Предела. -NOTE: The End dimension is currently incomplete and might change in future versions.=Предупреждение: Измерение Предел в данный момент не завершено и может измениться в будущих версиях. -End Portal Frame with Eye of Ender=Рамка портала Предела с оком Предела -Nether Portal=Адский портал -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=Адский портал переносит создания и объекты в горячее и опасное измерение Ад (и обратно!). Используйте на свой страх и риск! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Стойте в портале несколько секунд для запуска телепортации. Вход в портал Ада в первый раз приведёт к созданию аналогичного портала в другом измерении. Если Адский портал создан в Аду, он ведёт в Верхний мир. Портал Ада уничтожается, если уничтожается любой блок обсидиана из окружающих его, либо при задевании взрывом. -Obsidian is also used as the frame of Nether portals.=Обсидиан также используется в качестве рамки портала Ада -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Чтобы открыть портал Ада, постройте рамку из обсидиана шириной не менее 4 блоков и высото не менее 5, оставляя в центре лишь воздух. После создания обсидиановой рамки зажгите в ней огонь. Адские порталы работают только в Верхнем мире и в Аду. -Once placed, an eye of ender can not be taken back.=Однажды размещённое, око Предела нельзя взять обратно. -Used to construct end portals=Используется для создания порталов Предела diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.zh_TW.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.zh_TW.tr deleted file mode 100644 index a6b389036a..0000000000 --- a/mods/ITEMS/mcl_portals/locale/mcl_portals.zh_TW.tr +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_portals -End Portal=終界傳送門 -An End portal teleports creatures and objects to the mysterious End dimension (and back!).=終界傳送門用於將生物和實體到達終末之界(或回來!)。 -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=跳入傳送門進行傳送。進入終界傳送門會將你傳送到終界的一個固定位置,並在你的目的地創建一個5×5的黑曜石平台。終界的傳送門會將你帶回你在主界的出生點。 -End Portal Frame=終界傳送門框架 -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=終界傳送門框架用於建造終界傳送門。每個框架都有一個插座,用於放置終界之眼。 -NOTE: The End dimension is currently incomplete and might change in future versions.=注意:終界目前還不完整,在未來的版本中可能會有變化。 -End Portal Frame with Eye of Ender=含終界之眼的終界傳送門框架 -Nether Portal=地獄傳送門 -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=地獄傳送門將生物和實體傳送到炎熱和危險的地獄(或回來!)。進入後風險自負! -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=在傳送門中站立片刻以激活傳送。第一次進入地獄傳送門也會在另一維度創建一個新的傳送門。如果在地獄建立了地獄傳送門,它將會通​​向主世界。如果圍繞著它的任何黑曜石被毀壞,或者它被捲入一場爆炸,地獄傳送門就會被破壞。 -Obsidian is also used as the frame of Nether portals.=黑曜石也被用來作為地獄傳送門的框架。 -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=要打開地獄傳送門,需要放置一個直立的黑曜石框架,寬度至少為4塊,高度為5塊,中間只留有空氣。放置這個框架後,在黑曜石框架中點火。地獄傳送門只在主世界上和地獄起作用。 -Once placed, an eye of ender can not be taken back.=在擺放後,終界之眼無法再取回。 -Used to construct end portals=用於建造終界傳送門 diff --git a/mods/ITEMS/mcl_portals/locale/template.txt b/mods/ITEMS/mcl_portals/locale/template.txt deleted file mode 100644 index 21f5e21f85..0000000000 --- a/mods/ITEMS/mcl_portals/locale/template.txt +++ /dev/null @@ -1,15 +0,0 @@ -# textdomain: mcl_portals -End Portal= -An End portal teleports creatures and objects to the mysterious End dimension (and back!).= -Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.= -End Portal Frame= -End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.= -NOTE: The End dimension is currently incomplete and might change in future versions.= -End Portal Frame with Eye of Ender= -Nether Portal= -A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!= -Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.= -Obsidian is also used as the frame of Nether portals.= -To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.= -Once placed, an eye of ender can not be taken back.= -Used to construct end portals= diff --git a/mods/ITEMS/mcl_portals/mod.conf b/mods/ITEMS/mcl_portals/mod.conf deleted file mode 100644 index 610b590c60..0000000000 --- a/mods/ITEMS/mcl_portals/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_portals -description = Adds buildable portals to the Nether and End dimensions. -depends = mcl_nether, mcl_end, mcl_particles, mcl_spawn, mcl_credits -optional_depends = awards, doc diff --git a/mods/ITEMS/mcl_portals/portal_end.lua b/mods/ITEMS/mcl_portals/portal_end.lua deleted file mode 100644 index e4982c39b7..0000000000 --- a/mods/ITEMS/mcl_portals/portal_end.lua +++ /dev/null @@ -1,393 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local table = table -local vector = vector -local math = math - -local has_doc = minetest.get_modpath("doc") - --- Parameters ---local SPAWN_MIN = mcl_vars.mg_end_min+70 ---local SPAWN_MAX = mcl_vars.mg_end_min+98 - ---local mg_name = minetest.get_mapgen_setting("mg_name") - -local function destroy_portal(pos) - local neighbors = { - { x=1, y=0, z=0 }, - { x=-1, y=0, z=0 }, - { x=0, y=0, z=1 }, - { x=0, y=0, z=-1 }, - } - for n=1, #neighbors do - local npos = vector.add(pos, neighbors[n]) - if minetest.get_node(npos).name == "mcl_portals:portal_end" then - minetest.remove_node(npos) - end - end -end - -local ep_scheme = { - { o={x=0, y=0, z=1}, p=1 }, - { o={x=0, y=0, z=2}, p=1 }, - { o={x=0, y=0, z=3}, p=1 }, - { o={x=1, y=0, z=4}, p=2 }, - { o={x=2, y=0, z=4}, p=2 }, - { o={x=3, y=0, z=4}, p=2 }, - { o={x=4, y=0, z=3}, p=3 }, - { o={x=4, y=0, z=2}, p=3 }, - { o={x=4, y=0, z=1}, p=3 }, - { o={x=3, y=0, z=0}, p=0 }, - { o={x=2, y=0, z=0}, p=0 }, - { o={x=1, y=0, z=0}, p=0 }, -} - --- End portal -minetest.register_node("mcl_portals:portal_end", { - description = S("End Portal"), - _tt_help = S("Used to construct end portals"), - _doc_items_longdesc = S("An End portal teleports creatures and objects to the mysterious End dimension (and back!)."), - _doc_items_usagehelp = S("Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld."), - tiles = { - { - name = "mcl_portals_end_portal.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1.0, - }, - }, - { - name = "mcl_portals_end_portal.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 6.0, - }, - }, - "blank.png", - }, - drawtype = "nodebox", - paramtype = "light", - sunlight_propagates = true, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, - walkable = false, - diggable = false, - pointable = false, - buildable_to = false, - is_ground_content = false, - drop = "", - -- This is 15 in MC. - light_source = 14, - post_effect_color = {a = 192, r = 0, g = 0, b = 0}, - after_destruct = destroy_portal, - -- This prevents “falling through” - collision_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, -7/16, 0.5}, - }, - }, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 4/16, 0.5}, - }, - }, - groups = {portal=1, not_in_creative_inventory = 1, disable_jump = 1}, - - _mcl_hardness = -1, - _mcl_blast_resistance = 36000000, -}) - --- Obsidian platform at the End portal destination in the End -local function build_end_portal_destination(pos) - local p1 = {x = pos.x - 2, y = pos.y, z = pos.z-2} - local p2 = {x = pos.x + 2, y = pos.y+2, z = pos.z+2} - - for x = p1.x, p2.x do - for y = p1.y, p2.y do - for z = p1.z, p2.z do - local newp = {x=x,y=y,z=z} - -- Build obsidian platform - if minetest.registered_nodes[minetest.get_node(newp).name].is_ground_content then - if y == p1.y then - minetest.set_node(newp, {name="mcl_core:obsidian"}) - else - minetest.remove_node(newp) - end - end - end - end - end -end - - --- Check if pos is part of a valid end portal frame, filled with eyes of ender. -local function check_end_portal_frame(pos) - for i = 1, 12 do - local pos0 = vector.subtract(pos, ep_scheme[i].o) - local portal = true - for j = 1, 12 do - local p = vector.add(pos0, ep_scheme[j].o) - local node = minetest.get_node(p) - if not node or node.name ~= "mcl_portals:end_portal_frame_eye" or node.param2 ~= ep_scheme[j].p then - portal = false - break - end - end - if portal then - return true, {x=pos0.x+1, y=pos0.y, z=pos0.z+1} - end - end - return false -end - --- Generate or destroy a 3×3 end portal beginning at pos. To be used to fill an end portal framea. --- If destroy == true, the 3×3 area is removed instead. -local function end_portal_area(pos, destroy) - local SIZE = 3 - local name - if destroy then - name = "air" - else - name = "mcl_portals:portal_end" - end - local posses = {} - for x=pos.x, pos.x+SIZE-1 do - for z=pos.z, pos.z+SIZE-1 do - table.insert(posses, {x=x,y=pos.y,z=z}) - end - end - minetest.bulk_set_node(posses, {name=name}) -end - -function mcl_portals.end_teleport(obj, pos) - if not obj then return end - local pos = pos or obj:get_pos() - if not pos then return end - local dim = mcl_worlds.pos_to_dimension(pos) - - local target - if dim == "end" then - -- End portal in the End: - -- Teleport back to the player's spawn or world spawn in the Overworld. - if obj:is_player() then - target = mcl_spawn.get_player_spawn_pos(obj) - end - - target = target or mcl_spawn.get_world_spawn_pos(obj) - else - -- End portal in any other dimension: - -- Teleport to the End at a fixed position and generate a - -- 5×5 obsidian platform below. - - local platform_pos = mcl_vars.mg_end_platform_pos - -- force emerge of target1 area - minetest.get_voxel_manip():read_from_map(platform_pos, platform_pos) - if not minetest.get_node_or_nil(platform_pos) then - minetest.emerge_area(vector.subtract(platform_pos, 3), vector.add(platform_pos, 3)) - end - - -- Build destination - local function check_and_build_end_portal_destination(pos) - local n = minetest.get_node_or_nil(pos) - if n and n.name ~= "mcl_core:obsidian" then - build_end_portal_destination(pos) - minetest.after(2, check_and_build_end_portal_destination, pos) - elseif not n then - minetest.after(1, check_and_build_end_portal_destination, pos) - end - end - - build_end_portal_destination(platform_pos) - check_and_build_end_portal_destination(platform_pos) - - target = table.copy(platform_pos) - target.y = target.y + 1 - end - - -- Teleport - obj:set_pos(target) - - if obj:is_player() then - -- Look towards the main End island - if dim ~= "end" then - obj:set_look_horizontal(math.pi/2) - -- Show credits - else - mcl_credits.show(obj) - end - mcl_worlds.dimension_change(obj, mcl_worlds.pos_to_dimension(target)) - minetest.sound_play("mcl_portals_teleport", {pos=target, gain=0.5, max_hear_distance = 16}, true) - end -end - -function mcl_portals.end_portal_teleport(pos, node) - for _,obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do - local lua_entity = obj:get_luaentity() --maikerumine added for objects to travel - if obj:is_player() or lua_entity then - local objpos = obj:get_pos() - if objpos == nil then - return - end - - -- Check if object is actually in portal. - objpos.y = math.ceil(objpos.y) - if minetest.get_node(objpos).name ~= "mcl_portals:portal_end" then - return - end - - mcl_portals.end_teleport(obj, objpos) - - end - end -end - -minetest.register_abm({ - label = "End portal teleportation", - nodenames = {"mcl_portals:portal_end"}, - interval = 0.1, - chance = 1, - action = mcl_portals.end_portal_teleport, -}) - -local rotate_frame, rotate_frame_eye - -if minetest.get_modpath("screwdriver") then - -- Intentionally not rotatable - rotate_frame = false - rotate_frame_eye = false -end - -local function after_place_node(pos, placer, itemstack, pointed_thing) - local node = minetest.get_node(pos) - if node then - node.param2 = (node.param2+2) % 4 - minetest.swap_node(pos, node) - - local ok, ppos = check_end_portal_frame(pos) - if ok then - -- Epic 'portal open' sound effect that can be heard everywhere - minetest.sound_play("mcl_portals_open_end_portal", {gain=0.8}, true) - end_portal_area(ppos) - end - end -end - -minetest.register_node("mcl_portals:end_portal_frame", { - description = S("End Portal Frame"), - _tt_help = S("Used to construct end portals"), - _doc_items_longdesc = S("End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.") .. "\n" .. S("NOTE: The End dimension is currently incomplete and might change in future versions."), - _doc_items_usagehelp = S("To create an End portal, you need 12 end portal frames and 12 eyes of ender. The end portal frames have to be arranged around a horizontal 3×3 area with each block facing inward. Any other arrangement will fail.") .. "\n" .. S("Place an eye of ender into each block. The end portal appears in the middle after placing the final eye.") .. "\n" .. S("Once placed, an eye of ender can not be taken back."), - groups = { creative_breakable = 1, deco_block = 1, end_portal_frame = 1 }, - tiles = { "mcl_portals_endframe_top.png", "mcl_portals_endframe_bottom.png", "mcl_portals_endframe_side.png" }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 5/16, 0.5 }, - }, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - paramtype = "light", - sunlight_propagates = false, - light_source = 1, - - on_rotate = rotate_frame, - - after_place_node = after_place_node, - - _mcl_blast_resistance = 36000000, - _mcl_hardness = -1, -}) - -minetest.register_node("mcl_portals:end_portal_frame_eye", { - description = S("End Portal Frame with Eye of Ender"), - _tt_help = S("Used to construct end portals"), - _doc_items_create_entry = false, - groups = { creative_breakable = 1, deco_block = 1, comparator_signal = 15, end_portal_frame = 2, not_in_creative_inventory = 1 }, - tiles = { "mcl_portals_endframe_top.png^[lowpart:75:mcl_portals_endframe_eye.png", "mcl_portals_endframe_bottom.png", "mcl_portals_endframe_eye.png^mcl_portals_endframe_side.png" }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 5/16, 0.5 }, -- Frame - { -4/16, 5/16, -4/16, 4/16, 0.5, 4/16 }, -- Eye - }, - }, - is_ground_content = false, - sounds = mcl_sounds.node_sound_stone_defaults(), - paramtype = "light", - sunlight_propagates = false, - light_source = 1, - on_destruct = function(pos) - local ok, ppos = check_end_portal_frame(pos) - if ok then - end_portal_area(ppos, true) - end - end, - - on_rotate = rotate_frame_eye, - - after_place_node = after_place_node, - - _mcl_blast_resistance = 36000000, - _mcl_hardness = -1, -}) - -if has_doc then - doc.add_entry_alias("nodes", "mcl_portals:end_portal_frame", "nodes", "mcl_portals:end_portal_frame_eye") -end - - ---[[ ITEM OVERRIDES ]] - --- Portal opener -minetest.override_item("mcl_end:ender_eye", { - on_place = function(itemstack, user, pointed_thing) - -- 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 - - -- Place eye of ender into end portal frame - if pointed_thing.under and node.name == "mcl_portals:end_portal_frame" then - local protname = user:get_player_name() - if minetest.is_protected(pointed_thing.under, protname) then - minetest.record_protection_violation(pointed_thing.under, protname) - return itemstack - end - minetest.set_node(pointed_thing.under, { name = "mcl_portals:end_portal_frame_eye", param2 = node.param2 }) - - if has_doc then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:end_portal_frame") - end - minetest.sound_play( - "default_place_node_hard", - {pos = pointed_thing.under, gain = 0.5, max_hear_distance = 16}, true) - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item() -- 1 use - end - - local ok, ppos = check_end_portal_frame(pointed_thing.under) - if ok then - -- Epic 'portal open' sound effect that can be heard everywhere - minetest.sound_play("mcl_portals_open_end_portal", {gain=0.8}, true) - end_portal_area(ppos) - if has_doc then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:portal_end") - end - end - end - return itemstack - end, -}) diff --git a/mods/ITEMS/mcl_portals/portal_gateway.lua b/mods/ITEMS/mcl_portals/portal_gateway.lua deleted file mode 100644 index ca15a61d53..0000000000 --- a/mods/ITEMS/mcl_portals/portal_gateway.lua +++ /dev/null @@ -1,121 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local storage = mcl_portals.storage - -local vector = vector - -local gateway_positions = { - {x = 96, y = -26925, z = 0}, - {x = 91, y = -26925, z = 29}, - {x = 77, y = -26925, z = 56}, - {x = 56, y = -26925, z = 77}, - {x = 29, y = -26925, z = 91}, - {x = 0, y = -26925, z = 96}, - {x = -29, y = -26925, z = 91}, - {x = -56, y = -26925, z = 77}, - {x = -77, y = -26925, z = 56}, - {x = -91, y = -26925, z = 29}, - {x = -96, y = -26925, z = 0}, - {x = -91, y = -26925, z = -29}, - {x = -77, y = -26925, z = -56}, - {x = -56, y = -26925, z = -77}, - {x = -29, y = -26925, z = -91}, - {x = 0, y = -26925, z = -96}, - {x = 29, y = -26925, z = -91}, - {x = 56, y = -26925, z = -77}, - {x = 77, y = -26925, z = -56}, - {x = 91, y = -26925, z = -29}, -} - -local path_gateway_portal = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_end_gateway_portal.mts" - -local function spawn_gateway_portal(pos, dest_str) - return mcl_structures.place_schematic(vector.add(pos, vector.new(-1, -2, -1)), path_gateway_portal, "0", nil, true, nil, dest_str and function() - minetest.get_meta(pos):set_string("mcl_portals:gateway_destination", dest_str) - end) -end - -function mcl_portals.spawn_gateway_portal() - local id = storage:get_int("gateway_last_id") + 1 - local pos = gateway_positions[id] - if not pos then return end - storage:set_int("gateway_last_id", id) - spawn_gateway_portal(pos) -end - -local gateway_def = table.copy(minetest.registered_nodes["mcl_portals:portal_end"]) -gateway_def.description = S("End Gateway Portal") -gateway_def._tt_help = S("Used to construct end gateway portals") -gateway_def._doc_items_longdesc = S("An End gateway portal teleports creatures and objects to the outer End (and back!).") -gateway_def._doc_items_usagehelp = S("Throw an ender pearl into the portal to teleport. Entering an Gateway portal near the Overworld teleports you to the outer End. At this destination another gateway portal will be constructed, which you can use to get back.") -gateway_def.after_destruct = nil -gateway_def.drawtype = "normal" -gateway_def.node_box = nil -gateway_def.walkable = true -gateway_def.tiles[3] = nil -minetest.register_node("mcl_portals:portal_gateway", gateway_def) - -local function find_destination_pos(minp, maxp) - for y = maxp.y, minp.y, -1 do - for x = maxp.x, minp.x, -1 do - for z = maxp.z, minp.z, -1 do - local pos = vector.new(x, y, z) - local nn = minetest.get_node(pos).name - if nn ~= "ignore" and nn ~= "mcl_portals:portal_gateway" and nn ~= "mcl_core:bedrock" then - local def = minetest.registered_nodes[nn] - if def and def.walkable then - return vector.add(pos, vector.new(0, 1.5, 0)) - end - end - end - end - end -end - -local preparing = {} - -local function teleport(pos, obj) - local meta = minetest.get_meta(pos) - local dest_portal - local dest_str = meta:get_string("mcl_portals:gateway_destination") - local pos_str = minetest.pos_to_string(pos) - if dest_str == "" then - dest_portal = vector.multiply(vector.direction(vector.new(0, pos.y, 0), pos), math.random(768, 1024)) - dest_portal.y = -26970 - spawn_gateway_portal(dest_portal, pos_str) - meta:set_string("mcl_portals:gateway_destination", minetest.pos_to_string(dest_portal)) - else - dest_portal = minetest.string_to_pos(dest_str) - end - local minp = vector.subtract(dest_portal, vector.new(5, 40, 5)) - local maxp = vector.add(dest_portal, vector.new(5, 10, 5)) - preparing[pos_str] = true - minetest.emerge_area(minp, maxp, function(blockpos, action, calls_remaining, param) - if calls_remaining < 1 then - if obj and obj:is_player() or obj:get_luaentity() then - obj:set_pos(find_destination_pos(minp, maxp) or vector.add(dest_portal, vector.new(0, 3.5, 0))) - end - preparing[pos_str] = false - end - end) -end - -minetest.register_abm({ - label = "End gateway portal teleportation", - nodenames = {"mcl_portals:portal_gateway"}, - interval = 0.1, - chance = 1, - action = function(pos) - if preparing[minetest.pos_to_string(pos)] then return end - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do - if obj:get_hp() > 0 then - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_throwing:ender_pearl" then - obj:remove() - obj = luaentity._thrower - end - teleport(pos, obj) - return - end - end - end, -}) diff --git a/mods/ITEMS/mcl_portals/portal_nether.lua b/mods/ITEMS/mcl_portals/portal_nether.lua deleted file mode 100644 index 0d93e11d1a..0000000000 --- a/mods/ITEMS/mcl_portals/portal_nether.lua +++ /dev/null @@ -1,875 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local SCAN_2_MAP_CHUNKS = true -- slower but helps to find more suitable places - --- Localize functions for better performance -local abs = math.abs -local ceil = math.ceil -local floor = math.floor -local max = math.max -local min = math.min -local random = math.random -local dist = vector.distance -local add = vector.add -local mul = vector.multiply -local sub = vector.subtract - --- Setup -local W_MIN, W_MAX = 4, 23 -local H_MIN, H_MAX = 5, 23 -local N_MIN, N_MAX = 6, (W_MAX-2) * (H_MAX-2) -local TRAVEL_X, TRAVEL_Y, TRAVEL_Z = 8, 1, 8 -local LIM_MIN, LIM_MAX = mcl_vars.mapgen_edge_min, mcl_vars.mapgen_edge_max -local PLAYER_COOLOFF, MOB_COOLOFF = 3, 14 -- for this many seconds they won't teleported again -local TOUCH_CHATTER_TIME = 1 -- prevent multiple teleportation attempts caused by multiple portal touches, for this number of seconds -local CHATTER_US = TOUCH_CHATTER_TIME * 1000000 -local DELAY = 3 -- seconds before teleporting in Nether portal in Survival mode (4 minus ABM interval time) -local DISTANCE_MAX = 128 -local PORTAL = "mcl_portals:portal" -local OBSIDIAN = "mcl_core:obsidian" -local O_Y_MIN, O_Y_MAX = max(mcl_vars.mg_overworld_min, -31), min(mcl_vars.mg_overworld_max, 2048) -local N_Y_MIN, N_Y_MAX = mcl_vars.mg_bedrock_nether_bottom_min, mcl_vars.mg_bedrock_nether_top_min - H_MIN - --- Alpha and particles -local node_particles_allowed = minetest.settings:get("mcl_node_particles") or "none" -local node_particles_levels = { none=0, low=1, medium=2, high=3 } -local PARTICLES = node_particles_levels[node_particles_allowed] - --- Table of objects (including players) which recently teleported by a --- Nether portal. Those objects have a brief cooloff period before they --- can teleport again. This prevents annoying back-and-forth teleportation. -local cooloff = {} -function mcl_portals.nether_portal_cooloff(object) - return cooloff[object] -end - -local chatter = {} - -local queue = {} -local chunks = {} - -local storage = mcl_portals.storage -local exits = {} -local keys = minetest.deserialize(storage:get_string("nether_exits_keys") or "return {}") or {} -for _, key in pairs(keys) do - local n = tonumber(key) - if n then - exits[key] = minetest.deserialize(storage:get_string("nether_exits_"..key) or "return {}") or {} - end -end -minetest.register_on_shutdown(function() - local keys={} - for key, data in pairs(exits) do - storage:set_string("nether_exits_"..tostring(key), minetest.serialize(data)) - keys[#keys+1] = key - end - storage:set_string("nether_exits_keys", minetest.serialize(keys)) -end) - -local get_node = mcl_vars.get_node -local set_node = minetest.set_node -local registered_nodes = minetest.registered_nodes -local is_protected = minetest.is_protected -local find_nodes_in_area = minetest.find_nodes_in_area -local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air -local log = minetest.log -local pos_to_string = minetest.pos_to_string -local is_area_protected = minetest.is_area_protected -local get_us_time = minetest.get_us_time - -local dimension_to_teleport = { nether = "overworld", overworld = "nether" } - -local limits = { - nether = { - pmin = {x=LIM_MIN, y = N_Y_MIN, z = LIM_MIN}, - pmax = {x=LIM_MAX, y = N_Y_MAX, z = LIM_MAX}, - }, - overworld = { - pmin = {x=LIM_MIN, y = O_Y_MIN, z = LIM_MIN}, - pmax = {x=LIM_MAX, y = O_Y_MAX, z = LIM_MAX}, - }, -} - --- This function registers exits from Nether portals. --- Incoming verification performed: two nodes must be portal nodes, and an obsidian below them. --- If the verification passes - position adds to the table and saves to mod storage on exit. -local function add_exit(p) - if not p or not p.y or not p.z or not p.x then return end - local x, y, z = floor(p.x), floor(p.y), floor(p.z) - local p = {x = x, y = y, z = z} - if get_node({x=x,y=y-1,z=z}).name ~= OBSIDIAN or get_node(p).name ~= PORTAL or get_node({x=x,y=y+1,z=z}).name ~= PORTAL then return end - local k = floor(z/256) * 256 + floor(x/256) - if not exits[k] then - exits[k]={} - end - local e = exits[k] - for i = 1, #e do - local t = e[i] - if t and t.x == p.x and t.y == p.y and t.z == p.z then - return - end - end - e[#e+1] = p - log("action", "[mcl_portals] Exit added at " .. pos_to_string(p)) -end - --- This function removes Nether portals exits. -local function remove_exit(p) - if not p or not p.y or not p.z or not p.x then return end - local x, y, z = floor(p.x), floor(p.y), floor(p.z) - local k = floor(z/256) * 256 + floor(x/256) - if not exits[k] then return end - local p = {x = x, y = y, z = z} - local e = exits[k] - if e then - for i, t in pairs(e) do - if t and t.x == x and t.y == y and t.z == z then - e[i] = nil - log("action", "[mcl_portals] Nether portal removed from " .. pos_to_string(p)) - return - end - end - end -end - --- This functon searches Nether portal nodes whitin distance specified -local function find_exit(p, dx, dy, dz) - if not p or not p.y or not p.z or not p.x then return end - local dx, dy, dz = dx or DISTANCE_MAX, dy or DISTANCE_MAX, dz or DISTANCE_MAX - if dx < 1 or dy < 1 or dz < 1 then return false end - - --y values aren't used - local x = floor(p.x) - --local y = floor(p.y) - local z = floor(p.z) - - local x1 = x-dx+1 - --local y1 = y-dy+1 - local z1 = z-dz+1 - - local x2 = x+dx-1 - --local y2 = y+dy-1 - local z2 = z+dz-1 - - local k1x, k2x = floor(x1/256), floor(x2/256) - local k1z, k2z = floor(z1/256), floor(z2/256) - - local t, d - for kx = k1x, k2x do for kz = k1z, k2z do - local k = kz*256 + kx - local e = exits[k] - if e then - for _, t0 in pairs(e) do - local d0 = dist(p, t0) - if not d or d>d0 then - d = d0 - t = t0 - if d==0 then return t end - end - end - end - end end - - if t and abs(t.x-p.x) <= dx and abs(t.y-p.y) <= dy and abs(t.z-p.z) <= dz then - return t - end -end - - --- Ping-Pong the coordinate for Fast Travelling, https://git.minetest.land/Wuzzy/MineClone2/issues/795#issuecomment-11058 -local function ping_pong(x, m, l1, l2) - if x < 0 then - return l1 + abs(((x*m+l1) % (l1*4)) - (l1*2)), floor(x*m/l1/2) + ((ceil(x*m/l1)+1)%2) * ((x*m)%l1)/l1 - end - return l2 - abs(((x*m+l2) % (l2*4)) - (l2*2)), floor(x*m/l2/2) + (floor(x*m/l2)%2) * ((x*m)%l2)/l2 -end - -local function get_target(p) - if p and p.y and p.x and p.z then - local x, z = p.x, p.z - local y, d = mcl_worlds.y_to_layer(p.y) - local o1, o2 -- y offset - if y then - if d=="nether" then - x, o1 = ping_pong(x, TRAVEL_X, LIM_MIN, LIM_MAX) - z, o2 = ping_pong(z, TRAVEL_Z, LIM_MIN, LIM_MAX) - y = floor(y * TRAVEL_Y + (o1+o2) / 16 * LIM_MAX) - y = min(max(y + O_Y_MIN, O_Y_MIN), O_Y_MAX) - elseif d=="overworld" then - x, y, z = floor(x / TRAVEL_X + 0.5), floor(y / TRAVEL_Y + 0.5), floor(z / TRAVEL_Z + 0.5) - y = min(max(y + N_Y_MIN, N_Y_MIN), N_Y_MAX) - end - return {x=x, y=y, z=z}, d - end - end -end - --- Destroy a nether portal. Connected portal nodes are searched and removed --- using 'bulk_set_node'. This function is called from 'after_destruct' of --- nether portal nodes. The flag 'destroying_portal' is used to avoid this --- function being called recursively through callbacks in 'bulk_set_node'. -local destroying_portal = false -local function destroy_nether_portal(pos, node) - if destroying_portal then - return - end - destroying_portal = true - - local orientation = node.param2 - local checked_tab = { [minetest.hash_node_position(pos)] = true } - local nodes = { pos } - - local function check_remove(pos) - local h = minetest.hash_node_position(pos) - if checked_tab[h] then - return - end - - local node = minetest.get_node(pos) - if node and node.name == PORTAL and (orientation == nil or node.param2 == orientation) then - table.insert(nodes, pos) - checked_tab[h] = true - end - end - - local i = 1 - while i <= #nodes do - pos = nodes[i] - if orientation == 0 then - check_remove({x = pos.x - 1, y = pos.y, z = pos.z}) - check_remove({x = pos.x + 1, y = pos.y, z = pos.z}) - else - check_remove({x = pos.x, y = pos.y, z = pos.z - 1}) - check_remove({x = pos.x, y = pos.y, z = pos.z + 1}) - end - check_remove({x = pos.x, y = pos.y - 1, z = pos.z}) - check_remove({x = pos.x, y = pos.y + 1, z = pos.z}) - remove_exit(pos) - i = i + 1 - end - - minetest.bulk_set_node(nodes, { name = "air" }) - destroying_portal = false -end - -local on_rotate -if minetest.get_modpath("screwdriver") then - on_rotate = screwdriver.disallow -end - -minetest.register_node(PORTAL, { - description = S("Nether Portal"), - _doc_items_longdesc = S("A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!"), - _doc_items_usagehelp = S("Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion."), - - tiles = { - "blank.png", - "blank.png", - "blank.png", - "blank.png", - { - name = "mcl_portals_portal.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1.25, - }, - }, - { - name = "mcl_portals_portal.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1.25, - }, - }, - }, - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, - walkable = false, - buildable_to = false, - is_ground_content = false, - drop = "", - light_source = 11, - post_effect_color = {a = 180, r = 51, g = 7, b = 89}, - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.1, 0.5, 0.5, 0.1}, - }, - }, - groups = { creative_breakable = 1, portal = 1, not_in_creative_inventory = 1 }, - sounds = mcl_sounds.node_sound_glass_defaults(), - after_destruct = destroy_nether_portal, - on_rotate = on_rotate, - - _mcl_hardness = -1, - _mcl_blast_resistance = 0, -}) - -local function light_frame(x1, y1, z1, x2, y2, z2, name, node, node_frame) - local orientation = 0 - if x1 == x2 then - orientation = 1 - end - local pos = {} - local node = node or {name = PORTAL, param2 = orientation} - local node_frame = node_frame or {name = OBSIDIAN} - for x = x1 - 1 + orientation, x2 + 1 - orientation do - pos.x = x - for z = z1 - orientation, z2 + orientation do - pos.z = z - for y = y1 - 1, y2 + 1 do - pos.y = y - local frame = (x < x1) or (x > x2) or (y < y1) or (y > y2) or (z < z1) or (z > z2) - if frame then - set_node(pos, node_frame) - else - set_node(pos, node) - add_exit({x=pos.x, y=pos.y-1, z=pos.z}) - end - end - end - end -end - ---Build arrival portal -function build_nether_portal(pos, width, height, orientation, name, clear_before_build) - local width, height, orientation = width or W_MIN - 2, height or H_MIN - 2, orientation or random(0, 1) - - if clear_before_build then - light_frame(pos.x, pos.y, pos.z, pos.x + (1 - orientation) * (width - 1), pos.y + height - 1, pos.z + orientation * (width - 1), name, {name="air"}, {name="air"}) - end - light_frame(pos.x, pos.y, pos.z, pos.x + (1 - orientation) * (width - 1), pos.y + height - 1, pos.z + orientation * (width - 1), name) - - -- Build obsidian platform: - for x = pos.x - orientation, pos.x + orientation + (width - 1) * (1 - orientation), 1 + orientation do - for z = pos.z - 1 + orientation, pos.z + 1 - orientation + (width - 1) * orientation, 2 - orientation do - local pp = {x = x, y = pos.y - 1, z = z} - local pp_1 = {x = x, y = pos.y - 2, z = z} - local nn = get_node(pp).name - local nn_1 = get_node(pp_1).name - if ((nn=="air" and nn_1 == "air") or not registered_nodes[nn].is_ground_content) and not is_protected(pp, name) then - set_node(pp, {name = OBSIDIAN}) - end - end - end - - log("action", "[mcl_portals] Destination Nether portal generated at "..pos_to_string(pos).."!") - - return pos -end - -function mcl_portals.spawn_nether_portal(pos, rot, pr, name) - if not pos then return end - local o = 0 - if rot then - if rot == "270" or rot=="90" then - o = 1 - elseif rot == "random" then - o = random(0,1) - end - end - build_nether_portal(pos, nil, nil, o, name, true) -end - --- Teleportation cooloff for some seconds, to prevent back-and-forth teleportation -local function stop_teleport_cooloff(o) - cooloff[o] = nil - chatter[o] = nil -end - -local function teleport_cooloff(obj) - cooloff[obj] = true - if obj:is_player() then - minetest.after(PLAYER_COOLOFF, stop_teleport_cooloff, obj) - else - minetest.after(MOB_COOLOFF, stop_teleport_cooloff, obj) - end -end - -local function finalize_teleport(obj, exit) - if not obj or not exit or not exit.x or not exit.y or not exit.z then return end - - local objpos = obj:get_pos() - if not objpos then return end - - local is_player = obj:is_player() - local name - if is_player then - name = obj:get_player_name() - end - local _, dim = mcl_worlds.y_to_layer(exit.y) - - - -- If player stands, player is at ca. something+0.5 which might cause precision problems, so we used ceil for objpos.y - objpos = {x = floor(objpos.x+0.5), y = ceil(objpos.y), z = floor(objpos.z+0.5)} - if get_node(objpos).name ~= PORTAL then return end - - -- THIS IS A TEMPORATY CODE SECTION FOR COMPATIBILITY REASONS -- 1 of 2 -- TODO: Remove -- - -- Old worlds have no exits indexed - adding the exit to return here: - add_exit(objpos) - -- TEMPORATY CODE SECTION ENDS HERE -- - - - -- Enable teleportation cooloff for some seconds, to prevent back-and-forth teleportation - teleport_cooloff(obj) - - -- Teleport - obj:set_pos(exit) - - if is_player then - mcl_worlds.dimension_change(obj, dim) - minetest.sound_play("mcl_portals_teleport", {pos=exit, gain=0.5, max_hear_distance = 16}, true) - log("action", "[mcl_portals] player "..name.." teleported to Nether portal at "..pos_to_string(exit)..".") - else - log("action", "[mcl_portals] entity teleported to Nether portal at "..pos_to_string(exit)..".") - end -end - -local function create_portal_2(pos1, name, obj) - local orientation = 0 - local pos2 = {x = pos1.x + 3, y = pos1.y + 3, z = pos1.z + 3} - local nodes = find_nodes_in_area(pos1, pos2, {"air"}) - if #nodes == 64 then - orientation = random(0,1) - else - pos2.x = pos2.x - 1 - nodes = find_nodes_in_area(pos1, pos2, {"air"}) - if #nodes == 48 then - orientation = 1 - end - end - local exit = build_nether_portal(pos1, W_MIN-2, H_MIN-2, orientation, name) - finalize_teleport(obj, exit) - local cn = mcl_vars.get_chunk_number(pos1) - chunks[cn] = nil - if queue[cn] then - for next_obj, _ in pairs(queue[cn]) do - if next_obj ~= obj then - finalize_teleport(next_obj, exit) - end - end - queue[cn] = nil - end -end - -local function get_lava_level(pos, pos1, pos2) - if pos.y > -1000 then - return max(min(mcl_vars.mg_lava_overworld_max, pos2.y-1), pos1.y+1) - end - return max(min(mcl_vars.mg_lava_nether_max, pos2.y-1), pos1.y+1) -end - -local function ecb_scan_area_2(blockpos, action, calls_remaining, param) - if calls_remaining and calls_remaining > 0 then return end - local pos, pos1, pos2, name, obj = param.pos, param.pos1, param.pos2, param.name or "", param.obj - local pos0, distance - local lava = get_lava_level(pos, pos1, pos2) - - -- THIS IS A TEMPORATY CODE SECTION FOR COMPATIBILITY REASONS -- 2 of 2 -- TODO: Remove -- - -- Find portals for old worlds (new worlds keep them all in the table): - local portals = find_nodes_in_area(pos1, pos2, {PORTAL}) - if portals and #portals>0 then - for _, p in pairs(portals) do - add_exit(p) - end - local exit = find_exit(pos) - if exit then - finalize_teleport(obj, exit) - end - return - end - -- TEMPORATY CODE SECTION ENDS HERE -- - - - local nodes = find_nodes_in_area_under_air(pos1, pos2, {"group:building_block"}) - if nodes then - local nc = #nodes - log("action", "[mcl_portals] Area for destination Nether portal emerged! Found " .. tostring(nc) .. " nodes under the air around "..pos_to_string(pos)) - if nc > 0 then - for i=1,nc do - local node = nodes[i] - local node1 = {x=node.x, y=node.y+1, z=node.z } - local node2 = {x=node.x+2, y=node.y+3, z=node.z+2} - local nodes2 = find_nodes_in_area(node1, node2, {"air"}) - if nodes2 then - local nc2 = #nodes2 - if nc2 == 27 and not is_area_protected(node, node2, name) then - local distance0 = dist(pos, node) - if distance0 < 2 then - log("action", "[mcl_portals] found space at pos "..pos_to_string(node).." - creating a portal") - create_portal_2(node1, name, obj) - return - end - if not distance or (distance0 < distance) or (distance0 < distance-1 and node.y > lava and pos0.y < lava) then - log("verbose", "[mcl_portals] found distance "..tostring(distance0).." at pos "..pos_to_string(node)) - distance = distance0 - pos0 = {x=node1.x, y=node1.y, z=node1.z} - end - end - end - end - end - end - if distance then -- several nodes of air might be better than lava lake, right? - log("action", "[mcl_portals] using backup pos "..pos_to_string(pos0).." to create a portal") - create_portal_2(pos0, name, obj) - return - end - - if param.next_chunk_1 and param.next_chunk_2 and param.next_pos then - local pos1, pos2, p = param.next_chunk_1, param.next_chunk_2, param.next_pos - if p.x >= pos1.x and p.x <= pos2.x and p.y >= pos1.y and p.y <= pos2.y and p.z >= pos1.z and p.z <= pos2.z then - log("action", "[mcl_portals] Making additional search in chunk below, because current one doesn't contain any air space for portal, target pos "..pos_to_string(p)) - minetest.emerge_area(pos1, pos2, ecb_scan_area_2, {pos = p, pos1 = pos1, pos2 = pos2, name=name, obj=obj}) - return - end - end - - log("action", "[mcl_portals] found no space, reverting to target pos "..pos_to_string(pos).." - creating a portal") - if pos.y < lava then - pos.y = lava + 1 - else - pos.y = pos.y + 1 - end - create_portal_2(pos, name, obj) -end - -local function create_portal(pos, limit1, limit2, name, obj) - local cn = mcl_vars.get_chunk_number(pos) - if chunks[cn] then - local q = queue[cn] or {} - q[obj] = true - queue[cn] = q - return - end - chunks[cn] = true - - -- we need to emerge the area here, but currently (mt5.4/mcl20.71) map generation is slow - -- so we'll emerge single chunk only: 5x5x5 blocks, 80x80x80 nodes maximum - -- and maybe one more chunk from below if (SCAN_2_MAP_CHUNKS = true) - - local pos1 = add(mul(mcl_vars.pos_to_chunk(pos), mcl_vars.chunk_size_in_nodes), mcl_vars.central_chunk_offset_in_nodes) - local pos2 = add(pos1, mcl_vars.chunk_size_in_nodes - 1) - - if not SCAN_2_MAP_CHUNKS then - if limit1 and limit1.x and limit1.y and limit1.z then - pos1 = {x = max(min(limit1.x, pos.x), pos1.x), y = max(min(limit1.y, pos.y), pos1.y), z = max(min(limit1.z, pos.z), pos1.z)} - end - if limit2 and limit2.x and limit2.y and limit2.z then - pos2 = {x = min(max(limit2.x, pos.x), pos2.x), y = min(max(limit2.y, pos.y), pos2.y), z = min(max(limit2.z, pos.z), pos2.z)} - end - minetest.emerge_area(pos1, pos2, ecb_scan_area_2, {pos = vector.new(pos), pos1 = pos1, pos2 = pos2, name=name, obj=obj}) - return - end - - -- Basically the copy of code above, with minor additions to continue the search in single additional chunk below: - local next_chunk_1 = {x = pos1.x, y = pos1.y - mcl_vars.chunk_size_in_nodes, z = pos1.z} - local next_chunk_2 = add(next_chunk_1, mcl_vars.chunk_size_in_nodes - 1) - local next_pos = {x = pos.x, y=max(next_chunk_2.y, limit1.y), z = pos.z} - if limit1 and limit1.x and limit1.y and limit1.z then - pos1 = {x = max(min(limit1.x, pos.x), pos1.x), y = max(min(limit1.y, pos.y), pos1.y), z = max(min(limit1.z, pos.z), pos1.z)} - next_chunk_1 = {x = max(min(limit1.x, next_pos.x), next_chunk_1.x), y = max(min(limit1.y, next_pos.y), next_chunk_1.y), z = max(min(limit1.z, next_pos.z), next_chunk_1.z)} - end - if limit2 and limit2.x and limit2.y and limit2.z then - pos2 = {x = min(max(limit2.x, pos.x), pos2.x), y = min(max(limit2.y, pos.y), pos2.y), z = min(max(limit2.z, pos.z), pos2.z)} - next_chunk_2 = {x = min(max(limit2.x, next_pos.x), next_chunk_2.x), y = min(max(limit2.y, next_pos.y), next_chunk_2.y), z = min(max(limit2.z, next_pos.z), next_chunk_2.z)} - end - minetest.emerge_area(pos1, pos2, ecb_scan_area_2, {pos = vector.new(pos), pos1 = pos1, pos2 = pos2, name=name, obj=obj, next_chunk_1 = next_chunk_1, next_chunk_2 = next_chunk_2, next_pos = next_pos}) -end - -local function available_for_nether_portal(p) - local nn = get_node(p).name - local obsidian = nn == OBSIDIAN - if nn ~= "air" and minetest.get_item_group(nn, "fire") ~= 1 then - return false, obsidian - end - return true, obsidian -end - -local function check_and_light_shape(pos, orientation) - local stack = {{x = pos.x, y = pos.y, z = pos.z}} - local node_list = {} - local index_list = {} - local node_counter = 0 - -- Search most low node from the left (pos1) and most right node from the top (pos2) - local pos1 = {x = pos.x, y = pos.y, z = pos.z} - local pos2 = {x = pos.x, y = pos.y, z = pos.z} - - local kx, ky, kz = pos.x - 1999, pos.y - 1999, pos.z - 1999 - while #stack > 0 do - local i = #stack - local x, y, z = stack[i].x, stack[i].y, stack[i].z - local k = (x-kx)*16000000 + (y-ky)*4000 + z-kz - if index_list[k] then - stack[i] = nil -- Already checked, skip it - else - local good, obsidian = available_for_nether_portal(stack[i]) - if obsidian then - stack[i] = nil - else - if (not good) or (node_counter >= N_MAX) then - return false - end - node_counter = node_counter + 1 - node_list[node_counter] = {x = x, y = y, z = z} - index_list[k] = true - stack[i].y = y - 1 - stack[i + 1] = {x = x, y = y + 1, z = z} - if orientation == 0 then - stack[i + 2] = {x = x - 1, y = y, z = z} - stack[i + 3] = {x = x + 1, y = y, z = z} - else - stack[i + 2] = {x = x, y = y, z = z - 1} - stack[i + 3] = {x = x, y = y, z = z + 1} - end - if (y < pos1.y) or (y == pos1.y and (x < pos1.x or z < pos1.z)) then - pos1 = {x = x, y = y, z = z} - end - if (x > pos2.x or z > pos2.z) or (x == pos2.x and z == pos2.z and y > pos2.y) then - pos2 = {x = x, y = y, z = z} - end - end - end - end - - if node_counter < N_MIN then - return false - end - - -- Limit rectangles width and height - if abs(pos2.x - pos1.x + pos2.z - pos1.z) + 3 > W_MAX or abs(pos2.y - pos1.y) + 3 > H_MAX then - return false - end - - for i = 1, node_counter do - local node_pos = node_list[i] - minetest.set_node(node_pos, {name = PORTAL, param2 = orientation}) - add_exit(node_pos) - end - return true -end - --- Attempts to light a Nether portal at pos --- Pos can be any of the inner part. --- The frame MUST be filled only with air or any fire, which will be replaced with Nether portal blocks. --- If no Nether portal can be lit, nothing happens. --- Returns true if portal created -function mcl_portals.light_nether_portal(pos) - -- Only allow to make portals in Overworld and Nether - local dim = mcl_worlds.pos_to_dimension(pos) - if dim ~= "overworld" and dim ~= "nether" then - return false - end - local orientation = random(0, 1) - for orientation_iteration = 1, 2 do - if check_and_light_shape(pos, orientation) then - return true - end - orientation = 1 - orientation - end - return false -end - --- Teleport function -local function teleport_no_delay(obj, pos) - local is_player = obj:is_player() - if (not is_player and not obj:get_luaentity()) or cooloff[obj] then return end - - local objpos = obj:get_pos() - if not objpos then return end - - -- If player stands, player is at ca. something+0.5 which might cause precision problems, so we used ceil for objpos.y - objpos = {x = floor(objpos.x+0.5), y = ceil(objpos.y), z = floor(objpos.z+0.5)} - if get_node(objpos).name ~= PORTAL then return end - - local target, dim = get_target(objpos) - if not target then return end - - local name - if is_player then - name = obj:get_player_name() - end - - local exit = find_exit(target) - if exit then - finalize_teleport(obj, exit) - else - dim = dimension_to_teleport[dim] - -- need to create arrival portal - create_portal(target, limits[dim].pmin, limits[dim].pmax, name, obj) - end -end - -local function prevent_portal_chatter(obj) - local time_us = get_us_time() - local ch = chatter[obj] or 0 - chatter[obj] = time_us - minetest.after(TOUCH_CHATTER_TIME, function(o) - if o and chatter[o] and get_us_time() - chatter[o] >= CHATTER_US then - chatter[o] = nil - end - end, obj) - return time_us - ch > CHATTER_US -end - -local function animation(player, playername) - local ch = chatter[player] or 0 - if cooloff[player] or get_us_time() - ch < CHATTER_US then - local pos = player:get_pos() - if not pos then - return - end - minetest.add_particlespawner({ - amount = 1, - minpos = {x = pos.x - 0.1, y = pos.y + 1.4, z = pos.z - 0.1}, - maxpos = {x = pos.x + 0.1, y = pos.y + 1.6, z = pos.z + 0.1}, - minvel = 0, - maxvel = 0, - minacc = 0, - maxacc = 0, - minexptime = 0.1, - maxexptime = 0.2, - minsize = 5, - maxsize = 15, - collisiondetection = false, - texture = "mcl_particles_nether_portal_t.png", - playername = playername, - }) - minetest.after(0.3, animation, player, playername) - end -end - -local function teleport(obj, portal_pos) - local name = "" - if obj:is_player() then - name = obj:get_player_name() - animation(obj, name) - end - - if cooloff[obj] then return end - - if minetest.is_creative_enabled(name) then - teleport_no_delay(obj, portal_pos) - return - end - - minetest.after(DELAY, teleport_no_delay, obj, portal_pos) -end - -minetest.register_abm({ - label = "Nether portal teleportation and particles", - nodenames = {PORTAL}, - interval = 1, - chance = 1, - action = function(pos, node) - local o = node.param2 -- orientation - local d = random(0, 1) -- direction - local time = random() * 1.9 + 0.5 - local velocity, acceleration - if o == 1 then - velocity = {x = random() * 0.7 + 0.3, y = random() - 0.5, z = random() - 0.5} - acceleration = {x = random() * 1.1 + 0.3, y = random() - 0.5, z = random() - 0.5} - else - velocity = {x = random() - 0.5, y = random() - 0.5, z = random() * 0.7 + 0.3} - acceleration = {x = random() - 0.5, y = random() - 0.5, z = random() * 1.1 + 0.3} - end - local distance = add(mul(velocity, time), mul(acceleration, time * time / 2)) - if d == 1 then - if o == 1 then - distance.x = -distance.x - velocity.x = -velocity.x - acceleration.x = -acceleration.x - else - distance.z = -distance.z - velocity.z = -velocity.z - acceleration.z = -acceleration.z - end - end - distance = sub(pos, distance) - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 15)) do - if obj:is_player() then - minetest.add_particlespawner({ - amount = PARTICLES + 1, - minpos = distance, - maxpos = distance, - minvel = velocity, - maxvel = velocity, - minacc = acceleration, - maxacc = acceleration, - minexptime = time, - maxexptime = time, - minsize = 0.3, - maxsize = 1.8, - collisiondetection = false, - texture = "mcl_particles_nether_portal.png", - playername = obj:get_player_name(), - }) - end - end - for _, obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do --maikerumine added for objects to travel - local lua_entity = obj:get_luaentity() --maikerumine added for objects to travel - if (obj:is_player() or lua_entity) and prevent_portal_chatter(obj) then - teleport(obj, pos) - end - end - end, -}) - - ---[[ ITEM OVERRIDES ]] - -local longdesc = registered_nodes[OBSIDIAN]._doc_items_longdesc -longdesc = longdesc .. "\n" .. S("Obsidian is also used as the frame of Nether portals.") -local usagehelp = S("To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.") - -minetest.override_item(OBSIDIAN, { - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - after_destruct = function(pos, node) - local function check_remove(pos, orientation) - local node = get_node(pos) - if node and node.name == PORTAL then - minetest.remove_node(pos) - end - end - - -- check each of 6 sides of it and destroy every portal - check_remove({x = pos.x - 1, y = pos.y, z = pos.z}) - check_remove({x = pos.x + 1, y = pos.y, z = pos.z}) - check_remove({x = pos.x, y = pos.y, z = pos.z - 1}) - check_remove({x = pos.x, y = pos.y, z = pos.z + 1}) - check_remove({x = pos.x, y = pos.y - 1, z = pos.z}) - check_remove({x = pos.x, y = pos.y + 1, z = pos.z}) - end, - - _on_ignite = function(user, pointed_thing) - local x, y, z = pointed_thing.under.x, pointed_thing.under.y, pointed_thing.under.z - -- Check empty spaces around obsidian and light all frames found: - local portals_placed = - mcl_portals.light_nether_portal({x = x - 1, y = y, z = z}) or mcl_portals.light_nether_portal({x = x + 1, y = y, z = z}) or - mcl_portals.light_nether_portal({x = x, y = y - 1, z = z}) or mcl_portals.light_nether_portal({x = x, y = y + 1, z = z}) or - mcl_portals.light_nether_portal({x = x, y = y, z = z - 1}) or mcl_portals.light_nether_portal({x = x, y = y, z = z + 1}) - if portals_placed then - log("action", "[mcl_portals] Nether portal activated at "..pos_to_string({x=x,y=y,z=z})..".") - if minetest.get_modpath("doc") then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", PORTAL) - - -- Achievement for finishing a Nether portal TO the Nether - local dim = mcl_worlds.pos_to_dimension({x=x, y=y, z=z}) - if minetest.get_modpath("awards") and dim ~= "nether" and user:is_player() then - awards.unlock(user:get_player_name(), "mcl:buildNetherPortal") - end - end - return true - else - return false - end - end, -}) diff --git a/mods/ITEMS/mcl_portals/sounds/mcl_portals_open_end_portal.ogg b/mods/ITEMS/mcl_portals/sounds/mcl_portals_open_end_portal.ogg deleted file mode 100644 index 82311b3dc4..0000000000 Binary files a/mods/ITEMS/mcl_portals/sounds/mcl_portals_open_end_portal.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/sounds/mcl_portals_teleport.ogg b/mods/ITEMS/mcl_portals/sounds/mcl_portals_teleport.ogg deleted file mode 100644 index 1d64c451bc..0000000000 Binary files a/mods/ITEMS/mcl_portals/sounds/mcl_portals_teleport.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal.png b/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal.png deleted file mode 100644 index 2837756f6d..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal_t.png b/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal_t.png deleted file mode 100644 index 05c508c53b..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_particles_nether_portal_t.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_end_portal.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_end_portal.png deleted file mode 100644 index 46d548e92b..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_end_portal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_bottom.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_bottom.png deleted file mode 100644 index 49125a86ad..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_eye.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_eye.png deleted file mode 100644 index c1d3a2bb62..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_eye.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_side.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_side.png deleted file mode 100644 index a2370ecefe..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_side.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_top.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_top.png deleted file mode 100644 index ad2b729fff..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_endframe_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle1.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_particle1.png deleted file mode 100644 index 6695291eb7..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle2.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_particle2.png deleted file mode 100644 index 99b3a191a1..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle3.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_particle3.png deleted file mode 100644 index 3000a799cb..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle4.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_particle4.png deleted file mode 100644 index 28d14cbd6c..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle5.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_particle5.png deleted file mode 100644 index fbd67375a5..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_particle5.png and /dev/null differ diff --git a/mods/ITEMS/mcl_portals/textures/mcl_portals_portal.png b/mods/ITEMS/mcl_portals/textures/mcl_portals_portal.png deleted file mode 100644 index a47f4f4e35..0000000000 Binary files a/mods/ITEMS/mcl_portals/textures/mcl_portals_portal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_raw_ores/init.lua b/mods/ITEMS/mcl_raw_ores/init.lua deleted file mode 100644 index 12ca8d2221..0000000000 --- a/mods/ITEMS/mcl_raw_ores/init.lua +++ /dev/null @@ -1,50 +0,0 @@ -local function register_raw_ore(description, n) - local ore = description:lower() - local n = n or "" - local raw_ingot = "mcl_raw_ores:raw_"..ore - local texture = "mcl_raw_ores_raw_"..ore - - minetest.register_craftitem(raw_ingot, { - description = ("Raw "..description), - _doc_items_longdesc = ("Raw "..ore..". Mine a"..n.." "..ore.." ore to get it."), - inventory_image = texture..".png", - groups = { craftitem = 1 }, - }) - - minetest.register_node(raw_ingot.."_block", { - description = ("Block of Raw "..description), - _doc_items_longdesc = ("A block of raw "..ore.." is mostly a decorative block but also useful as a compact storage of raw "..ore.."."), - tiles = { texture.."_block.png" }, - is_ground_content = false, - groups = { pickaxey = 2, building_block = 1 }, - sounds = mcl_sounds.node_sound_metal_defaults(), - _mcl_blast_resistance = 6, - _mcl_hardness = 5, - }) - - minetest.register_craft({ - output = raw_ingot.."_block", - recipe = { - { raw_ingot, raw_ingot, raw_ingot }, - { raw_ingot, raw_ingot, raw_ingot }, - { raw_ingot, raw_ingot, raw_ingot }, - }, - }) - - minetest.register_craft({ - type = "cooking", - output = "mcl_core:"..ore.."_ingot", - recipe = raw_ingot, - cooktime = 10, - }) - - minetest.register_craft({ - output = raw_ingot.." 9", - recipe = { - { raw_ingot.."_block" }, - }, - }) -end - -register_raw_ore("Iron", "n") -register_raw_ore("Gold") diff --git a/mods/ITEMS/mcl_raw_ores/mod.conf b/mods/ITEMS/mcl_raw_ores/mod.conf deleted file mode 100644 index a3ee955c7a..0000000000 --- a/mods/ITEMS/mcl_raw_ores/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_raw_ores -author = NO11 -depends = mcl_core -description = Adds raw iron and raw gold. \ No newline at end of file diff --git a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold.png b/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold.png deleted file mode 100644 index 9b3e14e883..0000000000 Binary files a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold.png and /dev/null differ diff --git a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold_block.png b/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold_block.png deleted file mode 100644 index 71e8767b3f..0000000000 Binary files a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_gold_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron.png b/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron.png deleted file mode 100644 index 73076a67e0..0000000000 Binary files a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron_block.png b/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron_block.png deleted file mode 100644 index f8b10745d7..0000000000 Binary files a/mods/ITEMS/mcl_raw_ores/textures/mcl_raw_ores_raw_iron_block.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/init.lua b/mods/ITEMS/mcl_shields/init.lua deleted file mode 100644 index 038ffc0f3c..0000000000 --- a/mods/ITEMS/mcl_shields/init.lua +++ /dev/null @@ -1,515 +0,0 @@ -local minetest, math, vector = minetest, math, vector -local modname = minetest.get_current_modname() -local S = minetest.get_translator(modname) - -mcl_shields = { - types = { - mob = true, - player = true, - arrow = true, - generic = true, - explosion = true, - dragon_breath = true, - }, - enchantments = {"mending", "unbreaking"}, - players = {}, -} - -local interact_priv = minetest.registered_privileges.interact -interact_priv.give_to_singleplayer = false -interact_priv.give_to_admin = false - -local overlay = mcl_enchanting.overlay -local hud = "mcl_shield_hud.png" - -minetest.register_tool("mcl_shields:shield", { - description = S("Shield"), - _doc_items_longdesc = S("A shield is a tool used for protecting the player against attacks."), - inventory_image = "mcl_shield.png", - stack_max = 1, - groups = { - shield = 1, - weapon = 1, - enchantability = -1, - no_wieldview = 1, - offhand_item = 1, - }, - sound = {breaks = "default_tool_breaks"}, - _repair_material = "group:wood", - wield_scale = vector.new(2, 2, 2), -}) - -local function wielded_item(obj, i) - local itemstack = obj:get_wielded_item() - if i == 1 then - itemstack = obj:get_inventory():get_stack("offhand", 1) - end - return itemstack:get_name() -end - -function mcl_shields.wielding_shield(obj, i) - return wielded_item(obj, i):find("mcl_shields:shield") -end - -local function shield_is_enchanted(obj, i) - return mcl_enchanting.is_enchanted(wielded_item(obj, i)) -end - -minetest.register_entity("mcl_shields:shield_entity", { - initial_properties = { - visual = "mesh", - mesh = "mcl_shield.obj", - physical = false, - pointable = false, - collide_with_objects = false, - textures = {"mcl_shield_base_nopattern.png"}, - visual_size = vector.new(1, 1, 1), - }, - _blocking = false, - _shield_number = 2, - _texture_copy = "", - on_step = function(self, dtime, moveresult) - local player = self.object:get_attach() - if not player then - self.object:remove() - return - end - local shield_texture = "mcl_shield_base_nopattern.png" - local i = self._shield_number - local item = wielded_item(player, i) - - if item ~= "mcl_shields:shield" and item ~= "mcl_shields:shield_enchanted" then - local itemstack = player:get_wielded_item() - if i == 1 then - itemstack = player:get_inventory():get_stack("offhand", 1) - end - local meta_texture = itemstack:get_meta():get_string("mcl_shields:shield_custom_pattern_texture") - if meta_texture ~= "" then - shield_texture = meta_texture - else - local color = minetest.registered_items[item]._shield_color - if color then - shield_texture = "mcl_shield_base_nopattern.png^(mcl_shield_pattern_base.png^[colorize:" .. color .. ")" - end - end - end - - if shield_is_enchanted(player, i) then - shield_texture = shield_texture .. overlay - end - - if self._texture_copy ~= shield_texture then - self.object:set_properties({textures = {shield_texture}}) - end - - self._texture_copy = shield_texture - end, -}) - -for _, e in pairs(mcl_shields.enchantments) do - mcl_enchanting.enchantments[e].secondary.shield = true -end - -function mcl_shields.is_blocking(obj) - if not obj:is_player() then return end - local blocking = mcl_shields.players[obj].blocking - if blocking <= 0 then - return - end - - local shieldstack = obj:get_wielded_item() - if blocking == 1 then - shieldstack = obj:get_inventory():get_stack("offhand", 1) - end - return blocking, shieldstack -end - -mcl_damage.register_modifier(function(obj, damage, reason) - local type = reason.type - local damager = reason.direct - local blocking, shieldstack = mcl_shields.is_blocking(obj) - - if not (obj:is_player() and blocking and mcl_shields.types[type] and damager) then - return - end - - local entity = damager:get_luaentity() - if entity and entity._shooter then - damager = entity._shooter - end - - local dpos = damager:get_pos() - - -- Used for removed / killed entities before the projectile hits the player - if entity and not entity._shooter and entity._saved_shooter_pos then - dpos = entity._saved_shooter_pos - end - - if not dpos or vector.dot(obj:get_look_dir(), vector.subtract(dpos, obj:get_pos())) < 0 then - return - end - - local durability = 336 - local unbreaking = mcl_enchanting.get_enchantment(shieldstack, mcl_shields.enchantments[2]) - if unbreaking > 0 then - durability = durability * (unbreaking + 1) - end - - if not minetest.is_creative_enabled(obj:get_player_name()) and damage >= 3 then - shieldstack:add_wear(65535 / durability) - if blocking == 2 then - obj:set_wielded_item(shieldstack) - else - obj:get_inventory():set_stack("offhand", 1, shieldstack) - mcl_inventory.update_inventory_formspec(obj) - end - end - minetest.sound_play({name = "mcl_block"}) - return 0 -end) - -local function modify_shield(player, vpos, vrot, i) - local arm = "Right" - if i == 1 then - arm = "Left" - end - local shield = mcl_shields.players[player].shields[i] - if shield then - shield:set_attach(player, "Arm_" .. arm, vpos, vrot, false) - end -end - -local function set_shield(player, block, i) - if block then - if i == 1 then - modify_shield(player, vector.new(-9, 4, 0.5), vector.new(80, 100, 0), i) -- TODO - else - modify_shield(player, vector.new(-8, 4, -2.5), vector.new(80, 80, 0), i) - end - else - if i == 1 then - modify_shield(player, vector.new(-3, -5, 0), vector.new(0, 180, 0), i) - else - modify_shield(player, vector.new(3, -5, 0), vector.new(0, 0, 0), i) - end - end - local shield = mcl_shields.players[player].shields[i] - if not shield then return end - - local luaentity = shield:get_luaentity() - if not luaentity then return end - - luaentity._blocking = block -end - -local function set_interact(player, interact) - local player_name = player:get_player_name() - local privs = minetest.get_player_privs(player_name) - if privs.interact == interact then - return - end - local meta = player:get_meta() - if meta:get_int("mcl_privs:interact_revoked") ~= 1 then - privs.interact = interact - minetest.set_player_privs(player_name, privs) - meta:set_int("mcl_privs:interact_revoked",0) - end -end - -local shield_hud = {} - -local function remove_shield_hud(player) - if shield_hud[player] then - player:hud_remove(shield_hud[player]) - shield_hud[player] = nil - set_shield(player, false, 1) - set_shield(player, false, 2) - end - - local hf = player:hud_get_flags() - if not hf.wielditem then - player:hud_set_flags({wielditem = true}) - end - - playerphysics.remove_physics_factor(player, "speed", "shield_speed") - set_interact(player, true) -end - -local function add_shield_entity(player, i) - local shield = minetest.add_entity(player:get_pos(), "mcl_shields:shield_entity") - shield:get_luaentity()._shield_number = i - mcl_shields.players[player].shields[i] = shield - set_shield(player, false, i) -end - -local function remove_shield_entity(player, i) - local shields = mcl_shields.players[player].shields - if shields[i] then - shields[i]:remove() - shields[i] = nil - end -end - -local function handle_blocking(player) - local player_shield = mcl_shields.players[player] - local rmb = player:get_player_control().RMB - if not rmb then - player_shield.blocking = 0 - return - end - - local shield_in_offhand = mcl_shields.wielding_shield(player, 1) - local shield_in_hand = mcl_shields.wielding_shield(player) - local not_blocking = player_shield.blocking == 0 - - local pos = player:get_pos() - if shield_in_hand then - if not_blocking then - minetest.after(0.25, function() - if (not_blocking or not shield_in_offhand) and shield_in_hand and rmb then - player_shield.blocking = 2 - set_shield(player, true, 2) - end - end) - elseif not shield_in_offhand then - player_shield.blocking = 2 - end - elseif shield_in_offhand then - local offhand_can_block = (wielded_item(player) == "" or not mcl_util.get_pointed_thing(player, true)) - and (minetest.get_item_group(wielded_item(player), "bow") ~= 1 and minetest.get_item_group(wielded_item(player), "crossbow") ~= 1) - - if not offhand_can_block then - return - end - if not_blocking then - minetest.after(0.25, function() - if (not_blocking or not shield_in_hand) and shield_in_offhand and rmb and offhand_can_block then - player_shield.blocking = 1 - set_shield(player, true, 1) - end - end) - elseif not shield_in_hand then - player_shield.blocking = 1 - end - else - player_shield.blocking = 0 - end -end - -local function update_shield_entity(player, blocking, i) - local shield = mcl_shields.players[player].shields[i] - if mcl_shields.wielding_shield(player, i) then - if not shield then - add_shield_entity(player, i) - else - if blocking == i then - if shield:get_luaentity() and not shield:get_luaentity()._blocking then - set_shield(player, true, i) - end - else - set_shield(player, false, i) - end - end - elseif shield then - remove_shield_entity(player, i) - end -end - -local function add_shield_hud(shieldstack, player, blocking) - local texture = hud - if mcl_enchanting.is_enchanted(shieldstack:get_name()) then - texture = texture .. overlay - end - local offset = 100 - if blocking == 1 then - texture = texture .. "^[transform4" - offset = -100 - else - player:hud_set_flags({wielditem = false}) - end - shield_hud[player] = player:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 0.5}, - scale = {x = -101, y = -101}, - offset = {x = offset, y = 0}, - text = texture, - z_index = -200, - }) - playerphysics.add_physics_factor(player, "speed", "shield_speed", 0.5) - set_interact(player, nil) -end - -local function update_shield_hud(player, blocking, shieldstack) - local shieldhud = shield_hud[player] - if not shieldhud then - add_shield_hud(shieldstack, player, blocking) - return - end - - local wielditem = player:hud_get_flags().wielditem - if blocking == 1 then - if not wielditem then - player:hud_change(shieldhud, "text", hud .. "^[transform4") - player:hud_change(shieldhud, "offset", {x = -100, y = 0}) - player:hud_set_flags({wielditem = true}) - end - elseif wielditem then - player:hud_change(shieldhud, "text", hud) - player:hud_change(shieldhud, "offset", {x = 100, y = 0}) - player:hud_set_flags({wielditem = false}) - end - - local image = player:hud_get(shieldhud).text - local enchanted = hud .. overlay - local enchanted1 = image == enchanted - local enchanted2 = image == enchanted .. "^[transform4" - if mcl_enchanting.is_enchanted(shieldstack:get_name()) then - if not enchanted1 and not enchanted2 then - if blocking == 1 then - player:hud_change(shieldhud, "text", hud .. overlay .. "^[transform4") - else - player:hud_change(shieldhud, "text", hud .. overlay) - end - end - elseif enchanted1 or enchanted2 then - if blocking == 1 then - player:hud_change(shieldhud, "text", hud .. "^[transform4") - else - player:hud_change(shieldhud, "text", hud) - end - end -end - -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - - handle_blocking(player) - - local blocking, shieldstack = mcl_shields.is_blocking(player) - - if blocking then - update_shield_hud(player, blocking, shieldstack) - else - remove_shield_hud(player) - end - - for i = 1, 2 do - update_shield_entity(player, blocking, i) - end - end -end) - -minetest.register_on_dieplayer(function(player) - remove_shield_hud(player) - if not minetest.settings:get_bool("mcl_keepInventory") then - remove_shield_entity(player, 1) - remove_shield_entity(player, 2) - end -end) - -minetest.register_on_leaveplayer(function(player) - shield_hud[player] = nil - mcl_shields.players[player] = nil -end) - -minetest.register_craft({ - output = "mcl_shields:shield", - recipe = { - {"group:wood", "mcl_core:iron_ingot", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - {"", "group:wood", ""}, - } -}) - -for _, colortab in pairs(mcl_banners.colors) do - local color = colortab[1] - minetest.register_tool("mcl_shields:shield_" .. color, { - description = S(colortab[6] .. " Shield"), - _doc_items_longdesc = S("A shield is a tool used for protecting the player against attacks."), - inventory_image = "mcl_shield.png^(mcl_shield_item_overlay.png^[colorize:" .. colortab[4] ..")", - stack_max = 1, - groups = { - shield = 1, - weapon = 1, - enchantability = -1, - no_wieldview = 1, - not_in_creative_inventory = 1, - offhand_item = 1, - }, - sound = {breaks = "default_tool_breaks"}, - _repair_material = "group:wood", - wield_scale = vector.new(2, 2, 2), - _shield_color = colortab[4], - }) - - local banner = "mcl_banners:banner_item_" .. color - minetest.register_craft({ - type = "shapeless", - output = "mcl_shields:shield_" .. color, - recipe = {"mcl_shields:shield", banner}, - }) - minetest.register_craft({ - type = "shapeless", - output = "mcl_shields:shield_" .. color .. "_enchanted", - recipe = {"mcl_shields:shield_enchanted", banner}, - }) -end - -local function to_shield_texture(banner_texture) - return banner_texture - :gsub("mcl_banners_base_inverted.png", "mcl_shield_base_nopattern.png^mcl_shield_pattern_base.png") - :gsub("mcl_banners_banner_base.png", "mcl_shield_base_nopattern.png^mcl_shield_pattern_base.png") - :gsub("mcl_banners_base", "mcl_shield_pattern_base") - :gsub("mcl_banners", "mcl_shield_pattern") -end - -local function craft_banner_on_shield(itemstack, player, old_craft_grid, craft_inv) - if not string.find(itemstack:get_name(), "mcl_shields:shield_") then - return itemstack - end - - local shield_stack - for i = 1, player:get_inventory():get_size("craft") do - local stack = old_craft_grid[i] - local name = stack:get_name() - if minetest.get_item_group(name, "shield") then - shield_stack = stack - break - end - end - - for i = 1, player:get_inventory():get_size("craft") do - local banner_stack = old_craft_grid[i] - local banner_name = banner_stack:get_name() - if string.find(banner_name, "mcl_banners:banner") and shield_stack then - local banner_meta = banner_stack:get_meta() - local layers_meta = banner_meta:get_string("layers") - local new_shield_meta = itemstack:get_meta() - if layers_meta ~= "" then - local color = mcl_banners.color_reverse(banner_name) - local layers = minetest.deserialize(layers_meta) - local texture = mcl_banners.make_banner_texture(color, layers) - new_shield_meta:set_string("description", mcl_banners.make_advanced_banner_description(itemstack:get_description(), layers)) - new_shield_meta:set_string("mcl_shields:shield_custom_pattern_texture", to_shield_texture(texture)) - end - itemstack:set_wear(shield_stack:get_wear()) - break - end - end -end - -minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv) - return craft_banner_on_shield(itemstack, player, old_craft_grid, craft_inv) -end) - -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - return craft_banner_on_shield(itemstack, player, old_craft_grid, craft_inv) -end) - -minetest.register_on_joinplayer(function(player) - mcl_shields.players[player] = { - shields = {}, - blocking = 0, - } - remove_shield_hud(player) -end) diff --git a/mods/ITEMS/mcl_shields/locale/mcl_shields.de.tr b/mods/ITEMS/mcl_shields/locale/mcl_shields.de.tr deleted file mode 100644 index 2a4deccc01..0000000000 --- a/mods/ITEMS/mcl_shields/locale/mcl_shields.de.tr +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_shields -Shield=Schild -A shield is a tool used for protecting the player against attacks.=Der Schild ist eine Schutzwaffe, die den Spieler vor Angriffen schützt. -White Shield=Weißer Schild -Grey Shield=Grauer Schild -Light Grey Shield=Hellgrauer Schild -Black Shield=Schwarzer Schild -Red Shield=Roter Schild -Yellow Shield=Gelber Schild -Green Shield=Grüner Schild -Cyan Shield=Türkiser Schild -Blue Shield=Blauer Schild -Magenta Shield=Magenta Schild -Orange Shield=Oranger Schild -Purple Shield=Violetter Schild -Brown Shield=Brauner Schild -Pink Shield=Rosa Schild -Lime Shield=Hellgrüner Schild -Light Blue Shield=Hellblauer Schild diff --git a/mods/ITEMS/mcl_shields/locale/template.txt b/mods/ITEMS/mcl_shields/locale/template.txt deleted file mode 100644 index bcf7b1b543..0000000000 --- a/mods/ITEMS/mcl_shields/locale/template.txt +++ /dev/null @@ -1,19 +0,0 @@ -# textdomain: mcl_shields -Shield= -A shield is a tool used for protecting the player against attacks.= -White Shield= -Grey Shield= -Light Grey Shield= -Black Shield= -Red Shield= -Yellow Shield= -Green Shield= -Cyan Shield= -Blue Shield= -Magenta Shield= -Orange Shield= -Purple Shield= -Brown Shield= -Pink Shield= -Lime Shield= -Light Blue Shield= diff --git a/mods/ITEMS/mcl_shields/mod.conf b/mods/ITEMS/mcl_shields/mod.conf deleted file mode 100644 index 8aded6a621..0000000000 --- a/mods/ITEMS/mcl_shields/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_shields -author = NO11 -depends = mcl_damage, mcl_enchanting, mcl_banners, mcl_util, playerphysics diff --git a/mods/ITEMS/mcl_shields/models/mcl_shield.obj b/mods/ITEMS/mcl_shields/models/mcl_shield.obj deleted file mode 100644 index b1cf77c280..0000000000 --- a/mods/ITEMS/mcl_shields/models/mcl_shield.obj +++ /dev/null @@ -1,88 +0,0 @@ -# Blender v3.0.0 OBJ File: '' -# www.blender.org -mtllib mcl_shield.mtl -o Cube.002_Cube.003 -v 4.663009 11.096291 6.387994 -v 4.663009 4.596560 5.241916 -v 5.213008 4.596560 5.241916 -v 5.213008 11.096291 6.387994 -v 5.213007 13.197435 -5.528180 -v 5.213007 6.697705 -6.674258 -v 4.663008 6.697705 -6.674258 -v 4.663008 13.197435 -5.528180 -v 4.663008 8.641873 -1.863572 -v 4.663008 8.068833 1.386293 -v 1.363008 8.068833 1.386294 -v 1.363008 8.641873 -1.863572 -v 1.363008 9.152122 1.577307 -v 1.363008 9.725162 -1.672559 -v 4.663008 9.152122 1.577306 -v 4.663008 9.725162 -1.672559 -vt 0.015625 0.984375 -vt 0.203125 0.984375 -vt 0.203125 1.000000 -vt 0.015625 1.000000 -vt 0.203125 0.640625 -vt 0.203125 0.984375 -vt 0.015625 0.984375 -vt 0.015625 0.640625 -vt 0.015625 0.984375 -vt 0.015625 0.640625 -vt -0.000000 0.640625 -vt -0.000000 0.984375 -vt 0.203125 0.984375 -vt 0.390625 0.984375 -vt 0.390625 1.000000 -vt 0.203125 1.000000 -vt 0.203125 0.984375 -vt 0.203125 0.640625 -vt 0.218750 0.640625 -vt 0.218750 0.984375 -vt 0.406250 0.640625 -vt 0.406250 0.984375 -vt 0.218750 0.984375 -vt 0.218750 0.640625 -vt 0.531250 0.812500 -vt 0.625000 0.812500 -vt 0.625000 0.906250 -vt 0.531250 0.906250 -vt 0.500000 0.906250 -vt 0.500000 0.812500 -vt 0.531250 0.812500 -vt 0.531250 0.906250 -vt 0.406250 0.812500 -vt 0.500000 0.812500 -vt 0.500000 0.906250 -vt 0.406250 0.906250 -vt 0.625000 0.812500 -vt 0.656250 0.812500 -vt 0.656250 0.906250 -vt 0.625000 0.906250 -vt 0.562500 1.000000 -vt 0.531250 1.000000 -vt 0.531250 0.906250 -vt 0.562500 0.906250 -vt 0.531250 1.000000 -vt 0.500000 1.000000 -vt 0.500000 0.906250 -vt 0.531250 0.906250 -vn 0.0000 -0.1736 0.9848 -vn 1.0000 0.0000 -0.0000 -vn 0.0000 -0.9848 -0.1736 -vn 0.0000 0.1736 -0.9848 -vn 0.0000 0.9848 0.1736 -vn -1.0000 -0.0000 0.0000 -usemtl Material.002 -s 1 -f 1/1/1 2/2/1 3/3/1 4/4/1 -f 5/5/2 4/6/2 3/7/2 6/8/2 -f 6/9/3 3/10/3 2/11/3 7/12/3 -f 7/13/4 8/14/4 5/15/4 6/16/4 -f 8/17/5 1/18/5 4/19/5 5/20/5 -f 7/21/6 2/22/6 1/23/6 8/24/6 -f 9/25/3 10/26/3 11/27/3 12/28/3 -f 12/29/6 11/30/6 13/31/6 14/32/6 -f 14/33/5 13/34/5 15/35/5 16/36/5 -f 16/37/2 15/38/2 10/39/2 9/40/2 -f 12/41/4 14/42/4 16/43/4 9/44/4 -f 13/45/1 11/46/1 10/47/1 15/48/1 diff --git a/mods/ITEMS/mcl_shields/sounds/mcl_block.ogg b/mods/ITEMS/mcl_shields/sounds/mcl_block.ogg deleted file mode 100644 index 3af7f04b4d..0000000000 Binary files a/mods/ITEMS/mcl_shields/sounds/mcl_block.ogg and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield.png b/mods/ITEMS/mcl_shields/textures/mcl_shield.png deleted file mode 100644 index 7391636e94..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_base_nopattern.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_base_nopattern.png deleted file mode 100644 index 8146632bbc..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_base_nopattern.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_hud.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_hud.png deleted file mode 100644 index 4286d3e83c..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_hud.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_item_overlay.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_item_overlay.png deleted file mode 100644 index 3e79536090..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_item_overlay.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_base.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_base.png deleted file mode 100644 index 268445b36c..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_base.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_border.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_border.png deleted file mode 100644 index e128218e60..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_border.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_bricks.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_bricks.png deleted file mode 100644 index f1ddd716bd..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_bricks.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_circle.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_circle.png deleted file mode 100644 index 8ff66b8c87..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_circle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_creeper.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_creeper.png deleted file mode 100644 index 5b30dc76be..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_creeper.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_cross.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_cross.png deleted file mode 100644 index 40a6624aef..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_cross.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_curly_border.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_curly_border.png deleted file mode 100644 index 9f8c21773d..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_curly_border.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_left.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_left.png deleted file mode 100644 index a04a6fdc08..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_right.png deleted file mode 100644 index 309f711bf9..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_left.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_left.png deleted file mode 100644 index c5f4399a07..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_right.png deleted file mode 100644 index 59dd957dd9..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_diagonal_up_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_flower.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_flower.png deleted file mode 100644 index fe7ca826f6..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_flower.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient.png deleted file mode 100644 index 29a98c7045..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient_up.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient_up.png deleted file mode 100644 index 09effb26ac..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_gradient_up.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal.png deleted file mode 100644 index 5187803b39..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal_bottom.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal_bottom.png deleted file mode 100644 index 515e6ddfec..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_horizontal_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical.png deleted file mode 100644 index 9a56804da0..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical_right.png deleted file mode 100644 index 4a5af61fba..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_half_vertical_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_rhombus.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_rhombus.png deleted file mode 100644 index 13b502289a..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_rhombus.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_skull.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_skull.png deleted file mode 100644 index 4e0c7c1f5b..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_skull.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_small_stripes.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_small_stripes.png deleted file mode 100644 index f125ba2fbf..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_small_stripes.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_left.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_left.png deleted file mode 100644 index a5c4e00c06..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_right.png deleted file mode 100644 index ca2c53692b..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_bottom_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_left.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_left.png deleted file mode 100644 index 2123cba15c..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_right.png deleted file mode 100644 index 3f7a759a82..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_square_top_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_straight_cross.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_straight_cross.png deleted file mode 100644 index dc861f0484..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_straight_cross.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_bottom.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_bottom.png deleted file mode 100644 index 859ad11d1a..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_center.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_center.png deleted file mode 100644 index 8d1e2404c1..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_center.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downleft.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downleft.png deleted file mode 100644 index c0a93cd4f7..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downleft.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downright.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downright.png deleted file mode 100644 index 09580857cb..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_downright.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_left.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_left.png deleted file mode 100644 index 6e5bcb02e7..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_middle.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_middle.png deleted file mode 100644 index af5ebc12a9..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_middle.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_right.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_right.png deleted file mode 100644 index dcb911b680..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_top.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_top.png deleted file mode 100644 index a1e10be463..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_stripe_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_thing.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_thing.png deleted file mode 100644 index 43b2a1d499..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_thing.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_bottom.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_bottom.png deleted file mode 100644 index 87d1aa95b3..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_top.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_top.png deleted file mode 100644 index 94d6528783..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangle_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_bottom.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_bottom.png deleted file mode 100644 index 3e4851abb9..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_bottom.png and /dev/null differ diff --git a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_top.png b/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_top.png deleted file mode 100644 index 0ae85d6d18..0000000000 Binary files a/mods/ITEMS/mcl_shields/textures/mcl_shield_pattern_triangles_top.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/README.txt b/mods/ITEMS/mcl_signs/README.txt deleted file mode 100644 index ee161fc95e..0000000000 --- a/mods/ITEMS/mcl_signs/README.txt +++ /dev/null @@ -1,13 +0,0 @@ -Mod based on reworked signs mod by PilzAdam: -https://forum.minetest.net/viewtopic.php?t=3289 - -License of code and font: MIT License - -Font source: 04.jp.org, some modifications and additions were made (added support for Latin-1 Supplement) -Original font license text states: “YOU MAY USE THEM AS YOU LIKE” (in about.gif file distributed with the font) - -License of textures: See README.md in top directory of MineClone 2. - -License of models: GPLv3 (https://www.gnu.org/licenses/gpl-3.0.html) -Models author: 22i. -Source: https://github.com/22i/amc diff --git a/mods/ITEMS/mcl_signs/characters.txt b/mods/ITEMS/mcl_signs/characters.txt deleted file mode 100644 index 3e30994aac..0000000000 --- a/mods/ITEMS/mcl_signs/characters.txt +++ /dev/null @@ -1,567 +0,0 @@ -A -_a_ -7 -B -_b_ -5 -C -_c_ -6 -D -_d_ -6 -E -_e_ -5 -F -_f_ -5 -G -_g_ -6 -H -_h_ -6 -I -_i_ -1 -J -_j_ -4 -K -_k_ -5 -L -_l_ -4 -M -_m_ -7 -N -_n_ -6 -O -_o_ -6 -P -_p_ -5 -Q -_q_ -7 -R -_r_ -5 -S -_s_ -5 -T -_t_ -5 -U -_u_ -6 -V -_v_ -7 -W -_w_ -9 -X -_x_ -5 -Y -_y_ -7 -Z -_z_ -5 -a -_a -5 -b -_b -5 -c -_c -4 -d -_d -5 -e -_e -4 -f -_f -4 -g -_g -5 -h -_h -5 -i -_i -1 -j -_j -1 -k -_k -4 -l -_l -1 -m -_m -7 -n -_n -5 -o -_o -5 -p -_p -5 -q -_q -5 -r -_r -3 -s -_s -4 -t -_t -3 -u -_u -4 -v -_v -5 -w -_w -7 -x -_x -5 -y -_y -4 -z -_z -4 - -_sp -2 -0 -_0 -4 -1 -_1 -2 -2 -_2 -4 -3 -_3 -4 -4 -_4 -4 -5 -_5 -4 -6 -_6 -4 -7 -_7 -4 -8 -_8 -4 -9 -_9 -4 -( -_bl -2 -) -_br -2 -{ -_cl -3 -} -_cr -3 -[ -_sl -2 -] -_sr -2 -' -_ap -1 -! -_ex -1 -? -_qu -4 -@ -_at -5 -# -_hs -5 -$ -_dl -4 -% -_pr -5 -^ -_ca -3 -& -_am -5 -* -_as -3 -_ -_un -3 -+ -_ps -3 -- -_mn -3 -= -_eq -3 -; -_sm -1 -, -_cm -2 -" -_qo -3 -/ -_dv -5 -~ -_tl -4 -< -_lt -3 -> -_gt -3 -\ -_re -5 -| -_vb -1 -. -_dt -1 -: -_co -1 -` -_gr -2 -ä -_ae -5 -ë -_ee -5 -ï -_ie -5 -ö -_oe -5 -ü -_ue -5 -Ä -_ae_ -5 -Ë -_ee_ -5 -Ï -_ie_ -5 -Ö -_oe_ -5 -Ü -_ue_ -5 -ß -_sz -5 -× -_times_cross -5 -· -_times_dot -5 -÷ -_div -5 -» -_guill_right -5 -« -_guill_left -5 -¢ -_cent -5 -¿ -_qu_inv -5 -± -_plus_minus -5 -© -_copyright -5 -® -_registered -5 -¨ -_diaresis -5 -§ -_paragraph -5 -¦ -_broken_bar -5 -¥ -_yen -5 -¤ -_currency -5 -£ -_pound -5 -µ -_mu -5 -¡ -_ex_inv -5 -¬ -_not -5 -¯ -_macron -5 -° -_degree -5 -¹ -_1_sup -5 -² -_2_sup -5 -³ -_3_sup -5 -´ -_acute -5 -¶ -_pilcrow -5 -¼ -_1_4 -5 -½ -_1_2 -5 -¾ -_3_4 -5 -À -_a_grave_ -5 -Á -_a_acute_ -5 -Â -_a_circumflex_ -5 -Ã -_a_tilde_ -5 -Å -_a_ring -5 -Æ -_ae_lig_ -5 -ª -_a_sup -5 -º -_o_sup -5 -¸ -_cedille -5 -Ç -_c_cedille_ -5 -ç -_c_cedille -5 -È -_e_grave_ -5 -É -_e_acute_ -5 -Ê -_e_circumflex_ -5 -Ì -_i_grave_ -5 -Í -_i_acute_ -5 -Î -_i_circumflex_ -5 -Ð -_d_dash_ -5 -Ñ -_n_tilde_ -5 -Ò -_o_grave_ -5 -Ó -_o_acute_ -5 -Ô -_o_circumflex_ -5 -Õ -_o_tilde_ -5 -Ø -_o_dash_ -5 -Ù -_u_grave_ -5 -Ú -_u_acute_ -5 -Û -_u_circumflex_ -5 -Ý -_y_acute_ -5 -Þ -_thorn_ -5 -à -_a_grave -5 -á -_a_acute -5 -â -_a_circumflex -5 -ã -_a_tilde -5 -å -_a_ring -5 -æ -_ae_lig -5 -è -_e_grave -5 -é -_e_acute -5 -ê -_e_circumflex -5 -ì -_i_grave -5 -í -_i_acute -5 -î -_i_circumflex -5 -ð -_d_dash -5 -ñ -_n_tilde -5 -ò -_o_grave -5 -ó -_o_acute -5 -ô -_o_circumflex -5 -õ -_o_tilde -5 -ø -_o_dash -5 -ù -_u_grave -5 -ú -_u_acute -5 -û -_u_circumflex -5 -ý -_y_acute -5 -þ -_thorn -5 -ÿ -_y_diaresis -5 diff --git a/mods/ITEMS/mcl_signs/init.lua b/mods/ITEMS/mcl_signs/init.lua deleted file mode 100644 index b6bfb3fe83..0000000000 --- a/mods/ITEMS/mcl_signs/init.lua +++ /dev/null @@ -1,580 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) -local S = minetest.get_translator(modname) -local F = minetest.formspec_escape - -local table = table - --- Load the characters map (characters.txt) ---[[ File format of characters.txt: -It's an UTF-8 encoded text file that contains metadata for all supported characters. It contains a sequence of info blocks, one for each character. Each info block is made out of 3 lines: -Line 1: The literal UTF-8 encoded character -Line 2: Name of the texture file for this character minus the “.png” suffix; found in the “textures/” sub-directory -Line 3: Currently ignored. Previously this was for the character width in pixels - -After line 3, another info block may follow. This repeats until the end of the file. - -All character files must be 5 or 6 pixels wide (5 pixels are preferred) -]] - -local chars_file = io.open(modpath.."/characters.txt", "r") --- FIXME: Support more characters (many characters are missing). Currently ASCII and Latin-1 Supplement are supported. -local charmap = {} -if not chars_file then - minetest.log("error", "[mcl_signs] : character map file not found") -else - while true do - local char = chars_file:read("*l") - if char == nil then - break - end - local img = chars_file:read("*l") - chars_file:read("*l") - charmap[char] = img - end -end - --- CONSTANTS -local SIGN_WIDTH = 115 - -local LINE_LENGTH = 15 -local NUMBER_OF_LINES = 4 - -local LINE_HEIGHT = 14 -local CHAR_WIDTH = 5 - - --- Helper functions -local function round(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult -end - -local function string_to_array(str) - local tab = {} - for i=1,string.len(str) do - table.insert(tab, string.sub(str, i,i)) - end - return tab -end - -local function string_to_line_array(str) - local tab = {} - local current = 1 - local linechar = 1 - tab[1] = "" - for _,char in ipairs(string_to_array(str)) do - -- New line - if char == "\n" then - current = current + 1 - tab[current] = "" - linechar = 1 - else - tab[current] = tab[current]..char - linechar = linechar + 1 - end - end - return tab -end - -local function create_lines(text) - local line_num = 1 - local tab = {} - for _, line in ipairs(string_to_line_array(text)) do - if line_num > NUMBER_OF_LINES then - break - end - table.insert(tab, line) - line_num = line_num + 1 - end - return tab -end - -local function generate_line(s, ypos) - local i = 1 - local parsed = {} - local width = 0 - local chars = 0 - local printed_char_width = CHAR_WIDTH + 1 - while chars < LINE_LENGTH and i <= #s do - local file - -- Get and render character - if charmap[s:sub(i, i)] then - file = charmap[s:sub(i, i)] - i = i + 1 - elseif i < #s and charmap[s:sub(i, i + 1)] then - file = charmap[s:sub(i, i + 1)] - i = i + 2 - else - -- No character image found. - -- Use replacement character: - file = "_rc" - i = i + 1 - minetest.log("verbose", "[mcl_signs] Unknown symbol in '"..s.."' at "..i) - end - if file then - width = width + printed_char_width - table.insert(parsed, file) - chars = chars + 1 - end - end - width = width - 1 - - local texture = "" - local xpos = math.floor((SIGN_WIDTH - width) / 2) - for i = 1, #parsed do - texture = texture..":"..xpos..","..ypos.."="..parsed[i]..".png" - xpos = xpos + printed_char_width - end - return texture -end - -local function generate_texture(lines, signnodename) - local texture = "[combine:"..SIGN_WIDTH.."x"..SIGN_WIDTH - local ypos - if signnodename == "mcl_signs:wall_sign" then - ypos = 30 - else - ypos = 0 - end - for i = 1, #lines do - texture = texture..generate_line(lines[i], ypos) - ypos = ypos + LINE_HEIGHT - end - return texture -end - -local n = 23/56 - 1/128 - -local signtext_info_wall = { - {delta = {x = 0, y = 0, z = n}, yaw = 0}, - {delta = {x = n, y = 0, z = 0}, yaw = math.pi / -2}, - {delta = {x = 0, y = 0, z = -n}, yaw = math.pi}, - {delta = {x = -n, y = 0, z = 0}, yaw = math.pi / 2}, -} - -local signtext_info_standing = {} - -local m = -1/16 + 1/64 - -for rot=0, 15 do - local yaw = math.pi*2 - (((math.pi*2) / 16) * rot) - local delta = vector.multiply(minetest.yaw_to_dir(yaw), m) - -- Offset because sign is a bit above node boundaries - delta.y = delta.y + 2/28 - table.insert(signtext_info_standing, { delta = delta, yaw = yaw }) -end - -local function get_rotation_level(facedir, nodename) - local rl = facedir * 4 - if nodename == "mcl_signs:standing_sign22_5" then - rl = rl + 1 - elseif nodename == "mcl_signs:standing_sign45" then - rl = rl + 2 - elseif nodename == "mcl_signs:standing_sign67_5" then - rl = rl + 3 - end - return rl -end - -local function get_wall_signtext_info(param2, nodename) - local dir = minetest.wallmounted_to_dir(param2) - if dir.x > 0 then - return 2 - elseif dir.z > 0 then - return 1 - elseif dir.x < 0 then - return 4 - else - return 3 - end -end - -local sign_groups = {handy=1,axey=1, deco_block=1, material_wood=1, attached_node=1, dig_by_piston=1, flammable=-1} - -local function destruct_sign(pos) - local objects = minetest.get_objects_inside_radius(pos, 0.5) - for _, v in ipairs(objects) do - local ent = v:get_luaentity() - if ent and ent.name == "mcl_signs:text" then - v:remove() - end - end - local players = minetest.get_connected_players() - for p=1, #players do - if vector.distance(players[p]:get_pos(), pos) <= 30 then - minetest.close_formspec(players[p]:get_player_name(), "mcl_signs:set_text_"..pos.x.."_"..pos.y.."_"..pos.z) - end - end -end - -local function update_sign(pos, fields, sender, force_remove) - local meta = minetest.get_meta(pos) - if not meta then - return - end - local text = meta:get_string("text") - if fields and (text == "" and fields.text) then - meta:set_string("text", fields.text) - text = fields.text - end - if text == nil then - text = "" - end - - local sign_info - local n = minetest.get_node(pos) - local nn = n.name - if nn == "mcl_signs:standing_sign" or nn == "mcl_signs:standing_sign22_5" or nn == "mcl_signs:standing_sign45" or nn == "mcl_signs:standing_sign67_5" then - sign_info = signtext_info_standing[get_rotation_level(n.param2, nn) + 1] - elseif nn == "mcl_signs:wall_sign" then - sign_info = signtext_info_wall[get_wall_signtext_info(n.param2)] - end - if sign_info == nil then - minetest.log("error", "[mcl_signs] Missing sign_info!") - return - end - - local objects = minetest.get_objects_inside_radius(pos, 0.5) - local text_entity - for _, v in ipairs(objects) do - local ent = v:get_luaentity() - if ent and ent.name == "mcl_signs:text" then - if force_remove then - v:remove() - else - text_entity = v - break - end - end - end - - if not text_entity then - text_entity = minetest.add_entity({ - x = pos.x + sign_info.delta.x, - y = pos.y + sign_info.delta.y, - z = pos.z + sign_info.delta.z}, "mcl_signs:text") - end - text_entity:get_luaentity()._signnodename = nn - text_entity:set_properties({textures={generate_texture(create_lines(text), nn)}}) - - text_entity:set_yaw(sign_info.yaw) -end - -local function show_formspec(player, pos) - minetest.show_formspec( - player:get_player_name(), - "mcl_signs:set_text_"..pos.x.."_"..pos.y.."_"..pos.z, - "size[6,3]textarea[0.25,0.25;6,1.5;text;"..F(S("Enter sign text:"))..";]label[0,1.5;"..F(S("Maximum line length: 15")).."\n"..F(S("Maximum lines: 4")).."]button_exit[0,2.5;6,1;submit;"..F(S("Done")).."]" - ) -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname:find("mcl_signs:set_text_") == 1 then - local x, y, z = formname:match("mcl_signs:set_text_(.-)_(.-)_(.*)") - local pos = {x=tonumber(x), y=tonumber(y), z=tonumber(z)} - if not pos or not pos.x or not pos.y or not pos.z then return end - update_sign(pos, fields, player) - end -end) - -local node_sounds -if minetest.get_modpath("mcl_sounds") then - node_sounds = mcl_sounds.node_sound_wood_defaults() -end - -minetest.register_node("mcl_signs:wall_sign", { - description = S("Sign"), - _tt_help = S("Can be written"), - _doc_items_longdesc = S("Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them."), - _doc_items_usagehelp = S("After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again."), - inventory_image = "default_sign.png", - walkable = false, - is_ground_content = false, - wield_image = "default_sign.png", - node_placement_prediction = "", - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "wallmounted", - drawtype = "mesh", - mesh = "mcl_signs_signonwallmount.obj", - selection_box = {type = "wallmounted", wall_side = {-0.5, -7/28, -0.5, -23/56, 7/28, 0.5}}, - tiles = {"mcl_signs_sign.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - groups = sign_groups, - stack_max = 16, - sounds = node_sounds, - - on_place = function(itemstack, placer, pointed_thing) - local above = pointed_thing.above - local under = pointed_thing.under - - -- Use pointed node's on_rightclick function first, if present - local node_under = minetest.get_node(under) - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then - return minetest.registered_nodes[node_under.name].on_rightclick(under, node_under, placer, itemstack) or itemstack - end - end - - local dir = vector.subtract(under, above) - - -- Only build when it's legal - local abovenodedef = minetest.registered_nodes[minetest.get_node(above).name] - if not abovenodedef or abovenodedef.buildable_to == false then - return itemstack - end - - local wdir = minetest.dir_to_wallmounted(dir) - - --local placer_pos = placer:get_pos() - - local fdir = minetest.dir_to_facedir(dir) - - local sign_info - local nodeitem = ItemStack(itemstack) - -- Ceiling - if wdir == 0 then - --how would you add sign to ceiling? - return itemstack - -- Floor - elseif wdir == 1 then - -- Standing sign - - -- Determine the sign rotation based on player's yaw - local yaw = math.pi*2 - placer:get_look_horizontal() - - -- Select one of 16 possible rotations (0-15) - local rotation_level = round((yaw / (math.pi*2)) * 16) - - if rotation_level > 15 then - rotation_level = 0 - elseif rotation_level < 0 then - rotation_level = 15 - end - - -- The actual rotation is a combination of predefined mesh and facedir (see node definition) - if rotation_level % 4 == 0 then - nodeitem:set_name("mcl_signs:standing_sign") - elseif rotation_level % 4 == 1 then - nodeitem:set_name("mcl_signs:standing_sign22_5") - elseif rotation_level % 4 == 2 then - nodeitem:set_name("mcl_signs:standing_sign45") - elseif rotation_level % 4 == 3 then - nodeitem:set_name("mcl_signs:standing_sign67_5") - end - fdir = math.floor(rotation_level / 4) - - -- Place the node! - local _, success = minetest.item_place_node(nodeitem, placer, pointed_thing, fdir) - if not success then - return itemstack - end - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - sign_info = signtext_info_standing[rotation_level + 1] - -- Side - else - -- Wall sign - local _, success = minetest.item_place_node(itemstack, placer, pointed_thing, wdir) - if not success then - return itemstack - end - sign_info = signtext_info_wall[fdir + 1] - end - - -- Determine spawn position of entity - local place_pos - if minetest.registered_nodes[node_under.name].buildable_to then - place_pos = under - else - place_pos = above - end - - local text_entity = minetest.add_entity({ - x = place_pos.x + sign_info.delta.x, - y = place_pos.y + sign_info.delta.y, - z = place_pos.z + sign_info.delta.z}, "mcl_signs:text") - text_entity:set_yaw(sign_info.yaw) - text_entity:get_luaentity()._signnodename = nodeitem:get_name() - - minetest.sound_play({name="default_place_node_hard", gain=1.0}, {pos = place_pos}, true) - - show_formspec(placer, place_pos) - return itemstack - end, - on_destruct = destruct_sign, - on_punch = function(pos, node, puncher) - update_sign(pos) - end, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - local r = screwdriver.rotate.wallmounted(pos, node, mode) - node.param2 = r - minetest.swap_node(pos, node) - update_sign(pos, nil, nil, true) - return true - else - return false - end - end, - _mcl_hardness = 1, - _mcl_blast_resistance = 1, -}) - --- Standing sign nodes. --- 4 rotations at 0°, 22.5°, 45° and 67.5°. --- These are 4 out of 16 possible rotations. --- With facedir the remaining 12 rotations are constructed. - --- 0° -local ssign = { - paramtype = "light", - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - paramtype2 = "facedir", - drawtype = "mesh", - mesh = "mcl_signs_sign.obj", - selection_box = {type = "fixed", fixed = {-0.2, -0.5, -0.2, 0.2, 0.5, 0.2}}, - tiles = {"mcl_signs_sign.png"}, - groups = sign_groups, - drop = "mcl_signs:wall_sign", - stack_max = 16, - sounds = node_sounds, - - on_destruct = destruct_sign, - on_punch = function(pos, node, puncher) - update_sign(pos) - end, - on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - node.name = "mcl_signs:standing_sign22_5" - minetest.swap_node(pos, node) - elseif mode == screwdriver.ROTATE_AXIS then - return false - end - update_sign(pos, nil, nil, true) - return true - end, - - _mcl_hardness = 1, - _mcl_blast_resistance = 1, -} - -minetest.register_node("mcl_signs:standing_sign", ssign) - --- 22.5° -local ssign22_5 = table.copy(ssign) -ssign22_5.mesh = "mcl_signs_sign22.5.obj" -ssign22_5.on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - node.name = "mcl_signs:standing_sign45" - minetest.swap_node(pos, node) - elseif mode == screwdriver.ROTATE_AXIS then - return false - end - update_sign(pos, nil, nil, true) - return true -end -minetest.register_node("mcl_signs:standing_sign22_5", ssign22_5) - --- 45° -local ssign45 = table.copy(ssign) -ssign45.mesh = "mcl_signs_sign45.obj" -ssign45.on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - node.name = "mcl_signs:standing_sign67_5" - minetest.swap_node(pos, node) - elseif mode == screwdriver.ROTATE_AXIS then - return false - end - update_sign(pos, nil, nil, true) - return true -end -minetest.register_node("mcl_signs:standing_sign45", ssign45) - --- 67.5° -local ssign67_5 = table.copy(ssign) -ssign67_5.mesh = "mcl_signs_sign67.5.obj" -ssign67_5.on_rotate = function(pos, node, user, mode) - if mode == screwdriver.ROTATE_FACE then - node.name = "mcl_signs:standing_sign" - node.param2 = (node.param2 + 1) % 4 - minetest.swap_node(pos, node) - elseif mode == screwdriver.ROTATE_AXIS then - return false - end - update_sign(pos, nil, nil, true) - return true -end -minetest.register_node("mcl_signs:standing_sign67_5", ssign67_5) - --- FIXME: Prevent entity destruction by /clearobjects -minetest.register_entity("mcl_signs:text", { - pointable = false, - visual = "upright_sprite", - textures = {}, - physical = false, - collide_with_objects = false, - - _signnodename = nil, -- node name of sign node to which the text belongs - - on_activate = function(self, staticdata) - if staticdata and staticdata ~= "" then - local des = minetest.deserialize(staticdata) - if des then - self._signnodename = des._signnodename - end - end - local meta = minetest.get_meta(self.object:get_pos()) - local text = meta:get_string("text") - self.object:set_properties({ - textures={generate_texture(create_lines(text), self._signnodename)}, - }) - self.object:set_armor_groups({ immortal = 1 }) - end, - get_staticdata = function(self) - local out = { _signnodename = self._signnodename } - return minetest.serialize(out) - end, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_signs:wall_sign", - burntime = 10, -}) - -if minetest.get_modpath("mcl_core") then - minetest.register_craft({ - output = "mcl_signs:wall_sign 3", - recipe = { - {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "group:wood", "group:wood"}, - {"", "mcl_core:stick", ""}, - } - }) -end - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_signs:wall_sign", "nodes", "mcl_signs:standing_sign") - doc.add_entry_alias("nodes", "mcl_signs:wall_sign", "nodes", "mcl_signs:standing_sign22_5") - doc.add_entry_alias("nodes", "mcl_signs:wall_sign", "nodes", "mcl_signs:standing_sign45") - doc.add_entry_alias("nodes", "mcl_signs:wall_sign", "nodes", "mcl_signs:standing_sign67_5") -end - -minetest.register_alias("signs:sign_wall", "mcl_signs:wall_sign") -minetest.register_alias("signs:sign_yard", "mcl_signs:standing_sign") - -minetest.register_lbm({ - name = "mcl_signs:respawn_entities", - label = "Respawn sign text entities", - run_at_every_load = true, - nodenames = { "mcl_signs:wall_sign", "mcl_signs:standing_sign", "mcl_signs:standing_sign22_5", "mcl_signs:standing_sign45", "mcl_signs:standing_sign67_5" }, - action = function(pos, node) - update_sign(pos) - end, -}) diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.de.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.de.tr deleted file mode 100644 index a7513659b4..0000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.de.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign=Schild -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=Schilder können beschrieben werden und kommen in zwei Varianten: Wandschild und stehendes Schild. Sie können auf und an den Seiten von anderen Blöclen platziert werden, aber nicht unter ihnen. -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=Nachdem das Schild platziert wurde, kann man etwas darauf schreiben. 4 Zeilen mit je 15 Zeichen pro Zeile sind verfügbar, alles darüber geht verloren. Es werden nicht alle Zeichen unterstützt. Der Text kann nicht geändert werden, sobald er geschrieben wurde; man muss das Schild erneut platzieren. -Enter sign text:=Schildtext eingeben: -Maximum line length: 15=Maximale Zeilenlänge: 15 -Maximum lines: 4=Maximale Zeilen: 4 -Done=Fertig -Can be written=Kann beschriftet werden diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.es.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.es.tr deleted file mode 100644 index d67e2da0dc..0000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_signs -Sign=Firmar -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=Los letreros se pueden escribir y vienen en dos variantes: letrero de muro y letrero en un poste de letrero. Los letreros se pueden colocar en la parte superior y en los costados de otros bloques, pero no debajo de ellos. -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=Después de colocar el letrero, puede escribir algo en él. Tiene 4 líneas de texto con hasta 15 caracteres para cada línea; todo lo que esté más allá de estos límites se pierde. No todos los personajes son compatibles. El texto no se puede cambiar una vez que se ha escrito; tienes que romper y colocar el letrero nuevamente. -Enter sign text:=Inserte el texto del letrero: -Maximum line length: 15=Longitud máxima de línea: 15 -Maximum lines: 4=Líneas máximas: 4 -Done=Escribir cartel diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.fr.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.fr.tr deleted file mode 100644 index 158640dae7..0000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.fr.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign=Panneau -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=Les panneaux peuvent être écrits et se déclinent en deux variantes: panneau mural et panneau sur poteau. Des panneaux peuvent être placés en haut et sur les côtés des autres blocs, mais pas en dessous. -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=Après avoir placé le panneau, vous pouvez écrire quelque chose dessus. Vous avez 4 lignes de texte avec jusqu'à 15 caractères pour chaque ligne; tout ce qui dépasse ces limites est perdu. Tous les caractères ne sont pas pris en charge. Le texte ne peut pas être modifié une fois qu'il a été écrit; vous devez casser et placer à nouveau le panneau. -Enter sign text:=Saisir le texte du panneau: -Maximum line length: 15=Longueur maximum des lignes: 15 -Maximum lines: 4=Nombre maximum de lignes: 4 -Done=Terminé -Can be written=Peut être écrit diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr deleted file mode 100644 index bf3bbf3c87..0000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign=Znak -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=Na znakach można pisać i postawić je w dwóch wariantach: znak ścienny i znak na patyku. Znaki mogą być stawiane na górze i na bokach bloków, ale nie pod nimi. -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=Po postawieniu znaku możesz coś na nim napisać. Masz miejsce na cztery linie tekstu po 15 znaków każda; cokolwiek poza limitami będzie utracone. Nie wszystkie znaki są wspierane. Tekstu nie można zmienić po napisaniu; musisz zniszczyć znak i postawić go ponownie. -Enter sign text:=Wpisz tekst znaku: -Maximum line length: 15=Maksymalna długość linii: 15 -Maximum lines: 4=Maksymalna liczba linii: 4 -Done=Skończone -Can be written=Można na nim coś napisać diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.ru.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.ru.tr deleted file mode 100644 index 354e556a86..0000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.ru.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign=Табличка -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=На табличках можно писать. Таблички бывают двух видов: настенные и отдельно стоящие. Таблички можно размещать на верхушках и сторонах блоков, но не под блоками. -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=После установки таблички вы можете написать на ней что-то. Вам доступны 4 строки текста, до 15 символов в каждой; всё, что вы напишете сверх лимита, потеряется. Поддерживаются не все символы. Текст нельзя изменить. Чтобы изменить его, вам придётся сломать табличку и подписать её снова. -Enter sign text:=Текст на табличке: -Maximum line length: 15=Максимальная длина строки: 15 -Maximum lines: 4=Максимум строк: 4 -Done=Готово -Can be written=Может быть подписана diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.zh_TW.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.zh_TW.tr deleted file mode 100644 index 62994bc3de..0000000000 --- a/mods/ITEMS/mcl_signs/locale/mcl_signs.zh_TW.tr +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign=告示牌 -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=告示牌可以寫字,有兩種變體:牆上的告示牌和柱上的告示牌。告示牌可以放在其他方塊的頂部和側面,但不能放在下面。 -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=放置告示牌後,你可以在上面寫東西。你最多可以寫4行文字,每行最多可以寫15個字符;超過這些限制的文字就會丟失。不是所有的字符都被支持。文字一旦寫完就不能更改;你必須打破並重新放置標誌。 -Enter sign text:=輸入告示牌文字: -Maximum line length: 15=每行最多可以寫15個字符 -Maximum lines: 4=最多可以寫4行文字 -Done=確認 -Can be written=可以寫字 diff --git a/mods/ITEMS/mcl_signs/locale/template.txt b/mods/ITEMS/mcl_signs/locale/template.txt deleted file mode 100644 index 6635e989f5..0000000000 --- a/mods/ITEMS/mcl_signs/locale/template.txt +++ /dev/null @@ -1,9 +0,0 @@ -# textdomain: mcl_signs -Sign= -Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.= -After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.= -Enter sign text:= -Maximum line length: 15= -Maximum lines: 4= -Done= -Can be written= diff --git a/mods/ITEMS/mcl_signs/mod.conf b/mods/ITEMS/mcl_signs/mod.conf deleted file mode 100644 index 1af689d7b0..0000000000 --- a/mods/ITEMS/mcl_signs/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = mcl_signs -optional_depends = mcl_sounds, mcl_core, doc diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_sign.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_sign.obj deleted file mode 100644 index 00d0d415c6..0000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_sign.obj +++ /dev/null @@ -1,66 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'sign.blend' -# www.blender.org -mtllib sign.mtl -o wood_Cube.001 -v 0.499985 0.082879 -0.041665 -v 0.499985 0.582864 -0.041665 -v 0.499985 0.082879 0.041666 -v 0.499985 0.582864 0.041666 -v -0.499985 0.082879 -0.041666 -v -0.499985 0.582864 -0.041666 -v -0.499985 0.082879 0.041665 -v -0.499985 0.582864 0.041665 -v 0.041665 -0.500001 -0.041665 -v 0.041665 0.083315 -0.041665 -v 0.041665 -0.500001 0.041665 -v 0.041665 0.083315 0.041665 -v -0.041665 -0.500001 -0.041665 -v -0.041665 0.083315 -0.041665 -v -0.041665 -0.500001 0.041665 -v -0.041665 0.083315 0.041665 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vt 0.031250 0.062500 -vt 0.031250 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.062500 -vt 0.125000 0.062500 -vt 0.125000 0.500000 -vt 0.093750 0.500000 -vt 0.093750 0.062500 -vt 0.062500 0.500000 -vt 0.062500 0.062500 -vt 0.093750 0.562500 -vt 0.062500 0.562500 -vn 1.000000 0.000000 0.000000 -vn -0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 -f 9/15/1 10/16/1 12/17/1 11/18/1 -f 11/19/2 12/20/2 16/21/2 15/22/2 -f 15/22/3 16/21/3 14/23/3 13/24/3 -f 13/24/4 14/23/4 10/16/4 9/15/4 -f 11/23/5 15/21/5 13/25/5 9/26/5 -f 16/16/6 12/23/6 10/26/6 14/1/6 diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_sign22.5.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_sign22.5.obj deleted file mode 100644 index 7d38aa872c..0000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_sign22.5.obj +++ /dev/null @@ -1,66 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'sign 22.5.blend' -# www.blender.org -mtllib sign 22.5.mtl -o wood_Cube.001 -v 0.477871 0.082879 0.152842 -v 0.477871 0.582864 0.152842 -v 0.445982 0.082879 0.229830 -v 0.445982 0.582864 0.229830 -v -0.445982 0.082879 -0.229830 -v -0.445982 0.582864 -0.229830 -v -0.477871 0.082879 -0.152842 -v -0.477871 0.582864 -0.152842 -v 0.054439 -0.500001 -0.022549 -v 0.054439 0.083315 -0.022549 -v 0.022549 -0.500001 0.054439 -v 0.022549 0.083315 0.054439 -v -0.022549 -0.500001 -0.054439 -v -0.022549 0.083315 -0.054439 -v -0.054439 -0.500001 0.022549 -v -0.054439 0.083315 0.022549 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vt 0.031250 0.062500 -vt 0.031250 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.062500 -vt 0.125000 0.062500 -vt 0.125000 0.500000 -vt 0.093750 0.500000 -vt 0.093750 0.062500 -vt 0.062500 0.500000 -vt 0.062500 0.062500 -vt 0.093750 0.562500 -vt 0.062500 0.562500 -vn 0.923900 0.000000 0.382700 -vn -0.382700 0.000000 0.923900 -vn -0.923900 0.000000 -0.382700 -vn 0.382700 0.000000 -0.923900 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 -f 9/15/1 10/16/1 12/17/1 11/18/1 -f 11/19/2 12/20/2 16/21/2 15/22/2 -f 15/22/3 16/21/3 14/23/3 13/24/3 -f 13/24/4 14/23/4 10/16/4 9/15/4 -f 11/23/5 15/21/5 13/25/5 9/26/5 -f 16/16/6 12/23/6 10/26/6 14/1/6 diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_sign45.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_sign45.obj deleted file mode 100644 index 4ab4ffa965..0000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_sign45.obj +++ /dev/null @@ -1,66 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'mcl_signs_sign45.blend' -# www.blender.org -mtllib mcl_signs_sign45.mtl -o wood_Cube.001 -v 0.383005 0.082879 0.324081 -v 0.383005 0.582864 0.324081 -v 0.324081 0.082879 0.383005 -v 0.324081 0.582864 0.383005 -v -0.324081 0.082879 -0.383005 -v -0.324081 0.582864 -0.383005 -v -0.383005 0.082879 -0.324081 -v -0.383005 0.582864 -0.324081 -v 0.058924 -0.500001 0.000000 -v 0.058924 0.083315 0.000000 -v -0.000000 -0.500001 0.058924 -v -0.000000 0.083315 0.058924 -v 0.000000 -0.500001 -0.058924 -v 0.000000 0.083315 -0.058924 -v -0.058924 -0.500001 -0.000000 -v -0.058924 0.083315 -0.000000 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vt 0.031250 0.062500 -vt 0.031250 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.062500 -vt 0.125000 0.062500 -vt 0.125000 0.500000 -vt 0.093750 0.500000 -vt 0.093750 0.062500 -vt 0.062500 0.500000 -vt 0.062500 0.062500 -vt 0.093750 0.562500 -vt 0.062500 0.562500 -vn 0.707100 0.000000 0.707100 -vn -0.707100 0.000000 0.707100 -vn -0.707100 0.000000 -0.707100 -vn 0.707100 0.000000 -0.707100 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 -f 9/15/1 10/16/1 12/17/1 11/18/1 -f 11/19/2 12/20/2 16/21/2 15/22/2 -f 15/22/3 16/21/3 14/23/3 13/24/3 -f 13/24/4 14/23/4 10/16/4 9/15/4 -f 11/23/5 15/21/5 13/25/5 9/26/5 -f 16/16/6 12/23/6 10/26/6 14/1/6 diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_sign67.5.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_sign67.5.obj deleted file mode 100644 index 314a485392..0000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_sign67.5.obj +++ /dev/null @@ -1,66 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'mcl_signs_sign67.5.blend' -# www.blender.org -mtllib mcl_signs_sign67.5.mtl -o wood_Cube.001 -v 0.229830 0.082879 0.445982 -v 0.229830 0.582864 0.445982 -v 0.152842 0.082879 0.477871 -v 0.152842 0.582864 0.477871 -v -0.152842 0.082879 -0.477871 -v -0.152842 0.582864 -0.477871 -v -0.229830 0.082879 -0.445982 -v -0.229830 0.582864 -0.445982 -v 0.054439 -0.500001 0.022549 -v 0.054439 0.083315 0.022549 -v -0.022549 -0.500001 0.054439 -v -0.022549 0.083315 0.054439 -v 0.022549 -0.500001 -0.054439 -v 0.022549 0.083315 -0.054439 -v -0.054439 -0.500001 -0.022549 -v -0.054439 0.083315 -0.022549 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vt 0.031250 0.062500 -vt 0.031250 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.062500 -vt 0.125000 0.062500 -vt 0.125000 0.500000 -vt 0.093750 0.500000 -vt 0.093750 0.062500 -vt 0.062500 0.500000 -vt 0.062500 0.062500 -vt 0.093750 0.562500 -vt 0.062500 0.562500 -vn 0.382700 0.000000 0.923900 -vn -0.923900 0.000000 0.382700 -vn -0.382700 0.000000 -0.923900 -vn 0.923900 0.000000 -0.382700 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 -f 9/15/1 10/16/1 12/17/1 11/18/1 -f 11/19/2 12/20/2 16/21/2 15/22/2 -f 15/22/3 16/21/3 14/23/3 13/24/3 -f 13/24/4 14/23/4 10/16/4 9/15/4 -f 11/23/5 15/21/5 13/25/5 9/26/5 -f 16/16/6 12/23/6 10/26/6 14/1/6 diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_signonwall.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_signonwall.obj deleted file mode 100644 index 39567095a2..0000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_signonwall.obj +++ /dev/null @@ -1,40 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'mcl_signs_signonwall.blend' -# www.blender.org -mtllib mcl_signs_signonwall.mtl -o wood_Cube.001 -v 0.499985 -0.249993 0.416671 -v 0.499985 0.249993 0.416671 -v 0.499985 -0.249993 0.500002 -v 0.499985 0.249993 0.500002 -v -0.499985 -0.249993 0.416671 -v -0.499985 0.249993 0.416671 -v -0.499985 -0.249993 0.500002 -v -0.499985 0.249993 0.500002 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 0.000000 1.000000 -vn -1.000000 0.000000 0.000000 -vn -0.000000 0.000000 -1.000000 -vn 0.000000 -1.000000 0.000000 -vn 0.000000 1.000000 0.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 diff --git a/mods/ITEMS/mcl_signs/models/mcl_signs_signonwallmount.obj b/mods/ITEMS/mcl_signs/models/mcl_signs_signonwallmount.obj deleted file mode 100644 index 098cdb965a..0000000000 --- a/mods/ITEMS/mcl_signs/models/mcl_signs_signonwallmount.obj +++ /dev/null @@ -1,40 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'signonwallmount.blend' -# www.blender.org -mtllib signonwallmount.mtl -o wood_Cube.001 -v 0.499985 -0.416668 -0.249992 -v 0.499985 -0.416668 0.249993 -v 0.499985 -0.499999 -0.249992 -v 0.499985 -0.499999 0.249993 -v -0.499985 -0.416668 -0.249993 -v -0.499985 -0.416668 0.249992 -v -0.499985 -0.499999 -0.249993 -v -0.499985 -0.499999 0.249992 -vt 0.031250 0.562500 -vt 0.031250 0.937500 -vt 0.000000 0.937500 -vt 0.000000 0.562500 -vt 0.812500 0.562500 -vt 0.812500 0.937500 -vt 0.437500 0.937500 -vt 0.437500 0.562500 -vt 0.406250 0.937500 -vt 0.406250 0.562500 -vt 0.406250 1.000000 -vt 0.781250 1.000000 -vt 0.781250 0.937500 -vt 0.031250 1.000000 -vn 1.000000 0.000000 0.000000 -vn 0.000000 -1.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.000000 1.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn -0.000000 -0.000000 1.000000 -usemtl None -s off -f 1/1/1 2/2/1 4/3/1 3/4/1 -f 3/5/2 4/6/2 8/7/2 7/8/2 -f 7/8/3 8/7/3 6/9/3 5/10/3 -f 5/10/4 6/9/4 2/2/4 1/1/4 -f 3/11/5 7/12/5 5/13/5 1/9/5 -f 8/11/6 4/14/6 2/2/6 6/9/6 diff --git a/mods/ITEMS/mcl_signs/textures/_0.png b/mods/ITEMS/mcl_signs/textures/_0.png deleted file mode 100644 index e764f3d6a0..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_0.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_1.png b/mods/ITEMS/mcl_signs/textures/_1.png deleted file mode 100644 index 7fae5fa4ce..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_1.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_1_2.png b/mods/ITEMS/mcl_signs/textures/_1_2.png deleted file mode 100644 index 52d025e874..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_1_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_1_4.png b/mods/ITEMS/mcl_signs/textures/_1_4.png deleted file mode 100644 index 220e65ef5d..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_1_4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_1_sup.png b/mods/ITEMS/mcl_signs/textures/_1_sup.png deleted file mode 100644 index 6be5fdcb1c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_1_sup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_2.png b/mods/ITEMS/mcl_signs/textures/_2.png deleted file mode 100644 index e32866d035..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_2.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_2_sup.png b/mods/ITEMS/mcl_signs/textures/_2_sup.png deleted file mode 100644 index 3db952179c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_2_sup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_3.png b/mods/ITEMS/mcl_signs/textures/_3.png deleted file mode 100644 index 4e7da56653..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_3.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_3_4.png b/mods/ITEMS/mcl_signs/textures/_3_4.png deleted file mode 100644 index 46e1710499..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_3_4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_3_sup.png b/mods/ITEMS/mcl_signs/textures/_3_sup.png deleted file mode 100644 index add337326d..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_3_sup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_4.png b/mods/ITEMS/mcl_signs/textures/_4.png deleted file mode 100644 index 5f3d956566..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_4.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_5.png b/mods/ITEMS/mcl_signs/textures/_5.png deleted file mode 100644 index baf23b273e..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_5.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_6.png b/mods/ITEMS/mcl_signs/textures/_6.png deleted file mode 100644 index 31fcd7d727..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_6.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_7.png b/mods/ITEMS/mcl_signs/textures/_7.png deleted file mode 100644 index 7594eb9d6e..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_7.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_8.png b/mods/ITEMS/mcl_signs/textures/_8.png deleted file mode 100644 index b61f4e294c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_8.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_9.png b/mods/ITEMS/mcl_signs/textures/_9.png deleted file mode 100644 index 5ed82070bd..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_9.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a.png b/mods/ITEMS/mcl_signs/textures/_a.png deleted file mode 100644 index 4b9356ac4c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_.png b/mods/ITEMS/mcl_signs/textures/_a_.png deleted file mode 100644 index 152beabd44..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_acute.png b/mods/ITEMS/mcl_signs/textures/_a_acute.png deleted file mode 100644 index b72b4853e2..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_acute_.png b/mods/ITEMS/mcl_signs/textures/_a_acute_.png deleted file mode 100644 index d038b45ce7..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_circumflex.png b/mods/ITEMS/mcl_signs/textures/_a_circumflex.png deleted file mode 100644 index f9b80df66d..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_circumflex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_circumflex_.png b/mods/ITEMS/mcl_signs/textures/_a_circumflex_.png deleted file mode 100644 index 8b35bdf7c8..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_circumflex_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_grave.png b/mods/ITEMS/mcl_signs/textures/_a_grave.png deleted file mode 100644 index 3f0de45a5b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_grave.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_grave_.png b/mods/ITEMS/mcl_signs/textures/_a_grave_.png deleted file mode 100644 index 8176f51c52..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_grave_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_ring.png b/mods/ITEMS/mcl_signs/textures/_a_ring.png deleted file mode 100644 index d3c06ae6d1..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_ring.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_ring_.png b/mods/ITEMS/mcl_signs/textures/_a_ring_.png deleted file mode 100644 index d3e9b7e964..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_ring_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_sup.png b/mods/ITEMS/mcl_signs/textures/_a_sup.png deleted file mode 100644 index 4f4f9801cf..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_sup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_tilde.png b/mods/ITEMS/mcl_signs/textures/_a_tilde.png deleted file mode 100644 index 567632c377..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_tilde.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_a_tilde_.png b/mods/ITEMS/mcl_signs/textures/_a_tilde_.png deleted file mode 100644 index fd3d97784b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_a_tilde_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_acute.png b/mods/ITEMS/mcl_signs/textures/_acute.png deleted file mode 100644 index 0655de2dd5..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ae.png b/mods/ITEMS/mcl_signs/textures/_ae.png deleted file mode 100644 index 7f199e4775..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ae.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ae_.png b/mods/ITEMS/mcl_signs/textures/_ae_.png deleted file mode 100644 index e19fdf1c85..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ae_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ae_lig.png b/mods/ITEMS/mcl_signs/textures/_ae_lig.png deleted file mode 100644 index a02bd30cf5..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ae_lig.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ae_lig_.png b/mods/ITEMS/mcl_signs/textures/_ae_lig_.png deleted file mode 100644 index 0eb5d2f5c9..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ae_lig_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_am.png b/mods/ITEMS/mcl_signs/textures/_am.png deleted file mode 100644 index 76a886757c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_am.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ap.png b/mods/ITEMS/mcl_signs/textures/_ap.png deleted file mode 100644 index bced380ac3..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ap.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_as.png b/mods/ITEMS/mcl_signs/textures/_as.png deleted file mode 100644 index 702a519b85..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_as.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_at.png b/mods/ITEMS/mcl_signs/textures/_at.png deleted file mode 100644 index 1c7fa502c2..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_at.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_b.png b/mods/ITEMS/mcl_signs/textures/_b.png deleted file mode 100644 index 427f488e51..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_b.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_b_.png b/mods/ITEMS/mcl_signs/textures/_b_.png deleted file mode 100644 index c89961d1b7..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_b_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_bl.png b/mods/ITEMS/mcl_signs/textures/_bl.png deleted file mode 100644 index 422fcc586b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_bl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_br.png b/mods/ITEMS/mcl_signs/textures/_br.png deleted file mode 100644 index 88b1ba4a36..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_br.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_broken_bar.png b/mods/ITEMS/mcl_signs/textures/_broken_bar.png deleted file mode 100644 index c733fd862b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_broken_bar.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_c.png b/mods/ITEMS/mcl_signs/textures/_c.png deleted file mode 100644 index 0ae311f3db..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_c.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_c_.png b/mods/ITEMS/mcl_signs/textures/_c_.png deleted file mode 100644 index 1352609136..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_c_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_c_cedille.png b/mods/ITEMS/mcl_signs/textures/_c_cedille.png deleted file mode 100644 index 9d5a4b5647..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_c_cedille.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_c_cedille_.png b/mods/ITEMS/mcl_signs/textures/_c_cedille_.png deleted file mode 100644 index 7eb654bc43..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_c_cedille_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ca.png b/mods/ITEMS/mcl_signs/textures/_ca.png deleted file mode 100644 index 79fa4345fb..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ca.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_cedille.png b/mods/ITEMS/mcl_signs/textures/_cedille.png deleted file mode 100644 index 0de32ed0c9..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_cedille.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_cent.png b/mods/ITEMS/mcl_signs/textures/_cent.png deleted file mode 100644 index ecdb1f1d14..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_cent.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_cl.png b/mods/ITEMS/mcl_signs/textures/_cl.png deleted file mode 100644 index 38cad796c8..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_cl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_cm.png b/mods/ITEMS/mcl_signs/textures/_cm.png deleted file mode 100644 index 6b2b10a17e..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_cm.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_co.png b/mods/ITEMS/mcl_signs/textures/_co.png deleted file mode 100644 index 6775d5eaf0..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_co.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_copyright.png b/mods/ITEMS/mcl_signs/textures/_copyright.png deleted file mode 100644 index 7cfdf217ea..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_copyright.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_cr.png b/mods/ITEMS/mcl_signs/textures/_cr.png deleted file mode 100644 index cd6d6dac69..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_cr.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_currency.png b/mods/ITEMS/mcl_signs/textures/_currency.png deleted file mode 100644 index 1264c89455..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_currency.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_d.png b/mods/ITEMS/mcl_signs/textures/_d.png deleted file mode 100644 index d7988e2bee..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_d.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_d_.png b/mods/ITEMS/mcl_signs/textures/_d_.png deleted file mode 100644 index 8803ea0368..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_d_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_d_dash.png b/mods/ITEMS/mcl_signs/textures/_d_dash.png deleted file mode 100644 index 73f5a1246c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_d_dash.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_d_dash_.png b/mods/ITEMS/mcl_signs/textures/_d_dash_.png deleted file mode 100644 index e9c9e69c70..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_d_dash_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_degree.png b/mods/ITEMS/mcl_signs/textures/_degree.png deleted file mode 100644 index 64a7ee2b13..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_degree.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_diaresis.png b/mods/ITEMS/mcl_signs/textures/_diaresis.png deleted file mode 100644 index f8b75d38d0..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_diaresis.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_div.png b/mods/ITEMS/mcl_signs/textures/_div.png deleted file mode 100644 index 8083437539..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_div.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_dl.png b/mods/ITEMS/mcl_signs/textures/_dl.png deleted file mode 100644 index 044e4f00b9..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_dl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_dt.png b/mods/ITEMS/mcl_signs/textures/_dt.png deleted file mode 100644 index 5dfa75349e..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_dt.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_dv.png b/mods/ITEMS/mcl_signs/textures/_dv.png deleted file mode 100644 index 2989d93db1..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_dv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e.png b/mods/ITEMS/mcl_signs/textures/_e.png deleted file mode 100644 index 316e966a1c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_.png b/mods/ITEMS/mcl_signs/textures/_e_.png deleted file mode 100644 index 5ef88d2827..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_acute.png b/mods/ITEMS/mcl_signs/textures/_e_acute.png deleted file mode 100644 index 911207f866..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_acute_.png b/mods/ITEMS/mcl_signs/textures/_e_acute_.png deleted file mode 100644 index b601937402..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_circumflex.png b/mods/ITEMS/mcl_signs/textures/_e_circumflex.png deleted file mode 100644 index 2b5ace3c42..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_circumflex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_circumflex_.png b/mods/ITEMS/mcl_signs/textures/_e_circumflex_.png deleted file mode 100644 index c17d9dc29c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_circumflex_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_grave.png b/mods/ITEMS/mcl_signs/textures/_e_grave.png deleted file mode 100644 index c24ab46356..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_grave.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_e_grave_.png b/mods/ITEMS/mcl_signs/textures/_e_grave_.png deleted file mode 100644 index c71bb2ef65..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_e_grave_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ee.png b/mods/ITEMS/mcl_signs/textures/_ee.png deleted file mode 100644 index 646c19e141..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ee.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ee_.png b/mods/ITEMS/mcl_signs/textures/_ee_.png deleted file mode 100644 index 5db7bc66ae..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ee_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_eq.png b/mods/ITEMS/mcl_signs/textures/_eq.png deleted file mode 100644 index 166f7a30d5..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_eq.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ex.png b/mods/ITEMS/mcl_signs/textures/_ex.png deleted file mode 100644 index 65a76aad19..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ex_inv.png b/mods/ITEMS/mcl_signs/textures/_ex_inv.png deleted file mode 100644 index 1e7bbfe87e..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ex_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_f.png b/mods/ITEMS/mcl_signs/textures/_f.png deleted file mode 100644 index 1e431df13b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_f.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_f_.png b/mods/ITEMS/mcl_signs/textures/_f_.png deleted file mode 100644 index d0dec2b358..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_f_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_g.png b/mods/ITEMS/mcl_signs/textures/_g.png deleted file mode 100644 index 0b39fc95eb..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_g.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_g_.png b/mods/ITEMS/mcl_signs/textures/_g_.png deleted file mode 100644 index bfe0546382..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_g_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_gr.png b/mods/ITEMS/mcl_signs/textures/_gr.png deleted file mode 100644 index 3f806499ab..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_gr.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_gt.png b/mods/ITEMS/mcl_signs/textures/_gt.png deleted file mode 100644 index 0449b44dea..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_gt.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_guill_left.png b/mods/ITEMS/mcl_signs/textures/_guill_left.png deleted file mode 100644 index 32b90c3e21..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_guill_left.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_guill_right.png b/mods/ITEMS/mcl_signs/textures/_guill_right.png deleted file mode 100644 index d372e6a855..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_guill_right.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_h.png b/mods/ITEMS/mcl_signs/textures/_h.png deleted file mode 100644 index bd6f1891c0..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_h.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_h_.png b/mods/ITEMS/mcl_signs/textures/_h_.png deleted file mode 100644 index 08cb5d8b03..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_h_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ha.png b/mods/ITEMS/mcl_signs/textures/_ha.png deleted file mode 100644 index 946ae4e5ec..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ha.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_hs.png b/mods/ITEMS/mcl_signs/textures/_hs.png deleted file mode 100644 index 682a92a2d2..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_hs.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i.png b/mods/ITEMS/mcl_signs/textures/_i.png deleted file mode 100644 index 9ba3e01a32..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_.png b/mods/ITEMS/mcl_signs/textures/_i_.png deleted file mode 100644 index ffe090aa8e..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_acute.png b/mods/ITEMS/mcl_signs/textures/_i_acute.png deleted file mode 100644 index 20bdafb629..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_acute_.png b/mods/ITEMS/mcl_signs/textures/_i_acute_.png deleted file mode 100644 index 4cdc943d9c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_circumflex.png b/mods/ITEMS/mcl_signs/textures/_i_circumflex.png deleted file mode 100644 index f0e7127251..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_circumflex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_circumflex_.png b/mods/ITEMS/mcl_signs/textures/_i_circumflex_.png deleted file mode 100644 index dc46f3ff55..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_circumflex_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_grave.png b/mods/ITEMS/mcl_signs/textures/_i_grave.png deleted file mode 100644 index 7254cd7d22..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_grave.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_i_grave_.png b/mods/ITEMS/mcl_signs/textures/_i_grave_.png deleted file mode 100644 index 1e22126791..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_i_grave_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_j.png b/mods/ITEMS/mcl_signs/textures/_j.png deleted file mode 100644 index 7fec502159..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_j.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_j_.png b/mods/ITEMS/mcl_signs/textures/_j_.png deleted file mode 100644 index 440af26d5c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_j_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_k.png b/mods/ITEMS/mcl_signs/textures/_k.png deleted file mode 100644 index af07f4bf3b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_k.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_k_.png b/mods/ITEMS/mcl_signs/textures/_k_.png deleted file mode 100644 index 5e0a6b9958..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_k_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_l.png b/mods/ITEMS/mcl_signs/textures/_l.png deleted file mode 100644 index d28a863f32..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_l.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_l_.png b/mods/ITEMS/mcl_signs/textures/_l_.png deleted file mode 100644 index c403901943..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_l_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_lt.png b/mods/ITEMS/mcl_signs/textures/_lt.png deleted file mode 100644 index 54295121ea..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_lt.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_m.png b/mods/ITEMS/mcl_signs/textures/_m.png deleted file mode 100644 index e4110bbb03..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_m.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_m_.png b/mods/ITEMS/mcl_signs/textures/_m_.png deleted file mode 100644 index ac516a053c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_m_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_macron.png b/mods/ITEMS/mcl_signs/textures/_macron.png deleted file mode 100644 index ffb9dfd77c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_macron.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_mn.png b/mods/ITEMS/mcl_signs/textures/_mn.png deleted file mode 100644 index 2230e10653..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_mn.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_mu.png b/mods/ITEMS/mcl_signs/textures/_mu.png deleted file mode 100644 index 3d8c1b8904..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_mu.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_n.png b/mods/ITEMS/mcl_signs/textures/_n.png deleted file mode 100644 index ca5ea27874..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_n.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_n_.png b/mods/ITEMS/mcl_signs/textures/_n_.png deleted file mode 100644 index b96f27c626..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_n_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_n_tilde.png b/mods/ITEMS/mcl_signs/textures/_n_tilde.png deleted file mode 100644 index 4716691169..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_n_tilde.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_n_tilde_.png b/mods/ITEMS/mcl_signs/textures/_n_tilde_.png deleted file mode 100644 index 0dba0d4712..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_n_tilde_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_not.png b/mods/ITEMS/mcl_signs/textures/_not.png deleted file mode 100644 index a98f885e99..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_not.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o.png b/mods/ITEMS/mcl_signs/textures/_o.png deleted file mode 100644 index 2a579385dd..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_.png b/mods/ITEMS/mcl_signs/textures/_o_.png deleted file mode 100644 index 44ac3cbcaf..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_acute.png b/mods/ITEMS/mcl_signs/textures/_o_acute.png deleted file mode 100644 index cda99b3a6f..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_acute_.png b/mods/ITEMS/mcl_signs/textures/_o_acute_.png deleted file mode 100644 index e25a3a7f4b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_circumflex.png b/mods/ITEMS/mcl_signs/textures/_o_circumflex.png deleted file mode 100644 index 2f7a188df1..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_circumflex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_circumflex_.png b/mods/ITEMS/mcl_signs/textures/_o_circumflex_.png deleted file mode 100644 index 5e4c6be6a6..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_circumflex_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_dash.png b/mods/ITEMS/mcl_signs/textures/_o_dash.png deleted file mode 100644 index 9e5de53d13..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_dash.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_dash_.png b/mods/ITEMS/mcl_signs/textures/_o_dash_.png deleted file mode 100644 index badbe9b88b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_dash_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_grave.png b/mods/ITEMS/mcl_signs/textures/_o_grave.png deleted file mode 100644 index b6b31a9a6e..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_grave.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_grave_.png b/mods/ITEMS/mcl_signs/textures/_o_grave_.png deleted file mode 100644 index d34e9d71c6..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_grave_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_sup.png b/mods/ITEMS/mcl_signs/textures/_o_sup.png deleted file mode 100644 index eeff0a2959..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_sup.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_tilde.png b/mods/ITEMS/mcl_signs/textures/_o_tilde.png deleted file mode 100644 index 6cbd7cec0b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_tilde.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_o_tilde_.png b/mods/ITEMS/mcl_signs/textures/_o_tilde_.png deleted file mode 100644 index bb0616918e..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_o_tilde_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_oe.png b/mods/ITEMS/mcl_signs/textures/_oe.png deleted file mode 100644 index 9b68921555..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_oe.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_oe_.png b/mods/ITEMS/mcl_signs/textures/_oe_.png deleted file mode 100644 index 73b4da80ed..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_oe_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_p.png b/mods/ITEMS/mcl_signs/textures/_p.png deleted file mode 100644 index 08f8534d0c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_p.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_p_.png b/mods/ITEMS/mcl_signs/textures/_p_.png deleted file mode 100644 index 2ff300509d..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_p_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_paragraph.png b/mods/ITEMS/mcl_signs/textures/_paragraph.png deleted file mode 100644 index 52c162120b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_paragraph.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_pilcrow.png b/mods/ITEMS/mcl_signs/textures/_pilcrow.png deleted file mode 100644 index 9764ff8b57..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_pilcrow.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_plus_minus.png b/mods/ITEMS/mcl_signs/textures/_plus_minus.png deleted file mode 100644 index e7c3f12003..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_plus_minus.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_pound.png b/mods/ITEMS/mcl_signs/textures/_pound.png deleted file mode 100644 index 31d38d3928..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_pound.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_pr.png b/mods/ITEMS/mcl_signs/textures/_pr.png deleted file mode 100644 index c8783948d3..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_pr.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ps.png b/mods/ITEMS/mcl_signs/textures/_ps.png deleted file mode 100644 index 74b1f5b8e0..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ps.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_q.png b/mods/ITEMS/mcl_signs/textures/_q.png deleted file mode 100644 index b5fbcc27d4..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_q.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_q_.png b/mods/ITEMS/mcl_signs/textures/_q_.png deleted file mode 100644 index 6747994136..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_q_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_qo.png b/mods/ITEMS/mcl_signs/textures/_qo.png deleted file mode 100644 index c7b87be683..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_qo.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_qu.png b/mods/ITEMS/mcl_signs/textures/_qu.png deleted file mode 100644 index 1458c7e104..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_qu.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_qu_inv.png b/mods/ITEMS/mcl_signs/textures/_qu_inv.png deleted file mode 100644 index 757bd06db7..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_qu_inv.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_r.png b/mods/ITEMS/mcl_signs/textures/_r.png deleted file mode 100644 index 709c53889e..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_r.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_r_.png b/mods/ITEMS/mcl_signs/textures/_r_.png deleted file mode 100644 index f8b4727557..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_r_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_rc.png b/mods/ITEMS/mcl_signs/textures/_rc.png deleted file mode 100644 index 8b66915e65..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_rc.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_re.png b/mods/ITEMS/mcl_signs/textures/_re.png deleted file mode 100644 index 8fdaf4d244..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_re.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_registered.png b/mods/ITEMS/mcl_signs/textures/_registered.png deleted file mode 100644 index 9a78dda3c2..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_registered.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_s.png b/mods/ITEMS/mcl_signs/textures/_s.png deleted file mode 100644 index 4c47aee01c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_s.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_s_.png b/mods/ITEMS/mcl_signs/textures/_s_.png deleted file mode 100644 index 08cf6ff680..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_s_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_sl.png b/mods/ITEMS/mcl_signs/textures/_sl.png deleted file mode 100644 index 413aa5778e..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_sl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_sm.png b/mods/ITEMS/mcl_signs/textures/_sm.png deleted file mode 100644 index 460c5d6dda..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_sm.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_sp.png b/mods/ITEMS/mcl_signs/textures/_sp.png deleted file mode 100644 index 4aae0ea859..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_sp.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_sr.png b/mods/ITEMS/mcl_signs/textures/_sr.png deleted file mode 100644 index afefa91b21..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_sr.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_sz.png b/mods/ITEMS/mcl_signs/textures/_sz.png deleted file mode 100644 index 56d2847a15..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_sz.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_t.png b/mods/ITEMS/mcl_signs/textures/_t.png deleted file mode 100644 index e750dd98e6..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_t.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_t_.png b/mods/ITEMS/mcl_signs/textures/_t_.png deleted file mode 100644 index d7aabd04a3..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_t_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_thorn.png b/mods/ITEMS/mcl_signs/textures/_thorn.png deleted file mode 100644 index e44f23d85c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_thorn.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_thorn_.png b/mods/ITEMS/mcl_signs/textures/_thorn_.png deleted file mode 100644 index 1b6d2558b2..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_thorn_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_times_cross.png b/mods/ITEMS/mcl_signs/textures/_times_cross.png deleted file mode 100644 index 25af91b680..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_times_cross.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_times_dot.png b/mods/ITEMS/mcl_signs/textures/_times_dot.png deleted file mode 100644 index 42dac52bc9..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_times_dot.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_tl.png b/mods/ITEMS/mcl_signs/textures/_tl.png deleted file mode 100644 index 5f1b4fb433..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_tl.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u.png b/mods/ITEMS/mcl_signs/textures/_u.png deleted file mode 100644 index 2665e56858..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_.png b/mods/ITEMS/mcl_signs/textures/_u_.png deleted file mode 100644 index d04ff54819..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_acute.png b/mods/ITEMS/mcl_signs/textures/_u_acute.png deleted file mode 100644 index 580f61042d..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_acute_.png b/mods/ITEMS/mcl_signs/textures/_u_acute_.png deleted file mode 100644 index 9237d3caff..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_circumflex.png b/mods/ITEMS/mcl_signs/textures/_u_circumflex.png deleted file mode 100644 index 2b238be12f..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_circumflex.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_circumflex_.png b/mods/ITEMS/mcl_signs/textures/_u_circumflex_.png deleted file mode 100644 index 1608ecf173..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_circumflex_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_grave.png b/mods/ITEMS/mcl_signs/textures/_u_grave.png deleted file mode 100644 index 0512804284..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_grave.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_u_grave_.png b/mods/ITEMS/mcl_signs/textures/_u_grave_.png deleted file mode 100644 index 6686857933..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_u_grave_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ue.png b/mods/ITEMS/mcl_signs/textures/_ue.png deleted file mode 100644 index 6249aaebb8..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_ue_.png b/mods/ITEMS/mcl_signs/textures/_ue_.png deleted file mode 100644 index 3193a94129..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_ue_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_un.png b/mods/ITEMS/mcl_signs/textures/_un.png deleted file mode 100644 index d65f12d4e4..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_un.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_v.png b/mods/ITEMS/mcl_signs/textures/_v.png deleted file mode 100644 index 888b2f1cfa..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_v.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_v_.png b/mods/ITEMS/mcl_signs/textures/_v_.png deleted file mode 100644 index f2ecbf143b..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_v_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_vb.png b/mods/ITEMS/mcl_signs/textures/_vb.png deleted file mode 100644 index ca2e5667a2..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_vb.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_w.png b/mods/ITEMS/mcl_signs/textures/_w.png deleted file mode 100644 index 6c2eea3e19..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_w.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_w_.png b/mods/ITEMS/mcl_signs/textures/_w_.png deleted file mode 100644 index f1e26c1083..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_w_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_x.png b/mods/ITEMS/mcl_signs/textures/_x.png deleted file mode 100644 index 3eb2d52d7a..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_x.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_x_.png b/mods/ITEMS/mcl_signs/textures/_x_.png deleted file mode 100644 index bcb351d563..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_x_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_y.png b/mods/ITEMS/mcl_signs/textures/_y.png deleted file mode 100644 index 7cd1d87b72..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_y.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_y_.png b/mods/ITEMS/mcl_signs/textures/_y_.png deleted file mode 100644 index b5f49850cd..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_y_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_y_acute.png b/mods/ITEMS/mcl_signs/textures/_y_acute.png deleted file mode 100644 index 37cb54b304..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_y_acute.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_y_acute_.png b/mods/ITEMS/mcl_signs/textures/_y_acute_.png deleted file mode 100644 index bcc15c41c7..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_y_acute_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_y_diaresis.png b/mods/ITEMS/mcl_signs/textures/_y_diaresis.png deleted file mode 100644 index 135a8ce25c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_y_diaresis.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_yen.png b/mods/ITEMS/mcl_signs/textures/_yen.png deleted file mode 100644 index ec4ad65eef..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_yen.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_z.png b/mods/ITEMS/mcl_signs/textures/_z.png deleted file mode 100644 index 8a710780ad..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_z.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/_z_.png b/mods/ITEMS/mcl_signs/textures/_z_.png deleted file mode 100644 index 6192800b4c..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/_z_.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/default_sign.png b/mods/ITEMS/mcl_signs/textures/default_sign.png deleted file mode 100644 index 0779831182..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/default_sign.png and /dev/null differ diff --git a/mods/ITEMS/mcl_signs/textures/mcl_signs_sign.png b/mods/ITEMS/mcl_signs/textures/mcl_signs_sign.png deleted file mode 100644 index e312cb52c6..0000000000 Binary files a/mods/ITEMS/mcl_signs/textures/mcl_signs_sign.png and /dev/null differ diff --git a/mods/ITEMS/mcl_sponges/init.lua b/mods/ITEMS/mcl_sponges/init.lua deleted file mode 100644 index e9755479b5..0000000000 --- a/mods/ITEMS/mcl_sponges/init.lua +++ /dev/null @@ -1,211 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -local absorb = function(pos) - local change = false - -- Count number of absorbed river water vs other nodes - -- to determine the wet sponge type. - local river_water = 0 - local non_river_water = 0 - local p, n - for i=-3,3 do - for j=-3,3 do - for k=-3,3 do - p = {x=pos.x+i, y=pos.y+j, z=pos.z+k} - n = minetest.get_node(p) - if minetest.get_item_group(n.name, "water") ~= 0 then - minetest.add_node(p, {name="air"}) - change = true - if n.name == "mclx_core:river_water_source" or n.name == "mclx_core:river_water_flowing" then - river_water = river_water + 1 - else - non_river_water = non_river_water + 1 - end - end - end - end - end - -- The dominant water type wins. In case of a tie, normal water wins. - -- This slight bias is intentional. - local sponge_type - if river_water > non_river_water then - sponge_type = "mcl_sponges:sponge_wet_river_water" - else - sponge_type = "mcl_sponges:sponge_wet" - end - return change, sponge_type -end - -minetest.register_node("mcl_sponges:sponge", { - description = S("Sponge"), - _tt_help = S("Removes water on contact"), - _doc_items_longdesc = S("Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge."), - drawtype = "normal", - is_ground_content = false, - tiles = {"mcl_sponges_sponge.png"}, - walkable = true, - pointable = true, - diggable = true, - buildable_to = false, - stack_max = 64, - sounds = mcl_sounds.node_sound_dirt_defaults(), - groups = {handy=1, hoey=1, building_block=1}, - on_place = function(itemstack, placer, pointed_thing) - local pn = placer:get_player_name() - if pointed_thing.type ~= "node" then - return itemstack - end - - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer: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, placer, itemstack) or itemstack - end - end - - if minetest.is_protected(pointed_thing.above, pn) then - return itemstack - end - - local pos = pointed_thing.above - local on_water = false - if minetest.get_item_group(minetest.get_node(pos).name, "water") ~= 0 then - on_water = true - end - local water_found = minetest.find_node_near(pos, 1, "group:water") - if water_found then - on_water = true - end - if on_water then - -- Absorb water - -- FIXME: pos is not always the right placement position because of pointed_thing - local absorbed, wet_sponge = absorb(pos) - if absorbed then - minetest.item_place_node(ItemStack(wet_sponge), placer, pointed_thing) - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - return itemstack - end - end - return minetest.item_place_node(itemstack, placer, pointed_thing) - end, - _mcl_blast_resistance = 0.6, - _mcl_hardness = 0.6, -}) - -function place_wet_sponge(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if placer and not placer: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, placer, itemstack) or itemstack - end - end - - local name = placer:get_player_name() - - if minetest.is_protected(pointed_thing.above, name) then - return itemstack - end - - if mcl_worlds.pos_to_dimension(pointed_thing.above) == "nether" then - minetest.item_place_node(ItemStack("mcl_sponges:sponge"), placer, pointed_thing) - local pos = pointed_thing.above - - for n = 1, 5 do - minetest.add_particlespawner({ - amount = 5, - time = 0.1, - minpos = vector.offset(pos, -0.5, 0.6, -0.5), - maxpos = vector.offset(pos, 0.5, 0.6, 0.5), - minvel = vector.new(0, 0.1, 0), - maxvel = vector.new(0, 1, 0), - minexptime = 0.1, - maxexptime = 1, - minsize = 2, - maxsize = 5, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_sponge" .. n .. ".png", - }) - end - if not minetest.is_creative_enabled(name) then - itemstack:take_item() - end - return itemstack - end - - return minetest.item_place_node(itemstack, placer, pointed_thing) -end - -minetest.register_node("mcl_sponges:sponge_wet", { - description = S("Waterlogged Sponge"), - _tt_help = S("Can be dried in furnace"), - _doc_items_longdesc = S("A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket."), - drawtype = "normal", - is_ground_content = false, - tiles = {"mcl_sponges_sponge_wet.png"}, - walkable = true, - pointable = true, - diggable = true, - buildable_to = false, - stack_max = 64, - sounds = mcl_sounds.node_sound_dirt_defaults(), - groups = {handy=1, hoey=1, building_block=1}, - on_place = place_wet_sponge, - _mcl_blast_resistance = 0.6, - _mcl_hardness = 0.6, -}) - -if minetest.get_modpath("mclx_core") then - minetest.register_node("mcl_sponges:sponge_wet_river_water", { - description = S("Riverwaterlogged Sponge"), - _tt_help = S("Can be dried in furnace"), - _doc_items_longdesc = S("This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.") .. "\n" .. S("A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water."), - drawtype = "normal", - is_ground_content = false, - tiles = {"mcl_sponges_sponge_wet_river_water.png"}, - walkable = true, - pointable = true, - diggable = true, - buildable_to = false, - stack_max = 64, - sounds = mcl_sounds.node_sound_dirt_defaults(), - groups = {handy=1, building_block=1}, - on_place = place_wet_sponge, - _mcl_blast_resistance = 0.6, - _mcl_hardness = 0.6, - }) - - minetest.register_craft({ - type = "cooking", - output = "mcl_sponges:sponge", - recipe = "mcl_sponges:sponge_wet_river_water", - cooktime = 10, - }) -end - -minetest.register_craft({ - type = "cooking", - output = "mcl_sponges:sponge", - recipe = "mcl_sponges:sponge_wet", - cooktime = 10, -}) - -minetest.register_abm({ - label = "Sponge water absorbtion", - nodenames = { "mcl_sponges:sponge" }, - neighbors = { "group:water" }, - interval = 1, - chance = 1, - action = function(pos) - local absorbed, wet_sponge = absorb(pos) - if absorbed then - minetest.add_node(pos, {name = wet_sponge}) - end - end, -}) diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.de.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.de.tr deleted file mode 100644 index 4f0b827f59..0000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.de.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge=Schwamm -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Schwämme sind Blöcke, die Wasser um sie herum entfernen, wenn sie platziert wurden oder in Berührung mit Wasser kommen, was sie in einen nassen Schwamm verwandelt. -Waterlogged Sponge=Wassergetränkter Schwamm -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Ein wassergetränkter Schwamm kann in einem Ofen getrocknet werden, um ihn zu einem (trockenem) Schwamm zu verwandeln. Wenn es einen leeren Eimer im Brennstoffplatz des Ofens gibt, wird das Wasser in den Eimer fließen. -Riverwaterlogged Sponge=Flusswassergetränkter Schwamm -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=Dies ist ein Schwamm, der triefend nass und voller Flusswasser ist. Er kann in einem Ofen getrocknet werden, um ihn zu einem (trockenem) Schwamm zu verwandeln. Wenn es einen leeren Eimer im Brennstoffplatz des Ofens gibt, wird das Flusswasser in den Eimer fließen. -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Ein Schwamm wird flusswassergetränkt (statt wassergetränkt), wenn er mehr Flusswasser als (normales) Wasser aufsaugt. -Removes water on contact=Entfernt Wasser bei Berührung -Can be dried in furnace=Kann im Ofen getrocknet werden diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.es.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.es.tr deleted file mode 100644 index 4ee44838a8..0000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.es.tr +++ /dev/null @@ -1,8 +0,0 @@ -# textdomain: mcl_sponges -Sponge=Esponja -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Las esponjas son bloques que eliminan el agua a su alrededor cuando se colocan o entran en contacto con el agua, convirtiéndola en una esponja húmeda. -Waterlogged Sponge=Esponja mojada -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Se puede secar una esponja mojada de agua en el horno para convertirla en una esponja (seca). Cuando hay un cubo vacío en la ranura de combustible de un horno, el agua se vierte en el cubo. -Riverwaterlogged Sponge=Esponja mojada con agua de rio -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=Esta es una esponja mojada con agua de río. Se puede secar en el horno para convertirlo en una esponja (seca). Cuando hay un balde vacío en la ranura de combustible del horno, el agua del río se vierte en el balde. -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Una esponja se inunda de río (en lugar de inundarse) si absorbe más agua de río que el agua (normal). diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.fr.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.fr.tr deleted file mode 100644 index 58dd74bee9..0000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.fr.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge=Éponge -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Les éponges sont des blocs qui éliminent l'eau autour d'eux lorsqu'ils sont placés ou entrent en contact avec l'eau, la transformant en une éponge humide. -Waterlogged Sponge=Éponge gorgée d'eau -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Une éponge gorgée d'eau peut être séchée dans le four pour la transformer en éponge (sèche). Lorsqu'il y a un seau vide dans la fente de combustible d'un four, l'eau se déversera dans le seau. -Riverwaterlogged Sponge=Éponge gorgée d'eau de rivière -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=Il s'agit d'une éponge trempée d'eau de rivière. Elle peut être séché dans le four pour le transformer en éponge (sèche). Lorsqu'il y a un seau vide dans la fente de combustible du four, l'eau de la rivière se déversera dans le seau. -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Une éponge devient gorgée d'eau de rivière (au lieu d'être gorgée d'eau) si elle aspire plus d'eau de rivière que d'eau (normale). -Removes water on contact=Élimine l'eau au contact -Can be dried in furnace=Peut être séché au four diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.pl.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.pl.tr deleted file mode 100644 index 6cb6bf4742..0000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.pl.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge=Gąbka -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Gąbki to bloki które usuwają wodę wokół siebie gdy są postawione, lub gdy wejdą w kontakt z wodą, zamieniając się w mokre gąbki. -Waterlogged Sponge=Nasiąknięta gąbka -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Nasiąknięta gąbka może zostać wysuszona w piecu by zamienić się w (suchą) gąbkę. Jeśli w miejscu na paliwo jest puste wiadro, to woda wyleje się do wiaderka. -Riverwaterlogged Sponge=Gąbka nasiąknięta wodą rzeczną -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=To jest gąbka, która wchłonęła wodę rzeczną. Może zostać wysuszona w piecu by zamienić się w (suchą) gąbkę. Jeśli w miejscu na paliwo jest puste wiadro, to woda rzeczna wyleje się do wiaderka. -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Gąbka zostanie nasiąknięta wodą rzeczną jeśli nasiąknie większą ilością wody z rzeki niż normalnej wody. -Removes water on contact=Usuwa dotkniętą wodę -Can be dried in furnace=Może zostać wysuszona w piecu diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.ru.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.ru.tr deleted file mode 100644 index c3b1749d68..0000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.ru.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge=Губка -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Губки это блоки, которые убирают воду вокруг себя, превращаясь в намокшие губки. -Waterlogged Sponge=Намокшая губка -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Намокшая губка может быть высушена в печи, тогда она превратится обратно в (сухую) губку. Если поставить пустое ведро в топливный отсек печи, это ведро наполнится водой. -Riverwaterlogged Sponge=Губка с речной водой -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=Это губка, пропитанная речной водой. Она может быть высушена в печи, тогда она превратится обратно в (сухую) губку. Если поставить пустое ведро в топливный отсек печи, это ведро наполнится речной водой. -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Губка становится губкой с речной водой, если она втягивает в себя больше речной воды, чем обыкновенной. -Removes water on contact=Убирает воду при контакте -Can be dried in furnace=Может быть просушена в печи diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.zh_TW.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.zh_TW.tr deleted file mode 100644 index 3b466dff40..0000000000 --- a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.zh_TW.tr +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge=海綿 -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=海綿是一種方塊,當它們被放置或與水接觸時,會去除它們周圍的水,使其變成濕海綿。 -Waterlogged Sponge=濕海綿 -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=濕海綿可以在熔爐裡烘乾,變成(乾)海綿。當爐子的燃料槽裡有一個空桶時,水會倒進桶裡。 -Riverwaterlogged Sponge=濕河水海綿 -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=濕河水海綿是含有濕河水的海綿。可以在爐子裡曬乾,變成(乾)海綿。當爐子的燃料槽裡有一個空桶時,水會倒進桶裡。 -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.= -Removes water on contact=如果海綿吸的河水比(正常的)水多,它就會變成濕河水海綿(而不是濕海綿)。 -Can be dried in furnace=可以在熔爐裏烘乾 diff --git a/mods/ITEMS/mcl_sponges/locale/template.txt b/mods/ITEMS/mcl_sponges/locale/template.txt deleted file mode 100644 index 9307c2cdf8..0000000000 --- a/mods/ITEMS/mcl_sponges/locale/template.txt +++ /dev/null @@ -1,10 +0,0 @@ -# textdomain: mcl_sponges -Sponge= -Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.= -Waterlogged Sponge= -A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.= -Riverwaterlogged Sponge= -This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.= -A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.= -Removes water on contact= -Can be dried in furnace= diff --git a/mods/ITEMS/mcl_sponges/mod.conf b/mods/ITEMS/mcl_sponges/mod.conf deleted file mode 100644 index d833493b3b..0000000000 --- a/mods/ITEMS/mcl_sponges/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_sponges -description = A sponge which sucks in water (WIP). -depends = mcl_sounds -optional_depends = mcl_core, mclx_core diff --git a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge.png b/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge.png deleted file mode 100644 index 0d68d872f9..0000000000 Binary files a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge.png and /dev/null differ diff --git a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet.png b/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet.png deleted file mode 100644 index 7f4e842069..0000000000 Binary files a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet.png and /dev/null differ diff --git a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet_river_water.png b/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet_river_water.png deleted file mode 100644 index 5d9475a564..0000000000 Binary files a/mods/ITEMS/mcl_sponges/textures/mcl_sponges_sponge_wet_river_water.png and /dev/null differ diff --git a/mods/ITEMS/mcl_torches/LICENSE.txt b/mods/ITEMS/mcl_torches/LICENSE.txt deleted file mode 100644 index 4362b49151..0000000000 --- a/mods/ITEMS/mcl_torches/LICENSE.txt +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/mods/ITEMS/mcl_torches/README.txt b/mods/ITEMS/mcl_torches/README.txt deleted file mode 100644 index a1dd8eb77b..0000000000 --- a/mods/ITEMS/mcl_torches/README.txt +++ /dev/null @@ -1,61 +0,0 @@ -Minetest mod "Torches" -====================== - -(c) Copyright BlockMen (2013-2015) -(C) Copyright sofar (2016) - - -About this mod: -~~~~~~~~~~~~~~~ -This mod changes the default torch drawtype from "torchlike" to "mesh", -giving the torch a three dimensional appearance. The mesh contains the -proper pixel mapping to make the animation appear as a particle above -the torch, while in fact the animation is just the texture of the mesh. - -Originally, this mod created in-game alternatives with several -draw styles. The alternatives have been removed and instead of -providing alternate nodes, this mod now directly modifies the existing -nodes. Conversion from the wallmounted style is done through an LBM. - -Torches is meant for minetest-0.4.14, and does not directly support -older minetest releases. You'll need a recent git, or nightly build. - -Changes for MineClone: -~~~~~~~~~~~~~~~~~~~~~~ -- Torch does not generate light when wielding -- Torch drops when near water -- Torch can't be placed on ceiling -- Simple API (WIP) - -License: -~~~~~~~~ -(c) Copyright BlockMen (2013-2015) - -Models: -CC-BY 3.0 by 22i - -Code: -Licensed under the GNU LGPL version 2.1 or higher. -You can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License -as published by the Free Software Foundation; - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -See LICENSE.txt and http://www.gnu.org/licenses/lgpl-2.1.txt - - -Github: -~~~~~~~ -https://github.com/BlockMen/torches - -Forum: -~~~~~~ -https://forum.minetest.net/viewtopic.php?id=6099 - - -Changelog: -~~~~~~~~~~ -see changelog.txt diff --git a/mods/ITEMS/mcl_torches/api.lua b/mods/ITEMS/mcl_torches/api.lua deleted file mode 100644 index dab5087953..0000000000 --- a/mods/ITEMS/mcl_torches/api.lua +++ /dev/null @@ -1,267 +0,0 @@ -local smoke_pdef = { - amount = 0.5, - maxexptime = 2.0, - minvel = { x = 0.0, y = 0.5, z = 0.0 }, - maxvel = { x = 0.0, y = 0.6, z = 0.0 }, - minsize = 1.5, - maxsize = 1.5, - minrelpos = { x = -1/16, y = 0.04, z = -1/16 }, - maxrelpos = { x = 1/16, y = 0.06, z = 1/16 }, -} - -local function spawn_flames_floor(pos) - -- Flames - mcl_particles.add_node_particlespawner(pos, { - amount = 8, - time = 0, - minpos = vector.add(pos, { x = -0.1, y = 0.05, z = -0.1 }), - maxpos = vector.add(pos, { x = 0.1, y = 0.15, z = 0.1 }), - minvel = { x = -0.01, y = 0, z = -0.01 }, - maxvel = { x = 0.01, y = 0.1, z = 0.01 }, - minexptime = 0.3, - maxexptime = 0.6, - minsize = 0.7, - maxsize = 2, - texture = "mcl_particles_flame.png", - glow = minetest.registered_nodes[minetest.get_node(pos).name].light_source, - }, "low") - -- Smoke - mcl_particles.spawn_smoke(pos, "torch", smoke_pdef) -end - -local function spawn_flames_wall(pos) - --local minrelpos, maxrelpos - local node = minetest.get_node(pos) - local dir = minetest.wallmounted_to_dir(node.param2) - - local smoke_pdef = table.copy(smoke_pdef) - - if dir.x < 0 then - smoke_pdef.minrelpos = { x = -0.38, y = 0.04, z = -0.1 } - smoke_pdef.maxrelpos = { x = -0.2, y = 0.14, z = 0.1 } - elseif dir.x > 0 then - smoke_pdef.minrelpos = { x = 0.2, y = 0.04, z = -0.1 } - smoke_pdef.maxrelpos = { x = 0.38, y = 0.14, z = 0.1 } - elseif dir.z < 0 then - smoke_pdef.minrelpos = { x = -0.1, y = 0.04, z = -0.38 } - smoke_pdef.maxrelpos = { x = 0.1, y = 0.14, z = -0.2 } - elseif dir.z > 0 then - smoke_pdef.minrelpos = { x = -0.1, y = 0.04, z = 0.2 } - smoke_pdef.maxrelpos = { x = 0.1, y = 0.14, z = 0.38 } - else - return - end - - - -- Flames - mcl_particles.add_node_particlespawner(pos, { - amount = 8, - time = 0, - minpos = vector.add(pos, smoke_pdef.minrelpos), - maxpos = vector.add(pos, smoke_pdef.maxrelpos), - minvel = { x = -0.01, y = 0, z = -0.01 }, - maxvel = { x = 0.01, y = 0.1, z = 0.01 }, - minexptime = 0.3, - maxexptime = 0.6, - minsize = 0.7, - maxsize = 2, - texture = "mcl_particles_flame.png", - glow = minetest.registered_nodes[node.name].light_source, - }, "low") - -- Smoke - mcl_particles.spawn_smoke(pos, "torch", smoke_pdef) -end - -local function remove_flames(pos) - mcl_particles.delete_node_particlespawners(pos) -end - --- --- 3d torch part --- - --- Check if placement at given node is allowed -local function check_placement_allowed(node, wdir) - -- Torch placement rules: Disallow placement on some nodes. General rule: Solid, opaque, full cube collision box nodes are allowed. - -- Special allowed nodes: - -- * soul sand - -- * mob spawner - -- * chorus flower - -- * glass, barrier, ice - -- * Fence, wall, end portal frame with ender eye: Only on top - -- * Slab, stairs: Only on top if upside down - - -- Special forbidden nodes: - -- * Piston, sticky piston - local def = minetest.registered_nodes[node.name] - if not def then - return false - -- No ceiling torches - elseif wdir == 0 then - return false - elseif not def.buildable_to then - if node.name ~= "mcl_core:ice" and node.name ~= "mcl_nether:soul_sand" and node.name ~= "mcl_mobspawners:spawner" and node.name ~= "mcl_core:barrier" and node.name ~= "mcl_end:chorus_flower" and node.name ~= "mcl_end:chorus_flower_dead" and (not def.groups.glass) and - ((not def.groups.solid) or (not def.groups.opaque)) then - -- Only allow top placement on these nodes - if node.name == "mcl_end:dragon_egg" or node.name == "mcl_portals:end_portal_frame_eye" or def.groups.fence == 1 or def.groups.wall or def.groups.slab_top == 1 or def.groups.anvil or def.groups.pane or (def.groups.stair == 1 and minetest.facedir_to_dir(node.param2).y ~= 0) then - if wdir ~= 1 then - return false - end - else - return false - end - elseif minetest.get_item_group(node.name, "piston") >= 1 then - return false - end - end - return true -end - -function mcl_torches.register_torch(def) - local itemstring = minetest.get_current_modname() .. ":" .. def.name - local itemstring_wall = itemstring .. "_wall" - - def.light = def.light or minetest.LIGHT_MAX - def.mesh_floor = def.mesh_floor or "mcl_torches_torch_floor.obj" - def.mesh_wall = def.mesh_wall or "mcl_torches_torch_wall.obj" - - local groups = def.groups or {} - - groups.attached_node = 1 - groups.torch = 1 - groups.torch_particles = def.particles and 1 - groups.dig_by_water = 1 - groups.destroy_by_lava_flow = 1 - groups.dig_by_piston = 1 - - local floordef = { - description = def.description, - _doc_items_longdesc = def.doc_items_longdesc, - _doc_items_usagehelp = def.doc_items_usagehelp, - _doc_items_hidden = def.doc_items_hidden, - _doc_items_create_entry = def._doc_items_create_entry, - drawtype = "mesh", - mesh = def.mesh_floor, - inventory_image = def.icon, - wield_image = def.icon, - tiles = def.tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - liquids_pointable = false, - light_source = def.light, - groups = groups, - drop = def.drop or itemstring, - selection_box = { - type = "wallmounted", - wall_top = {-1/16, -1/16, -1/16, 1/16, 0.5, 1/16}, - wall_bottom = {-1/16, -0.5, -1/16, 1/16, 1/16, 1/16}, - }, - sounds = def.sounds, - node_placement_prediction = "", - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities, for now. - return itemstack - end - - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then return itemstack end - - -- Call on_rightclick if the pointed node defines it - if placer and not placer: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(under, node, placer, itemstack) or itemstack - end - end - - local above = pointed_thing.above - local wdir = minetest.dir_to_wallmounted({x = under.x - above.x, y = under.y - above.y, z = under.z - above.z}) - - if check_placement_allowed(node, wdir) == false then - return itemstack - end - - local itemstring = itemstack:get_name() - local fakestack = ItemStack(itemstack) - local idef = fakestack:get_definition() - local retval - - if wdir == 1 then - retval = fakestack:set_name(itemstring) - else - retval = fakestack:set_name(itemstring_wall) - end - if not retval then - return itemstack - end - - local success - itemstack, success = minetest.item_place(fakestack, placer, pointed_thing, wdir) - itemstack:set_name(itemstring) - - if success and idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=under, gain=1}, true) - end - return itemstack - end, - on_rotate = false, - on_construct = def.particles and spawn_flames_floor, - on_destruct = def.particles and remove_flames, - } - minetest.register_node(itemstring, floordef) - - local groups_wall = table.copy(groups) - groups_wall.torch = 2 - - local walldef = { - drawtype = "mesh", - mesh = def.mesh_wall, - tiles = def.tiles, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - light_source = def.light, - groups = groups_wall, - drop = def.drop or itemstring, - selection_box = { - type = "wallmounted", - wall_top = {-0.1, -0.1, -0.1, 0.1, 0.5, 0.1}, - wall_bottom = {-0.1, -0.5, -0.1, 0.1, 0.1, 0.1}, - wall_side = {-0.5, -0.5, -0.1, -0.2, 0.1, 0.1}, - }, - sounds = def.sounds, - on_rotate = false, - on_construct = def.particles and spawn_flames_wall, - on_destruct = def.particles and remove_flames, - } - minetest.register_node(itemstring_wall, walldef) - - -- Add entry alias for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", itemstring, "nodes", itemstring_wall) - end -end - -minetest.register_lbm({ - label = "Torch flame particles", - name = "mcl_torches:flames", - nodenames = {"group:torch_particles"}, - run_at_every_load = true, - action = function(pos, node) - local torch_group = minetest.get_item_group(node.name, "torch") - if torch_group == 1 then - spawn_flames_floor(pos) - elseif torch_group == 2 then - spawn_flames_wall(pos) - end - end, -}) diff --git a/mods/ITEMS/mcl_torches/init.lua b/mods/ITEMS/mcl_torches/init.lua deleted file mode 100644 index 6b6ebcae9c..0000000000 --- a/mods/ITEMS/mcl_torches/init.lua +++ /dev/null @@ -1,6 +0,0 @@ -mcl_torches = {} - -local modpath = minetest.get_modpath(minetest.get_current_modname()) - -dofile(modpath .. "/api.lua") -dofile(modpath .. "/register.lua") diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.de.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.de.tr deleted file mode 100644 index 224106abf7..0000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.de.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=Fackel -Torches are light sources which can be placed at the side or on the top of most blocks.=Fackeln sind Lichtquellen, die an der Seite oder der Oberseite der meisten Blöcke platziert werden können. diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.es.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.es.tr deleted file mode 100644 index 18a81f5caf..0000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.es.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=Antorcha -Torches are light sources which can be placed at the side or on the top of most blocks.=Las antorchas son fuentes de luz que se pueden colocar a un lado, en el suelo, o en la parte superior de la mayoría de los bloques. \ No newline at end of file diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.fr.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.fr.tr deleted file mode 100644 index 394d58d4d0..0000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.fr.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=Torche -Torches are light sources which can be placed at the side or on the top of most blocks.=Les torches sont des sources lumineuses qui peuvent être placées sur le côté ou sur le dessus de la plupart des blocs. diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.pl.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.pl.tr deleted file mode 100644 index ae1c118ae2..0000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.pl.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=Pochodnia -Torches are light sources which can be placed at the side or on the top of most blocks.=Pochodnie są źródłami światła, które może zostać postawione na boku lub na górze większości bloków. diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.ru.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.ru.tr deleted file mode 100644 index c3812eaad4..0000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.ru.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=Факел -Torches are light sources which can be placed at the side or on the top of most blocks.=Факелы это источники света, которые можно вешать на стены или ставить на верхние части большинства блоков. diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.zh_TW.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.zh_TW.tr deleted file mode 100644 index 01088cd96c..0000000000 --- a/mods/ITEMS/mcl_torches/locale/mcl_torches.zh_TW.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch=火把 -Torches are light sources which can be placed at the side or on the top of most blocks.=火把是光源,可以放在大多數方塊的側面或頂部。 diff --git a/mods/ITEMS/mcl_torches/locale/template.txt b/mods/ITEMS/mcl_torches/locale/template.txt deleted file mode 100644 index 447fba7478..0000000000 --- a/mods/ITEMS/mcl_torches/locale/template.txt +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_torches -Torch= -Torches are light sources which can be placed at the side or on the top of most blocks.= diff --git a/mods/ITEMS/mcl_torches/mod.conf b/mods/ITEMS/mcl_torches/mod.conf deleted file mode 100644 index b383df2a73..0000000000 --- a/mods/ITEMS/mcl_torches/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mcl_torches -description = Mesh-based torches - three dimensional torches for minetest. -depends = mcl_core, mcl_sounds, mcl_particles -optional_depends = doc diff --git a/mods/ITEMS/mcl_torches/models/mcl_torches_torch_floor.obj b/mods/ITEMS/mcl_torches/models/mcl_torches_torch_floor.obj deleted file mode 100644 index ac4234d3ef..0000000000 --- a/mods/ITEMS/mcl_torches/models/mcl_torches_torch_floor.obj +++ /dev/null @@ -1,29 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'torch_on_floor_node.blend' -# www.blender.org -o torch_Cube_Cube.001_Cube_Cube.001_Material.001 -v 0.062500 0.062500 0.062500 -v 0.062500 0.062500 -0.062500 -v -0.062500 0.062500 -0.062500 -v -0.062500 0.062500 0.062500 -v -0.062500 -0.500000 0.062500 -v 0.062500 -0.500000 0.062500 -v 0.062500 -0.500000 -0.062500 -v -0.062500 -0.500000 -0.062500 -vt 0.562500 0.500000 -vt 0.562500 0.625000 -vt 0.437500 0.625000 -vt 0.437500 0.500000 -vt 0.437500 0.000000 -vt 0.562500 0.000000 -vt 0.562500 0.125000 -vt 0.437500 0.125000 -vn 0.000000 1.000000 0.000000 -vn 0.000000 0.000000 -1.000000 -vn 1.000000 0.000000 0.000000 -s 1 -f 1/1/1 2/2/1 3/3/1 4/4/1 -f 5/5/1 6/6/1 7/7/1 8/8/1 -f 1/2/2 6/6/2 5/5/2 4/3/2 -f 2/3/3 1/2/3 6/6/3 7/5/3 -f 3/2/2 2/3/2 7/5/2 8/6/2 -f 4/3/3 5/5/3 8/6/3 3/2/3 diff --git a/mods/ITEMS/mcl_torches/models/mcl_torches_torch_wall.obj b/mods/ITEMS/mcl_torches/models/mcl_torches_torch_wall.obj deleted file mode 100644 index 824223e6d4..0000000000 --- a/mods/ITEMS/mcl_torches/models/mcl_torches_torch_wall.obj +++ /dev/null @@ -1,29 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'torch_on_wall_node.blend' -# www.blender.org -o torch_wall_Cube_Cube.001_Cube_Cube.001_Material.001 -v 0.062469 -0.303502 0.086070 -v 0.062469 -0.195248 0.023570 -v -0.062531 -0.195248 0.023570 -v -0.062531 -0.303502 0.086070 -v -0.062531 -0.584752 -0.401070 -v 0.062469 -0.584752 -0.401070 -v 0.062469 -0.476498 -0.463570 -v -0.062531 -0.476498 -0.463570 -vt 0.562500 0.500000 -vt 0.562500 0.625000 -vt 0.437500 0.625000 -vt 0.437500 0.500000 -vt 0.437500 0.000000 -vt 0.562500 0.000000 -vt 0.562500 0.125000 -vt 0.437500 0.125000 -vn 0.000000 0.500000 0.866000 -vn 0.000000 0.866000 -0.500000 -vn 1.000000 -0.000000 0.000000 -s 1 -f 1/1/1 2/2/1 3/3/1 4/4/1 -f 5/5/1 6/6/1 7/7/1 8/8/1 -f 1/2/2 6/6/2 5/5/2 4/3/2 -f 2/3/3 1/2/3 6/6/3 7/5/3 -f 3/2/2 2/3/2 7/5/2 8/6/2 -f 4/3/3 5/5/3 8/6/3 3/2/3 diff --git a/mods/ITEMS/mcl_torches/register.lua b/mods/ITEMS/mcl_torches/register.lua deleted file mode 100644 index f8c34e6b54..0000000000 --- a/mods/ITEMS/mcl_torches/register.lua +++ /dev/null @@ -1,27 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -mcl_torches.register_torch({ - name = "torch", - description = S("Torch"), - doc_items_longdesc = S("Torches are light sources which can be placed at the side or on the top of most blocks."), - doc_items_hidden = false, - icon = "default_torch_on_floor.png", - tiles = {{ - name = "default_torch_on_floor_animated.png", - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - }}, - -- this is 15 in minecraft - light = 14, - groups = {dig_immediate = 3, deco_block = 1}, - sounds = mcl_sounds.node_sound_wood_defaults(), - particles = true, -}) - -minetest.register_craft({ - output = "mcl_torches:torch 4", - recipe = { - {"group:coal"}, - {"mcl_core:stick"}, - } -}) - diff --git a/mods/ITEMS/mcl_torches/textures/default_torch_on_floor.png b/mods/ITEMS/mcl_torches/textures/default_torch_on_floor.png deleted file mode 100644 index cb0ce15f12..0000000000 Binary files a/mods/ITEMS/mcl_torches/textures/default_torch_on_floor.png and /dev/null differ diff --git a/mods/ITEMS/mcl_torches/textures/default_torch_on_floor_animated.png b/mods/ITEMS/mcl_torches/textures/default_torch_on_floor_animated.png deleted file mode 100644 index 28cdc64c71..0000000000 Binary files a/mods/ITEMS/mcl_torches/textures/default_torch_on_floor_animated.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/README.txt b/mods/ITEMS/mcl_wool/README.txt deleted file mode 100644 index ae902b9512..0000000000 --- a/mods/ITEMS/mcl_wool/README.txt +++ /dev/null @@ -1,15 +0,0 @@ -Minetest 0.4 mod: wool -====================== - -Mostly backward-compatible with jordach's 16-color wool mod. - -License of source code: ------------------------ -Copyright (C) 2012 Perttu Ahola (celeron55) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - diff --git a/mods/ITEMS/mcl_wool/credit.txt b/mods/ITEMS/mcl_wool/credit.txt deleted file mode 100644 index e35ec02524..0000000000 --- a/mods/ITEMS/mcl_wool/credit.txt +++ /dev/null @@ -1 +0,0 @@ -jojoa1997:carpet diff --git a/mods/ITEMS/mcl_wool/init.lua b/mods/ITEMS/mcl_wool/init.lua deleted file mode 100644 index 65cbb87088..0000000000 --- a/mods/ITEMS/mcl_wool/init.lua +++ /dev/null @@ -1,129 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_doc = minetest.get_modpath("doc") - --- minetest/wool/init.lua - --- Backwards compatibility with jordach's 16-color wool mod -minetest.register_alias("mcl_wool:dark_blue", "wool:blue") -minetest.register_alias("mcl_wool:gold", "wool:yellow") - -local wool = {} --- This uses a trick: you can first define the recipes using all of the base --- colors, and then some recipes using more specific colors for a few non-base --- colors available. When crafting, the last recipes will be checked first. -wool.dyes = { - -- name, texture, wool desc., carpet desc., dye, color_group - {"white", "wool_white", S("White Wool"), S("White Carpet"), nil, "unicolor_white"}, - {"grey", "wool_dark_grey", S("Grey Wool"), S("Grey Carpet"), "dark_grey", "unicolor_darkgrey"}, - {"silver", "wool_grey", S("Light Grey Wool"), S("Light Grey Carpet"), "grey", "unicolor_grey"}, - {"black", "wool_black", S("Black Wool"), S("Black Carpet"), "black", "unicolor_black"}, - {"red", "wool_red", S("Red Wool"), S("Red Carpet"), "red", "unicolor_red"}, - {"yellow", "wool_yellow", S("Yellow Wool"), S("Yellow Carpet"), "yellow", "unicolor_yellow"}, - {"green", "wool_dark_green", S("Green Wool"), S("Green Carpet"), "dark_green", "unicolor_dark_green"}, - {"cyan", "wool_cyan", S("Cyan Wool"), S("Cyan Carpet"), "cyan", "unicolor_cyan"}, - {"blue", "wool_blue", S("Blue Wool"), S("Blue Carpet"), "blue", "unicolor_blue"}, - {"magenta", "wool_magenta", S("Magenta Wool"), S("Magenta Carpet"), "magenta", "unicolor_red_violet"}, - {"orange", "wool_orange", S("Orange Wool"), S("Orange Carpet"), "orange", "unicolor_orange"}, - {"purple", "wool_violet", S("Purple Wool"), S("Purple Carpet"), "violet", "unicolor_violet"}, - {"brown", "wool_brown", S("Brown Wool"), S("Brown Carpet"), "brown", "unicolor_dark_orange"}, - {"pink", "wool_pink", S("Pink Wool"), S("Pink Carpet"), "pink", "unicolor_light_red"}, - {"lime", "mcl_wool_lime", S("Lime Wool"), S("Lime Carpet"), "green", "unicolor_green"}, - {"light_blue", "mcl_wool_light_blue", S("Light Blue Wool"), S("Light Blue Carpet"), "lightblue", "unicolor_light_blue"}, -} -local canonical_color = "white" - -for _, row in ipairs(wool.dyes) do - local name = row[1] - local texture = row[2] - local desc_wool = row[3] - local desc_carpet = row[4] - local dye = row[5] - local color_group = row[6] - local longdesc_wool, longdesc_carpet, create_entry, name_wool, name_carpet - local is_canonical = name == canonical_color - if mod_doc then - if is_canonical then - longdesc_wool = S("Wool is a decorative block which comes in many different colors.") - longdesc_carpet = S("Carpets are thin floor covers which come in many different colors.") - name_wool = S("Wool") - name_carpet = S("Carpet") - else - create_entry = false - end - end - -- Node Definition - minetest.register_node("mcl_wool:"..name, { - description = desc_wool, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = name_wool, - _doc_items_longdesc = longdesc_wool, - stack_max = 64, - is_ground_content = false, - tiles = {texture..".png"}, - groups = {handy=1,shearsy_wool=1, flammable=1,fire_encouragement=30, fire_flammability=60, wool=1,building_block=1,[color_group]=1}, - sounds = mcl_sounds.node_sound_wool_defaults(), - _mcl_hardness = 0.8, - _mcl_blast_resistance = 0.8, - }) - minetest.register_node("mcl_wool:"..name.."_carpet", { - description = desc_carpet, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = name_carpet, - _doc_items_longdesc = longdesc_carpet, - - is_ground_content = false, - tiles = {texture..".png"}, - wield_image = texture..".png", - wield_scale = { x=1, y=1, z=0.5 }, - groups = {handy=1, carpet=1,supported_node=1,flammable=1,fire_encouragement=60, fire_flammability=20, dig_by_water=1,deco_block=1,[color_group]=1}, - sounds = mcl_sounds.node_sound_wool_defaults(), - paramtype = "light", - sunlight_propagates = true, - stack_max = 64, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-8/16, -8/16, -8/16, 8/16, -7/16, 8/16}, - }, - }, - _mcl_hardness = 0.1, - _mcl_blast_resistance = 0.1, - }) - if mod_doc and not is_canonical then - doc.add_entry_alias("nodes", "mcl_wool:"..canonical_color, "nodes", "mcl_wool:"..name) - doc.add_entry_alias("nodes", "mcl_wool:"..canonical_color.."_carpet", "nodes", "mcl_wool:"..name.."_carpet") - end - if dye then - -- Crafting from dye and white wool - minetest.register_craft({ - type = "shapeless", - output = "mcl_wool:"..name, - recipe = {"mcl_dye:"..dye, "mcl_wool:white"}, - }) - end - minetest.register_craft({ - output = "mcl_wool:"..name.."_carpet 3", - recipe = {{"mcl_wool:"..name, "mcl_wool:"..name}}, - }) -end - -minetest.register_craft({ - output = "mcl_wool:white", - recipe = { - { "mcl_mobitems:string", "mcl_mobitems:string" }, - { "mcl_mobitems:string", "mcl_mobitems:string" }, - }, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "group:wool", - burntime = 5, -}) -minetest.register_craft({ - type = "fuel", - recipe = "group:carpet", - -- Original value: 3.35 - burntime = 3, -}) diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr deleted file mode 100644 index 9f67a52fb1..0000000000 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool=Wolle -Carpet=Teppich -White Wool=Weiße Wolle -White Carpet=Weißer Teppich -Grey Wool=Graue Wolle -Grey Carpet=Grauer Teppich -Light Grey Wool=Hellgraue Wolle -Light Grey Carpet=Hellgrauer Teppich -Black Wool=Schwarze Wolle -Black Carpet=Schwarzer Teppich -Red Wool=Rote Wolle -Red Carpet=Roter Teppich -Yellow Wool=Gelbe Wolle -Yellow Carpet=Gelber Teppich -Green Wool=Grüne Wolle -Green Carpet=Grüner Teppich -Cyan Wool=Türkise Wolle -Cyan Carpet=Türkiser Teppich -Blue Wool=Blaue Wolle -Blue Carpet=Blauer Teppich -Magenta Wool=Magenta Wolle -Magenta Carpet=Magenta Teppich -Orange Wool=Orange Wolle -Orange Carpet=Oranger Teppich -Purple Wool=Violette Wolle -Purple Carpet=Violetter Teppich -Brown Wool=Braune Wolle -Brown Carpet=Brauner Teppich -Pink Wool=Rosa Wolle -Pink Carpet=Rosa Teppich -Lime Wool=Lindgrüne Wolle -Lime Carpet=Lindgrüner Teppich -Light Blue Wool=Hellblaue Wolle -Light Blue Carpet=Hellblauer Teppich -Wool is a decorative block which comes in many different colors.=Wolle ist ein dekorativer Block, den es in vielen verschiedenen Farben gibt. -Carpets are thin floor covers which come in many different colors.=Teppiche sind dünne Bodenbeläge, die es in vielen verschiedenen Farben gibt. diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.es.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.es.tr deleted file mode 100644 index fa9253eed7..0000000000 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.es.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool=Lana -Carpet=Alfombra -White Wool=Lana blanca -White Carpet=Alfombra blanca -Grey Wool=Lana gris -Grey Carpet=Alfombra gris -Light Grey Wool=Lana gris claro -Light Grey Carpet=Alfombra gris claro -Black Wool=Lana negra -Black Carpet=Alfombra negra -Red Wool=Lana roja -Red Carpet=Alfombra roja -Yellow Wool=Lana amarilla -Yellow Carpet=Alfombra amarilla -Green Wool=Lana verde -Green Carpet=Alfombra verde -Cyan Wool=Lana cian -Cyan Carpet=Alfombra cian -Blue Wool=Lana azul -Blue Carpet=Alfombra azul -Magenta Wool=Lana magenta -Magenta Carpet=Alfombra magenta -Orange Wool=Lana naranja -Orange Carpet=Alfombra naranja -Purple Wool=Lana morada -Purple Carpet=Alfombra morada -Brown Wool=Lana marrón -Brown Carpet=Alfombra marrón -Pink Wool=Lana rosa -Pink Carpet=Alfombra rosa -Lime Wool=Lana verde lima -Lime Carpet=Alfombra verde lima -Light Blue Wool=Lana azul claro -Light Blue Carpet=Alfombra azul claro -Wool is a decorative block which comes in many different colors.=WLa lana es un bloque decorativo que viene en muchos colores diferentes. -Carpets are thin floor covers which come in many different colors.=Las alfombras son finas cubiertas para el suelo que vienen en muchos colores diferentes. diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.fr.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.fr.tr deleted file mode 100644 index 6b93eab08e..0000000000 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.fr.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool=Laine -Carpet=Tapis -White Wool=Laine Blanche -White Carpet=Tapis Blanc -Grey Wool=Laine Grise -Grey Carpet=Tapis Gris -Light Grey Wool=Laine Gris Clair -Light Grey Carpet=Tapis Gris Clair -Black Wool=Laine Noire -Black Carpet=Tapis Noir -Red Wool=Laine Rouge -Red Carpet=Tapis Rouge -Yellow Wool=Laine Jaune -Yellow Carpet=Tapis Jaune -Green Wool=Laine Verte -Green Carpet=Tapis Vert -Cyan Wool=Lain Cyan -Cyan Carpet=Tapis Cyan -Blue Wool=Laine Bleue -Blue Carpet=Tapis Bleu -Magenta Wool=Laine Magenta -Magenta Carpet=Tapis Magenta -Orange Wool=Laine Orange -Orange Carpet=Tapis Orange -Purple Wool=Laine Violette -Purple Carpet=Tapis Violet -Brown Wool=Laine Marron -Brown Carpet=Tapis Marron -Pink Wool=Laine Rose -Pink Carpet=Tapis Rose -Lime Wool=Laine Vert Clair -Lime Carpet=Tapis Vert Clair -Light Blue Wool=Laine Bleu Clair -Light Blue Carpet=Tapis Bleu Clair -Wool is a decorative block which comes in many different colors.=La laine est un bloc décoratif disponible en différentes couleurs. -Carpets are thin floor covers which come in many different colors.=Les tapis sont des revêtements de sol minces qui viennent dans de nombreuses couleurs différentes. diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr deleted file mode 100644 index ac92171d1a..0000000000 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool=Wełna -Carpet=Dywan -White Wool=Biała wełna -White Carpet=Biały dywan -Grey Wool=Szara wełna -Grey Carpet=Szary dywan -Light Grey Wool=Jasnoszara wełna -Light Grey Carpet=Jasnoszary dywan -Black Wool=Czarna wełna -Black Carpet=Czarny dywan -Red Wool=Czerwona wełna -Red Carpet=Czerwony dywan -Yellow Wool=Żółta wełna -Yellow Carpet=Żółty dywan -Green Wool=Zielona wełna -Green Carpet=Zielony dywan -Cyan Wool=Błękitna wełna -Cyan Carpet=Błękitny dywan -Blue Wool=Niebieska wełna -Blue Carpet=Niebieski dywan -Magenta Wool=Karmazynowa wełna -Magenta Carpet=Karmazynowy dywan -Orange Wool=Pomarańczowa wełna -Orange Carpet=Pomarańczowy dywan -Purple Wool=Fioletowa wełna -Purple Carpet=Fioletowy dywan -Brown Wool=Brązowa wełna -Brown Carpet=Brązowy dywan -Pink Wool=Różowa wełna -Pink Carpet=Różowy dywan -Lime Wool=Jasnozielona wełna -Lime Carpet=Jasnozielony dywan -Light Blue Wool=Jasnoniebieska wełna -Light Blue Carpet=Jasnoniebieski dywan -Wool is a decorative block which comes in many different colors.=Wełna jest blokiem dekoracyjnym, który może mieć wiele różnych kolorów. -Carpets are thin floor covers which come in many different colors.=Dywany są cienkimi pokrywami na podłogi, które mogą mieć wiele różnych kolorów. diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.ru.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.ru.tr deleted file mode 100644 index 6b05812a23..0000000000 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.ru.tr +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool=Шерсть -Carpet=Ковёр -White Wool=Белая шерсть -White Carpet=Белый ковёр -Grey Wool=Серая шерсть -Grey Carpet=Серый ковёр -Light Grey Wool=Светло-серая шерсть -Light Grey Carpet=Светло-серый ковёр -Black Wool=Чёрная шерсть -Black Carpet=Чёрный ковёр -Red Wool=Красная шерсть -Red Carpet=Красный ковёр -Yellow Wool=Жёлтая шерсть -Yellow Carpet=Жёлтый ковёр -Green Wool=Зелёная шерсть -Green Carpet=Зелёный ковёр -Cyan Wool=Голубая шерсть -Cyan Carpet=Голубой ковёр -Blue Wool=Синяя шерсть -Blue Carpet=Синий ковёр -Magenta Wool=Фиолетовая шерсть -Magenta Carpet=Фиолетовый ковёр -Orange Wool=Оранжевая шерсть -Orange Carpet=Оранжевый ковёр -Purple Wool=Пурпурная шерсть -Purple Carpet=Пурпурный ковёр -Brown Wool=Коричневая шерсть -Brown Carpet=Коричневый ковёр -Pink Wool=Розовая шерсть -Pink Carpet=Розовый ковёр -Lime Wool=Зелёная лаймовая шерсть -Lime Carpet=Зелёный лаймовый ковёр -Light Blue Wool=Светло-голубая шерсть -Light Blue Carpet=Светло-голубой ковёр -Wool is a decorative block which comes in many different colors.=Шерсть это декоративный блок, который может быть разных цветов. -Carpets are thin floor covers which come in many different colors.=Ковры это тонкие напольные покрытия, которые бывают разных цветов. diff --git a/mods/ITEMS/mcl_wool/locale/template.txt b/mods/ITEMS/mcl_wool/locale/template.txt deleted file mode 100644 index 26de1ec7a2..0000000000 --- a/mods/ITEMS/mcl_wool/locale/template.txt +++ /dev/null @@ -1,37 +0,0 @@ -# textdomain: mcl_wool -Wool= -Carpet= -White Wool= -White Carpet= -Grey Wool= -Grey Carpet= -Light Grey Wool= -Light Grey Carpet= -Black Wool= -Black Carpet= -Red Wool= -Red Carpet= -Yellow Wool= -Yellow Carpet= -Green Wool= -Green Carpet= -Cyan Wool= -Cyan Carpet= -Blue Wool= -Blue Carpet= -Magenta Wool= -Magenta Carpet= -Orange Wool= -Orange Carpet= -Purple Wool= -Purple Carpet= -Brown Wool= -Brown Carpet= -Pink Wool= -Pink Carpet= -Lime Wool= -Lime Carpet= -Light Blue Wool= -Light Blue Carpet= -Wool is a decorative block which comes in many different colors.= -Carpets are thin floor covers which come in many different colors.= diff --git a/mods/ITEMS/mcl_wool/mod.conf b/mods/ITEMS/mcl_wool/mod.conf deleted file mode 100644 index b7e9a4dab8..0000000000 --- a/mods/ITEMS/mcl_wool/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mcl_wool -depends = mcl_sounds -optional_depends = doc diff --git a/mods/ITEMS/mcl_wool/textures/mcl_wool_light_blue.png b/mods/ITEMS/mcl_wool/textures/mcl_wool_light_blue.png deleted file mode 100644 index 3d37d909e8..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/mcl_wool_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/mcl_wool_lime.png b/mods/ITEMS/mcl_wool/textures/mcl_wool_lime.png deleted file mode 100644 index 6d57a55d46..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/mcl_wool_lime.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_black.png b/mods/ITEMS/mcl_wool/textures/wool_black.png deleted file mode 100644 index 88d2b587e2..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_black.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_blue.png b/mods/ITEMS/mcl_wool/textures/wool_blue.png deleted file mode 100644 index d8f687f887..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_blue.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_brown.png b/mods/ITEMS/mcl_wool/textures/wool_brown.png deleted file mode 100644 index 04cf6eb837..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_brown.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_cyan.png b/mods/ITEMS/mcl_wool/textures/wool_cyan.png deleted file mode 100644 index d4e48d6ad9..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_cyan.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_dark_green.png b/mods/ITEMS/mcl_wool/textures/wool_dark_green.png deleted file mode 100644 index 9e3c29f2e1..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_dark_green.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_dark_grey.png b/mods/ITEMS/mcl_wool/textures/wool_dark_grey.png deleted file mode 100644 index e2af0870c7..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_dark_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_grey.png b/mods/ITEMS/mcl_wool/textures/wool_grey.png deleted file mode 100644 index 69273bfe09..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_grey.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_magenta.png b/mods/ITEMS/mcl_wool/textures/wool_magenta.png deleted file mode 100644 index 6f727a9730..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_magenta.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_orange.png b/mods/ITEMS/mcl_wool/textures/wool_orange.png deleted file mode 100644 index 45e0059f68..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_orange.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_pink.png b/mods/ITEMS/mcl_wool/textures/wool_pink.png deleted file mode 100644 index bd6ae334bb..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_pink.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_red.png b/mods/ITEMS/mcl_wool/textures/wool_red.png deleted file mode 100644 index 4c84133a15..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_red.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_violet.png b/mods/ITEMS/mcl_wool/textures/wool_violet.png deleted file mode 100644 index 12fb3ebb7d..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_violet.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_white.png b/mods/ITEMS/mcl_wool/textures/wool_white.png deleted file mode 100644 index 794cbb15f5..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_white.png and /dev/null differ diff --git a/mods/ITEMS/mcl_wool/textures/wool_yellow.png b/mods/ITEMS/mcl_wool/textures/wool_yellow.png deleted file mode 100644 index f736967fe8..0000000000 Binary files a/mods/ITEMS/mcl_wool/textures/wool_yellow.png and /dev/null differ diff --git a/mods/ITEMS/mclx_core/init.lua b/mods/ITEMS/mclx_core/init.lua deleted file mode 100644 index 4bb40184a8..0000000000 --- a/mods/ITEMS/mclx_core/init.lua +++ /dev/null @@ -1,54 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Liquids: River Water - -local source = table.copy(minetest.registered_nodes["mcl_core:water_source"]) -source.description = S("River Water Source") -source.liquid_range = 2 -source.liquid_alternative_flowing = "mclx_core:river_water_flowing" -source.liquid_alternative_source = "mclx_core:river_water_source" -source.liquid_renewable = false -source._doc_items_longdesc = S("River water has the same properties as water, but has a reduced flowing distance and is not renewable.") -source._doc_items_entry_name = S("River Water") --- Auto-expose entry only in valleys mapgen -source._doc_items_hidden = minetest.get_mapgen_setting("mg_name") ~= "valleys" -source.post_effect_color = {a=192, r=0x2c, g=0x88, b=0x8c} -source.tiles = { - {name="default_river_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}} -} -source.special_tiles = { - -- New-style water source material (mostly unused) - { - name="default_river_water_source_animated.png", - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}, - backface_culling = false, - } -} - -local flowing = table.copy(minetest.registered_nodes["mcl_core:water_flowing"]) -flowing.description = S("Flowing River Water") -flowing.liquid_range = 2 -flowing.liquid_alternative_flowing = "mclx_core:river_water_flowing" -flowing.liquid_alternative_source = "mclx_core:river_water_source" -flowing.liquid_renewable = false -flowing.tiles = {"default_river_water_flowing_animated.png^[verticalframe:64:0"} -flowing.post_effect_color = {a=192, r=0x2c, g=0x88, b=0x8c} -flowing.special_tiles = { - { - image="default_river_water_flowing_animated.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=4.0} - }, - { - image="default_river_water_flowing_animated.png", - backface_culling=false, - animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=4.0} - }, -} - -minetest.register_node("mclx_core:river_water_source", source) -minetest.register_node("mclx_core:river_water_flowing", flowing) - -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mclx_core:river_water_source", "nodes", "mclx_core:river_water_flowing") -end diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.de.tr b/mods/ITEMS/mclx_core/locale/mclx_core.de.tr deleted file mode 100644 index f4591810cf..0000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.de.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=Flusswasserquelle -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=Flusswasser hat die gleichen Eigenschaften wie Wasser, aber es hat eine reduzierte Fließweite und ist nicht erneuerbar. -River Water=Flusswasser -Flowing River Water=Fließendes Flusswasser diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.es.tr b/mods/ITEMS/mclx_core/locale/mclx_core.es.tr deleted file mode 100644 index 0f50a08cb2..0000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.es.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=Fuente de agua de río -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=El agua del río tiene las mismas propiedades que el agua, pero tiene una distancia de flujo reducida y no es renovable. -River Water=Agua de rio -Flowing River Water=Agua de río que fluye diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.fr.tr b/mods/ITEMS/mclx_core/locale/mclx_core.fr.tr deleted file mode 100644 index eaabebecf3..0000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.fr.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=Source d'eau de rivière -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=L'eau de rivière a les mêmes propriétés que l'eau, mais a une distance d'écoulement réduite et n'est pas renouvelable. -River Water=L'eau de rivière -Flowing River Water=Eau de rivière qui coule diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.pl.tr b/mods/ITEMS/mclx_core/locale/mclx_core.pl.tr deleted file mode 100644 index 757507065e..0000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.pl.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=Źródło wody rzecznej -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=Woda rzeczna ma takie same własności jak woda, ale ma zmniejszony zasięg płynięcia i nie jest odnawialna. -River Water=Woda rzeczna -Flowing River Water=Płynąca woda rzeczna diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.ru.tr b/mods/ITEMS/mclx_core/locale/mclx_core.ru.tr deleted file mode 100644 index 1f3155b586..0000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.ru.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=Источник речной воды -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=Речная вода имеет все свойства простой воды, но течёт не так далеко и не возобновляется. -River Water=Речная вода -Flowing River Water=Текущая речная вода diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.zh_TW.tr b/mods/ITEMS/mclx_core/locale/mclx_core.zh_TW.tr deleted file mode 100644 index 649fc353df..0000000000 --- a/mods/ITEMS/mclx_core/locale/mclx_core.zh_TW.tr +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source=河水源頭 -River water has the same properties as water, but has a reduced flowing distance and is not renewable.=河水具有與水相同的特性,但流動距離較短,且不可再生。 -River Water=河水 -Flowing River Water=流動的河水 diff --git a/mods/ITEMS/mclx_core/locale/template.txt b/mods/ITEMS/mclx_core/locale/template.txt deleted file mode 100644 index 1486ee3010..0000000000 --- a/mods/ITEMS/mclx_core/locale/template.txt +++ /dev/null @@ -1,5 +0,0 @@ -# textdomain: mclx_core -River Water Source= -River water has the same properties as water, but has a reduced flowing distance and is not renewable.= -River Water= -Flowing River Water= diff --git a/mods/ITEMS/mclx_core/mod.conf b/mods/ITEMS/mclx_core/mod.conf deleted file mode 100644 index 62e8d5fb33..0000000000 --- a/mods/ITEMS/mclx_core/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = mclx_core -description = Core items not found in Minecraft -depends = mcl_core -optional_depends = doc diff --git a/mods/ITEMS/mclx_core/textures/default_river_water_flowing_animated.png b/mods/ITEMS/mclx_core/textures/default_river_water_flowing_animated.png deleted file mode 100644 index 9e126d3c1f..0000000000 Binary files a/mods/ITEMS/mclx_core/textures/default_river_water_flowing_animated.png and /dev/null differ diff --git a/mods/ITEMS/mclx_core/textures/default_river_water_source_animated.png b/mods/ITEMS/mclx_core/textures/default_river_water_source_animated.png deleted file mode 100644 index fb8ae17bd7..0000000000 Binary files a/mods/ITEMS/mclx_core/textures/default_river_water_source_animated.png and /dev/null differ diff --git a/mods/ITEMS/mclx_fences/README.txt b/mods/ITEMS/mclx_fences/README.txt deleted file mode 100644 index 784e8b6c51..0000000000 --- a/mods/ITEMS/mclx_fences/README.txt +++ /dev/null @@ -1,18 +0,0 @@ -## Extra fences -This mod adds a few extra fences to MCL2. - -## Licensing -The sound files - - mcl_fences_nether_brick_fence_gate_open.ogg - -and - - mcl_fences_nether_brick_fence_gate_close.ogg - -were derived from sounds made by Freesound.org user Slanesh. -The license is CC BY 3.0 . - -Source: - -Everything else is under the MIT License. diff --git a/mods/ITEMS/mclx_fences/init.lua b/mods/ITEMS/mclx_fences/init.lua deleted file mode 100644 index e78c7ef7f4..0000000000 --- a/mods/ITEMS/mclx_fences/init.lua +++ /dev/null @@ -1,66 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - --- Red Nether Brick Fence - -mcl_fences.register_fence_and_fence_gate( - "red_nether_brick_fence", - S("Red Nether Brick Fence"), S("Red Nether Brick Fence Gate"), - "mcl_fences_fence_red_nether_brick.png", - {pickaxey=1, deco_block=1, fence_nether_brick=1}, - minetest.registered_nodes["mcl_nether:red_nether_brick"]._mcl_hardness, - minetest.registered_nodes["mcl_nether:red_nether_brick"]._mcl_blast_resistance, - {"group:fence_nether_brick"}, - mcl_sounds.node_sound_stone_defaults(), "mcl_fences_nether_brick_fence_gate_open", "mcl_fences_nether_brick_fence_gate_close", 1, 1, - "mcl_fences_fence_gate_red_nether_brick.png") - -mcl_fences.register_fence_gate( - "nether_brick_fence", - S("Nether Brick Fence Gate"), - "mcl_fences_fence_gate_nether_brick.png", - {pickaxey=1, deco_block=1, fence_nether_brick=1}, - minetest.registered_nodes["mcl_nether:nether_brick"]._mcl_hardness, - minetest.registered_nodes["mcl_nether:nether_brick"]._mcl_blast_resistance, - mcl_sounds.node_sound_stone_defaults(), "mcl_fences_nether_brick_fence_gate_open", "mcl_fences_nether_brick_fence_gate_close", 1, 1) - --- Crafting - -minetest.register_craft({ - output = "mclx_fences:red_nether_brick_fence 6", - recipe = { - {"mcl_nether:red_nether_brick", "mcl_nether:netherbrick", "mcl_nether:red_nether_brick"}, - {"mcl_nether:red_nether_brick", "mcl_nether:netherbrick", "mcl_nether:red_nether_brick"}, - } -}) - -minetest.register_craft({ - output = "mclx_fences:red_nether_brick_fence_gate", - recipe = { - {"mcl_nether:nether_wart_item", "mcl_nether:red_nether_brick", "mcl_nether:netherbrick"}, - {"mcl_nether:netherbrick", "mcl_nether:red_nether_brick", "mcl_nether:nether_wart_item"}, - } -}) -minetest.register_craft({ - output = "mclx_fences:red_nether_brick_fence_gate", - recipe = { - {"mcl_nether:netherbrick", "mcl_nether:red_nether_brick", "mcl_nether:nether_wart_item"}, - {"mcl_nether:nether_wart_item", "mcl_nether:red_nether_brick", "mcl_nether:netherbrick"}, - } -}) - -minetest.register_craft({ - output = "mclx_fences:nether_brick_fence_gate 2", - recipe = { - {"mcl_nether:netherbrick", "mcl_nether:nether_brick", "mcl_nether:netherbrick"}, - {"mcl_nether:netherbrick", "mcl_nether:nether_brick", "mcl_nether:netherbrick"}, - } -}) - - --- Aliases for mcl_supplemental -minetest.register_alias("mcl_supplemental:red_nether_brick_fence", "mclx_fences:red_nether_brick_fence") - -minetest.register_alias("mcl_supplemental:nether_brick_fence_gate", "mclx_fences:nether_brick_fence_gate") -minetest.register_alias("mcl_supplemental:nether_brick_fence_gate_open", "mclx_fences:nether_brick_fence_gate_open") - -minetest.register_alias("mcl_supplemental:red_nether_brick_fence_gate", "mclx_fences:red_nether_brick_fence_gate") -minetest.register_alias("mcl_supplemental:red_nether_brick_fence_gate_open", "mclx_fences:red_nether_brick_fence_gate_open") diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.de.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.de.tr deleted file mode 100644 index 9aab026486..0000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.de.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=Roter Netherziegelzaun -Red Nether Brick Fence Gate=Rotes Netherziegelzauntor -Nether Brick Fence Gate=Netherziegelzauntor diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.es.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.es.tr deleted file mode 100644 index 4531435bf1..0000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.es.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=Valla de ladrillo abisal rojo -Red Nether Brick Fence Gate=Puerta de ladrillo abisal rojo -Nether Brick Fence Gate=Puerta de ladrillo abisal diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.fr.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.fr.tr deleted file mode 100644 index 244b588c18..0000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.fr.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=Barrière en Brique Rouge du Nether -Red Nether Brick Fence Gate=Porte de Barrière en Brique Rouge du Nether -Nether Brick Fence Gate=Porte de Barrière en Brique du Nether diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.pl.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.pl.tr deleted file mode 100644 index ecdd845626..0000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.pl.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=Płot z czerwonej netherowej cegły -Red Nether Brick Fence Gate=Furtka z czerwonej netherowej cegły -Nether Brick Fence Gate=Furtka z netherowej cegły diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.ru.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.ru.tr deleted file mode 100644 index 146fb4dd7c..0000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.ru.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=Забор из красного адского кирпича -Red Nether Brick Fence Gate=Ворота из красного адского кирпича -Nether Brick Fence Gate=Ворота из адского кирпича diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.zh_TW.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.zh_TW.tr deleted file mode 100644 index bf06d72406..0000000000 --- a/mods/ITEMS/mclx_fences/locale/mclx_fences.zh_TW.tr +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence=紅地獄磚柵欄 -Red Nether Brick Fence Gate=紅地獄磚柵欄門 -Nether Brick Fence Gate=地獄磚柵欄門 diff --git a/mods/ITEMS/mclx_fences/locale/template.txt b/mods/ITEMS/mclx_fences/locale/template.txt deleted file mode 100644 index e6c05c7f7c..0000000000 --- a/mods/ITEMS/mclx_fences/locale/template.txt +++ /dev/null @@ -1,4 +0,0 @@ -# textdomain: mclx_fences -Red Nether Brick Fence= -Red Nether Brick Fence Gate= -Nether Brick Fence Gate= diff --git a/mods/ITEMS/mclx_fences/mod.conf b/mods/ITEMS/mclx_fences/mod.conf deleted file mode 100644 index a4795159d4..0000000000 --- a/mods/ITEMS/mclx_fences/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = mclx_fences -description = Additional fences and fence gates -depends = mcl_fences diff --git a/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_close.ogg b/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_close.ogg deleted file mode 100644 index 4e7b3fe7f1..0000000000 Binary files a/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_close.ogg and /dev/null differ diff --git a/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_open.ogg b/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_open.ogg deleted file mode 100644 index 4c2108e6b3..0000000000 Binary files a/mods/ITEMS/mclx_fences/sounds/mcl_fences_nether_brick_fence_gate_open.ogg and /dev/null differ diff --git a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_nether_brick.png b/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_nether_brick.png deleted file mode 100644 index 58bc85dbef..0000000000 Binary files a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_red_nether_brick.png b/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_red_nether_brick.png deleted file mode 100644 index 2436408bd4..0000000000 Binary files a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_gate_red_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_red_nether_brick.png b/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_red_nether_brick.png deleted file mode 100644 index ee75018187..0000000000 Binary files a/mods/ITEMS/mclx_fences/textures/mcl_fences_fence_red_nether_brick.png and /dev/null differ diff --git a/mods/ITEMS/screwdriver/API.md b/mods/ITEMS/screwdriver/API.md deleted file mode 100644 index 0c17ee6831..0000000000 --- a/mods/ITEMS/screwdriver/API.md +++ /dev/null @@ -1,28 +0,0 @@ -Screwdriver API ---------------- - -The screwdriver API allows you to control a node's behaviour when a screwdriver is used on it. -NOTE: This API is compatible with Minetest Game 5.1.0, but has some extensions. - -To use it, add the `on_rotate` function to the node definition. - -`on_rotate(pos, node, user, mode, new_param2)` - - * `pos`: Position of the node that the screwdriver is being used on - * `node`: that node - * `user`: The player who used the screwdriver - * `mode`: `screwdriver.ROTATE_FACE` or `screwdriver.ROTATE_AXIS` - * `new_param2` the new value of `param2` that would have been set if `on_rotate` wasn't there - * return value: false to disallow rotation, nil to keep default behaviour, true to allow - it but to indicate that changed have already been made (so the screwdriver will wear out) - * use `on_rotate = false` to always disallow rotation - * use `on_rotate = screwdriver.rotate_simple` to allow only face rotation - * use `on_rotate = screwdriver.rotate_3way` (MineClone 2 extension) for pillar-like nodes that should only have 3 possible orientations) - - - -`after_rotate(pos)` (MineClone 2 extension) - -Called after the rotation has been completed - - * `pos`: Position of the node that the screwdriver was used on diff --git a/mods/ITEMS/screwdriver/README.md b/mods/ITEMS/screwdriver/README.md deleted file mode 100644 index 7237c84710..0000000000 --- a/mods/ITEMS/screwdriver/README.md +++ /dev/null @@ -1,13 +0,0 @@ -MineClone 2 mod: screwdriver -============================ -See license.txt for license information. - -License of source code ----------------------- -Originally by RealBadAngel, Maciej Kasatkin (LGPL 2.1) -Various Minetest developers and contributors (LGPL 2.1) - -License of media (textures) ---------------------------- -Created by Wuzzy (CC0): -* `screwdriver.png` diff --git a/mods/ITEMS/screwdriver/init.lua b/mods/ITEMS/screwdriver/init.lua deleted file mode 100644 index baa4ff9c57..0000000000 --- a/mods/ITEMS/screwdriver/init.lua +++ /dev/null @@ -1,205 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) - -screwdriver = {} - -screwdriver.ROTATE_FACE = 1 -screwdriver.ROTATE_AXIS = 2 - -function screwdriver.disallow(pos, node, user, mode, new_param2) - return false -end - -function screwdriver.rotate_simple(pos, node, user, mode, new_param2) - if mode ~= screwdriver.ROTATE_FACE then - return false - end -end - -function screwdriver.rotate_3way(pos, node, user, mode, new_param2) - if mode == screwdriver.ROTATE_AXIS then - if node.param2 == 0 then - node.param2 = 6 - elseif node.param2 == 6 then - node.param2 = 12 - else - node.param2 = 0 - end - minetest.swap_node(pos, node) - return true - elseif mode == screwdriver.ROTATE_FACE then - if node.param2 == 6 then - node.param2 = 12 - minetest.swap_node(pos, node) - return true - else - node.param2 = 6 - minetest.swap_node(pos, node) - return true - end - end - return false -end - --- For attached wallmounted nodes: returns true if rotation is valid --- simplified version of minetest:builtin/game/falling.lua#L148. -local function check_attached_node(pos, rotation) - local d = minetest.wallmounted_to_dir(rotation) - local p2 = vector.add(pos, d) - local n = minetest.get_node(p2).name - local def2 = minetest.registered_nodes[n] - if def2 and not def2.walkable then - return false - end - return true -end - -screwdriver.rotate = {} - -local facedir_tbl = { - [screwdriver.ROTATE_FACE] = { - [0] = 1, [1] = 2, [2] = 3, [3] = 0, - [4] = 5, [5] = 6, [6] = 7, [7] = 4, - [8] = 9, [9] = 10, [10] = 11, [11] = 8, - [12] = 13, [13] = 14, [14] = 15, [15] = 12, - [16] = 17, [17] = 18, [18] = 19, [19] = 16, - [20] = 21, [21] = 22, [22] = 23, [23] = 20, - }, - [screwdriver.ROTATE_AXIS] = { - [0] = 4, [1] = 4, [2] = 4, [3] = 4, - [4] = 8, [5] = 8, [6] = 8, [7] = 8, - [8] = 12, [9] = 12, [10] = 12, [11] = 12, - [12] = 16, [13] = 16, [14] = 16, [15] = 16, - [16] = 20, [17] = 20, [18] = 20, [19] = 20, - [20] = 0, [21] = 0, [22] = 0, [23] = 0, - }, -} - -function screwdriver.rotate.facedir(pos, node, mode) - local rotation = node.param2 % 32 -- get first 5 bits - local other = node.param2 - rotation - rotation = facedir_tbl[mode][rotation] or 0 - return rotation + other -end - -screwdriver.rotate.colorfacedir = screwdriver.rotate.facedir - -local wallmounted_tbl = { - [screwdriver.ROTATE_FACE] = {[2] = 5, [3] = 4, [4] = 2, [5] = 3, [1] = 0, [0] = 1}, - [screwdriver.ROTATE_AXIS] = {[2] = 5, [3] = 4, [4] = 2, [5] = 1, [1] = 0, [0] = 3}, -} - -function screwdriver.rotate.wallmounted(pos, node, mode) - local rotation = node.param2 % 8 -- get first 3 bits - local other = node.param2 - rotation - rotation = wallmounted_tbl[mode][rotation] or 0 - if minetest.get_item_group(node.name, "attached_node") ~= 0 then - -- find an acceptable orientation - for i = 1, 5 do - if not check_attached_node(pos, rotation) then - rotation = wallmounted_tbl[mode][rotation] or 0 - else - break - end - end - end - return rotation + other -end - -screwdriver.rotate.colorwallmounted = screwdriver.rotate.wallmounted - --- Handles rotation -function screwdriver.handler(itemstack, user, pointed_thing, mode, uses) - if pointed_thing.type ~= "node" then - return - end - - local pos = pointed_thing.under - local player_name = user and user:get_player_name() or "" - - if minetest.is_protected(pos, player_name) then - minetest.record_protection_violation(pos, player_name) - return - end - - local node = minetest.get_node(pos) - local ndef = minetest.registered_nodes[node.name] - if not ndef then - return itemstack - end - -- can we rotate this paramtype2? - local fn = screwdriver.rotate[ndef.paramtype2] - if not fn and not ndef.on_rotate then - return itemstack - end - - local should_rotate = true - local new_param2 - if fn then - new_param2 = fn(pos, node, mode) - else - new_param2 = node.param2 - end - - -- Node provides a handler, so let the handler decide instead if the node can be rotated - if ndef.on_rotate then - -- Copy pos and node because callback can modify it - local result = ndef.on_rotate(vector.new(pos), - {name = node.name, param1 = node.param1, param2 = node.param2}, - user, mode, new_param2) - if result == false then -- Disallow rotation - return itemstack - elseif result == true then - should_rotate = false - end - elseif ndef.on_rotate == false then - return itemstack - elseif ndef.can_dig and not ndef.can_dig(pos, user) then - return itemstack - end - - if should_rotate and new_param2 ~= node.param2 then - node.param2 = new_param2 - minetest.swap_node(pos, node) - minetest.check_for_falling(pos) - if ndef.after_rotate then - ndef.after_rotate(vector.new(pos)) - end - end - - if not (minetest.is_creative_enabled(user:get_player_name())) then - itemstack:add_wear(65535 / ((uses or 200) - 1)) - end - - return itemstack -end - --- Screwdriver -minetest.register_tool("screwdriver:screwdriver", { - description = S("Screwdriver"), - inventory_image = "screwdriver.png", - wield_image = "screwdriver.png^[transformFX", - groups = { tool = 1, not_in_creative_inventory = 1 }, - on_use = function(itemstack, user, pointed_thing) - screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, 200) - return itemstack - end, - on_place = function(itemstack, user, pointed_thing) - screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, 200) - return itemstack - end, -}) - -mcl_wip.register_wip_item("screwdriver:screwdriver") - -minetest.register_craft({ - output = "screwdriver:screwdriver", - recipe = { - {"mcl_core:iron_ingot"}, - {"mcl_core:stick"} - } -}) - -minetest.register_alias("screwdriver:screwdriver1", "screwdriver:screwdriver") -minetest.register_alias("screwdriver:screwdriver2", "screwdriver:screwdriver") -minetest.register_alias("screwdriver:screwdriver3", "screwdriver:screwdriver") -minetest.register_alias("screwdriver:screwdriver4", "screwdriver:screwdriver") diff --git a/mods/ITEMS/screwdriver/license.txt b/mods/ITEMS/screwdriver/license.txt deleted file mode 100644 index d9b721bb90..0000000000 --- a/mods/ITEMS/screwdriver/license.txt +++ /dev/null @@ -1,50 +0,0 @@ -License of source code ----------------------- - -GNU Lesser General Public License, version 2.1 -Copyright (C) 2013-2016 RealBadAngel, Maciej Kasatkin -Copyright (C) 2013-2016 Various Minetest developers and contributors - -This program is free software; you can redistribute it and/or modify it under the terms -of the GNU Lesser General Public License as published by the Free Software Foundation; -either version 2.1 of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -See the GNU Lesser General Public License for more details: -https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - - -Licenses of media (textures) ----------------------------- - -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -Copyright (C) 2013-2016 Gambit - -You are free to: -Share — copy and redistribute the material in any medium or format. -Adapt — remix, transform, and build upon the material for any purpose, even commercially. -The licensor cannot revoke these freedoms as long as you follow the license terms. - -Under the following terms: - -Attribution — You must give appropriate credit, provide a link to the license, and -indicate if changes were made. You may do so in any reasonable manner, but not in any way -that suggests the licensor endorses you or your use. - -ShareAlike — If you remix, transform, or build upon the material, you must distribute -your contributions under the same license as the original. - -No additional restrictions — You may not apply legal terms or technological measures that -legally restrict others from doing anything the license permits. - -Notices: - -You do not have to comply with the license for elements of the material in the public -domain or where your use is permitted by an applicable exception or limitation. -No warranties are given. The license may not give you all of the permissions necessary -for your intended use. For example, other rights such as publicity, privacy, or moral -rights may limit how you use the material. - -For more details: -http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.de.tr b/mods/ITEMS/screwdriver/locale/screwdriver.de.tr deleted file mode 100644 index eaf44b0d6e..0000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.de.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: screwdriver -Screwdriver=Schraubenzieher diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.es.tr b/mods/ITEMS/screwdriver/locale/screwdriver.es.tr deleted file mode 100644 index f2c778cee1..0000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.es.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain: screwdriver -Screwdriver=Destornillador diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.fr.tr b/mods/ITEMS/screwdriver/locale/screwdriver.fr.tr deleted file mode 100644 index ae014ea099..0000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.fr.tr +++ /dev/null @@ -1,2 +0,0 @@ -#textdomain: screwdriver -Screwdriver=Tournevis diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.pl.tr b/mods/ITEMS/screwdriver/locale/screwdriver.pl.tr deleted file mode 100644 index b9adac1352..0000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.pl.tr +++ /dev/null @@ -1,2 +0,0 @@ -#textdomain: screwdriver -Screwdriver=Śrubokręt diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.ru.tr b/mods/ITEMS/screwdriver/locale/screwdriver.ru.tr deleted file mode 100644 index fb6321684a..0000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.ru.tr +++ /dev/null @@ -1,2 +0,0 @@ -#textdomain: screwdriver -Screwdriver=Отвёртка diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.zh_TW.tr b/mods/ITEMS/screwdriver/locale/screwdriver.zh_TW.tr deleted file mode 100644 index f29a4bf330..0000000000 --- a/mods/ITEMS/screwdriver/locale/screwdriver.zh_TW.tr +++ /dev/null @@ -1,2 +0,0 @@ -#textdomain: screwdriver -Screwdriver=螺絲刀 diff --git a/mods/ITEMS/screwdriver/locale/template.txt b/mods/ITEMS/screwdriver/locale/template.txt deleted file mode 100644 index b3871a116c..0000000000 --- a/mods/ITEMS/screwdriver/locale/template.txt +++ /dev/null @@ -1,2 +0,0 @@ -#textdomain: screwdriver -Screwdriver= diff --git a/mods/ITEMS/screwdriver/mod.conf b/mods/ITEMS/screwdriver/mod.conf deleted file mode 100644 index a18279839d..0000000000 --- a/mods/ITEMS/screwdriver/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = screwdriver -depends = mcl_wip \ No newline at end of file diff --git a/mods/ITEMS/screwdriver/textures/screwdriver.png b/mods/ITEMS/screwdriver/textures/screwdriver.png deleted file mode 100644 index 27d13db8c6..0000000000 Binary files a/mods/ITEMS/screwdriver/textures/screwdriver.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/init.lua b/mods/ITEMS/xpanes/init.lua deleted file mode 100644 index fe67934a18..0000000000 --- a/mods/ITEMS/xpanes/init.lua +++ /dev/null @@ -1,254 +0,0 @@ -local S = minetest.get_translator(minetest.get_current_modname()) -local mod_doc = minetest.get_modpath("doc") - -local function is_pane(pos) - return minetest.get_item_group(minetest.get_node(pos).name, "pane") > 0 -end - -local function connects_dir(pos, name, dir) - local aside = vector.add(pos, minetest.facedir_to_dir(dir)) - if is_pane(aside) then - return true - end - - local connects_to = minetest.registered_nodes[name].connects_to - if not connects_to then - return false - end - local list = minetest.find_nodes_in_area(aside, aside, connects_to) - - if #list > 0 then - return true - end - - return false -end - -local function swap(pos, node, name, param2) - if node.name == name and node.param2 == param2 then - return - end - - minetest.set_node(pos, {name = name, param2 = param2}) -end - -local function update_pane(pos) - if not is_pane(pos) then - return - end - local node = minetest.get_node(pos) - local name = node.name - if name:sub(-5) == "_flat" then - name = name:sub(1, -6) - end - - local any = node.param2 - local c = {} - local count = 0 - for dir = 0, 3 do - c[dir] = connects_dir(pos, name, dir) - if c[dir] then - any = dir - count = count + 1 - end - end - - if count == 0 then - swap(pos, node, name .. "_flat", any) - elseif count == 1 then - swap(pos, node, name .. "_flat", (any + 1) % 4) - elseif count == 2 then - if (c[0] and c[2]) or (c[1] and c[3]) then - swap(pos, node, name .. "_flat", (any + 1) % 4) - else - swap(pos, node, name, 0) - end - else - swap(pos, node, name, 0) - end -end - -minetest.register_on_placenode(function(pos, node) - if minetest.get_item_group(node, "pane") then - update_pane(pos) - end - for i = 0, 3 do - local dir = minetest.facedir_to_dir(i) - update_pane(vector.add(pos, dir)) - end -end) - -minetest.register_on_dignode(function(pos) - for i = 0, 3 do - local dir = minetest.facedir_to_dir(i) - update_pane(vector.add(pos, dir)) - end -end) - -xpanes = {} -function xpanes.register_pane(name, def) - for i = 1, 15 do - minetest.register_alias("xpanes:" .. name .. "_" .. i, "xpanes:" .. name .. "_flat") - end - - local flatgroups = table.copy(def.groups) - local drop = def.drop - if not drop then - drop = "xpanes:" .. name .. "_flat" - end - flatgroups.pane = 1 - flatgroups.deco_block = 1 - minetest.register_node(":xpanes:" .. name .. "_flat", { - description = def.description, - _doc_items_create_entry = def._doc_items_create_entry, - _doc_items_entry_name = def._doc_items_entry_name, - _doc_items_longdesc = def._doc_items_longdesc, - _doc_items_usagehelp = def._doc_items_usagehelp, - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - inventory_image = def.inventory_image, - wield_image = def.wield_image, - paramtype2 = "facedir", - tiles = {def.textures[3], def.textures[2], def.textures[1]}, - use_texture_alpha = def.use_texture_alpha, - groups = flatgroups, - drop = drop, - sounds = def.sounds, - node_box = { - type = "fixed", - fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, - }, - selection_box = { - type = "fixed", - fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, - }, - connect_sides = { "left", "right" }, - _mcl_blast_resistance = def._mcl_blast_resistance, - _mcl_hardness = def._mcl_hardness, - _mcl_silk_touch_drop = def._mcl_silk_touch_drop and {"xpanes:" .. name .. "_flat"}, - }) - - local groups = table.copy(def.groups) - groups.pane = 1 - groups.not_in_creative_inventory = 1 - minetest.register_node(":xpanes:" .. name, { - drawtype = "nodebox", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - _doc_items_create_entry = false, - tiles = {def.textures[3], def.textures[2], def.textures[1]}, - use_texture_alpha = def.use_texture_alpha, - groups = groups, - drop = drop, - sounds = def.sounds, - node_box = { - type = "connected", - fixed = {{-1/32, -1/2, -1/32, 1/32, 1/2, 1/32}}, - connect_front = {{-1/32, -1/2, -1/2, 1/32, 1/2, -1/32}}, - connect_left = {{-1/2, -1/2, -1/32, -1/32, 1/2, 1/32}}, - connect_back = {{-1/32, -1/2, 1/32, 1/32, 1/2, 1/2}}, - connect_right = {{1/32, -1/2, -1/32, 1/2, 1/2, 1/32}}, - }, - connects_to = {"group:pane", "group:stone", "group:glass", "group:wood", "group:tree"}, - _mcl_blast_resistance = def._mcl_blast_resistance, - _mcl_hardness = def._mcl_hardness, - _mcl_silk_touch_drop = def._mcl_silk_touch_drop and {"xpanes:" .. name .. "_flat"}, - }) - - minetest.register_craft({ - output = "xpanes:" .. name .. "_flat 16", - recipe = def.recipe - }) - - if mod_doc and def._doc_items_create_entry ~= false then - doc.add_entry_alias("nodes", "xpanes:" .. name .. "_flat", "nodes", "xpanes:" .. name) - end -end - -local canonical_color = "yellow" --- Register glass pane (stained and unstained) -local function pane(description, node, append) - local texture1, longdesc, entry_name, create_entry - local is_canonical = true - -- Special case: Default (unstained) glass texture - if append == "_natural" then - texture1 = "default_glass.png" - longdesc = S("Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.") - else - if append ~= "_"..canonical_color then - is_canonical = false - create_entry = false - else - longdesc = S("Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.") - entry_name = S("Stained Glass Pane") - end - texture1 = "mcl_core_glass"..append..".png" - end - xpanes.register_pane("pane"..append, { - description = description, - _doc_items_create_entry = create_entry, - _doc_items_entry_name = entry_name, - _doc_items_longdesc = longdesc, - textures = {texture1, texture1, "xpanes_top_glass"..append..".png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, - inventory_image = texture1, - wield_image = texture1, - sounds = mcl_sounds.node_sound_glass_defaults(), - groups = {handy=1, material_glass=1}, - recipe = { - {node, node, node}, - {node, node, node}, - }, - drop = "", - _mcl_blast_resistance = 0.3, - _mcl_hardness = 0.3, - _mcl_silk_touch_drop = true, - }) - - if mod_doc and not is_canonical then - doc.add_entry_alias("nodes", "xpanes:pane_".. canonical_color .. "_flat", "nodes", "xpanes:pane"..append) - doc.add_entry_alias("nodes", "xpanes:pane_".. canonical_color .. "_flat", "nodes", "xpanes:pane"..append.."_flat") - end -end - --- Iron Bars -xpanes.register_pane("bar", { - description = S("Iron Bars"), - _doc_items_longdesc = S("Iron bars neatly connect to their neighbors as you build them."), - textures = {"xpanes_pane_iron.png","xpanes_pane_iron.png","xpanes_top_iron.png"}, - inventory_image = "xpanes_pane_iron.png", - wield_image = "xpanes_pane_iron.png", - groups = {pickaxey=1}, - sounds = mcl_sounds.node_sound_metal_defaults(), - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - recipe = { - {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, - }, - _mcl_blast_resistance = 6, - _mcl_hardness = 5, -}) - --- Glass Pane -pane(S("Glass Pane"), "mcl_core:glass", "_natural") -- triggers special case - --- Stained Glass Pane -pane(S("Red Stained Glass Pane"), "mcl_core:glass_red", "_red") -pane(S("Green Stained Glass Pane"), "mcl_core:glass_green", "_green") -pane(S("Blue Stained Glass Pane"), "mcl_core:glass_blue", "_blue") -pane(S("Light Blue Stained Glass Pane"), "mcl_core:glass_light_blue", "_light_blue") -pane(S("Black Stained Glass Pane"), "mcl_core:glass_black", "_black") -pane(S("White Stained Glass Pane"), "mcl_core:glass_white", "_white") -pane(S("Yellow Stained Glass Pane"), "mcl_core:glass_yellow", "_yellow") -pane(S("Brown Stained Glass Pane"), "mcl_core:glass_brown", "_brown") -pane(S("Orange Stained Glass Pane"), "mcl_core:glass_orange", "_orange") -pane(S("Pink Stained Glass Pane"), "mcl_core:glass_pink", "_pink") -pane(S("Grey Stained Glass Pane"), "mcl_core:glass_gray", "_gray") -pane(S("Lime Stained Glass Pane"), "mcl_core:glass_lime", "_lime") -pane(S("Light Grey Stained Glass Pane"), "mcl_core:glass_silver", "_silver") -pane(S("Magenta Stained Glass Pane"), "mcl_core:glass_magenta", "_magenta") -pane(S("Purple Stained Glass Pane"), "mcl_core:glass_purple", "_purple") -pane(S("Cyan Stained Glass Pane"), "mcl_core:glass_cyan", "_cyan") diff --git a/mods/ITEMS/xpanes/locale/template.txt b/mods/ITEMS/xpanes/locale/template.txt deleted file mode 100644 index cae83797b5..0000000000 --- a/mods/ITEMS/xpanes/locale/template.txt +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.= -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.= -Iron Bars= -Iron bars neatly connect to their neighbors as you build them.= -Glass Pane= -Stained Glass Pane= -Red Stained Glass Pane= -Green Stained Glass Pane= -Blue Stained Glass Pane= -Light Blue Stained Glass Pane= -Black Stained Glass Pane= -White Stained Glass Pane= -Yellow Stained Glass Pane= -Brown Stained Glass Pane= -Orange Stained Glass Pane= -Pink Stained Glass Pane= -Grey Stained Glass Pane= -Lime Stained Glass Pane= -Light Grey Stained Glass Pane= -Magenta Stained Glass Pane= -Purple Stained Glass Pane= -Cyan Stained Glass Pane= diff --git a/mods/ITEMS/xpanes/locale/xpanes.de.tr b/mods/ITEMS/xpanes/locale/xpanes.de.tr deleted file mode 100644 index 3c840b08c7..0000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.de.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Glasscheiben sind dünne Glasschichten, die sich mit ihren Nachbarn automatisch verbinden. -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Farbglasscheiben sind dünne Schichten aus Farbglas, die sich mit ihren Nachbarn automatisch verbinden. Es gibt sie in vielen verschiedenen Farben. -Iron Bars=Eisenstangen -Iron bars neatly connect to their neighbors as you build them.=Eisenstangen verbinden sich mit den Nachbarn, wenn sie gebaut werden. -Glass Pane=Glasscheibe -Stained Glass Pane=Buntglasscheibe -Red Stained Glass Pane=Rote Buntglasscheibe -Green Stained Glass Pane=Grüne Buntglasscheibe -Blue Stained Glass Pane=Blaue Buntglasscheibe -Light Blue Stained Glass Pane=Hellblaue Buntglasscheibe -Black Stained Glass Pane=Schwarze Buntglasscheibe -White Stained Glass Pane=Weiße Buntglasscheibe -Yellow Stained Glass Pane=Gelbe Buntglasscheibe -Brown Stained Glass Pane=Braune Buntglasscheibe -Orange Stained Glass Pane=Orange Buntglasscheibe -Pink Stained Glass Pane=Rosa Buntglasscheibe -Grey Stained Glass Pane=Graue Buntglasscheibe -Lime Stained Glass Pane=Lindgrüne Buntglasscheibe -Light Grey Stained Glass Pane=Hellgraue Buntglasscheibe -Magenta Stained Glass Pane=Magenta Buntglasscheibe -Purple Stained Glass Pane=Violette Buntglasscheibe -Cyan Stained Glass Pane=Türkise Buntglasscheibe diff --git a/mods/ITEMS/xpanes/locale/xpanes.es.tr b/mods/ITEMS/xpanes/locale/xpanes.es.tr deleted file mode 100644 index c90c6472d2..0000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.es.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Los paneles de cristal son capas delgadas de vidrio que se conectan perfectamente a otros cristales a medida que los construye. -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Los paneles de cristal son capas delgadas de vidrio que se conectan perfectamente a otros cristales a medida que los construye. Vienen en muchos colores diferentes. -Iron Bars=Barrotes de hierro -Iron bars neatly connect to their neighbors as you build them.=Los barrotes de hierro se conectan perfectamente a sus vecinos a medida que los construyes. -Glass Pane=Panel de cristal -Stained Glass Pane=Panel de cristal tintado de manchado -Red Stained Glass Pane=Panel de cristal tintado de rojo -Green Stained Glass Pane=Panel de cristal tintado de verde -Blue Stained Glass Pane=Panel de cristal tintado de azul -Light Blue Stained Glass Pane=Panel de cristal tintado de azul claro -Black Stained Glass Pane=Panel de cristal tintado de negro -White Stained Glass Pane=Panel de cristal tintado de blanco -Yellow Stained Glass Pane=Panel de cristal tintado de amarillo -Brown Stained Glass Pane=Panel de cristal tintado de marrón -Orange Stained Glass Pane=Panel de cristal tintado de naranja -Pink Stained Glass Pane=Panel de cristal tintado de rosa -Grey Stained Glass Pane=Panel de cristal tintado de gris -Lime Stained Glass Pane=Panel de cristal tintado de verde lima -Light Grey Stained Glass Pane=Panel de cristal tintado de gris claro -Magenta Stained Glass Pane=Panel de cristal tintado de magenta -Purple Stained Glass Pane=Panel de cristal tintado de morado -Cyan Stained Glass Pane=Panel de cristal tintado de cian diff --git a/mods/ITEMS/xpanes/locale/xpanes.fr.tr b/mods/ITEMS/xpanes/locale/xpanes.fr.tr deleted file mode 100644 index 6b2fe43f34..0000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.fr.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Les vitres sont de fines couches de verre qui se connectent parfaitement à leurs voisins lorsque vous les construisez. -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Les vitres teintées sont de fines couches de verre teinté qui se connectent parfaitement à leurs voisins lorsque vous les construisez. Ils viennent dans de nombreuses couleurs différentes. -Iron Bars=Barres de fer -Iron bars neatly connect to their neighbors as you build them.=Les barres de fer se connectent parfaitement à leurs voisins lorsque vous les construisez. -Glass Pane=Vitre -Stained Glass Pane=Vitre Teintée -Red Stained Glass Pane=Vitre Teintée Rouge -Green Stained Glass Pane=Vitre Teintée Verte -Blue Stained Glass Pane=Vitre Teintée Bleue -Light Blue Stained Glass Pane=Vitre Teintée Bleu Clair -Black Stained Glass Pane=Vitre Teintée Noire -White Stained Glass Pane=Vitre Teintée Blanche -Yellow Stained Glass Pane=Vitre Teintée Jaune -Brown Stained Glass Pane=Vitre Teintée Marron -Orange Stained Glass Pane=Vitre Teintée Orange -Pink Stained Glass Pane=Vitre Teintée Rose -Grey Stained Glass Pane=Vitre Teintée Grise -Lime Stained Glass Pane=Vitre Teintée Vert Clair -Light Grey Stained Glass Pane=Vitre Teintée Gris Clair -Magenta Stained Glass Pane=Vitre Teintée Magenta -Purple Stained Glass Pane=Vitre Teintée Violette -Cyan Stained Glass Pane=Vitre Teintée Cyan diff --git a/mods/ITEMS/xpanes/locale/xpanes.pl.tr b/mods/ITEMS/xpanes/locale/xpanes.pl.tr deleted file mode 100644 index d169c1f970..0000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.pl.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Szyby są cienkimi warstwami szkła które łączą się z sąsiadującymi blokami podczas budowania. -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Kolorowe szyby są cienkimi warstwami kolorowego szkła które łączą się z sąsiadującymi blokami podczas budowania. Można je pokolorować na wiele kolorów. -Iron Bars=Żelazne kraty -Iron bars neatly connect to their neighbors as you build them.=Żelazne kraty łączą się z sąsiadującymi blokami podczas budowania. -Glass Pane=Szyba -Stained Glass Pane=Kolorowa szyba -Red Stained Glass Pane=Czerwona szyba -Green Stained Glass Pane=Zielona szyba -Blue Stained Glass Pane=Niebieska szyba -Light Blue Stained Glass Pane=Jasnoniebieska szyba -Black Stained Glass Pane=Czarna szyba -White Stained Glass Pane=Biała szyba -Yellow Stained Glass Pane=Żółta szyba -Brown Stained Glass Pane=Brązowa szyba -Orange Stained Glass Pane=Pomarańczowa szyba -Pink Stained Glass Pane=Różowa szyba -Grey Stained Glass Pane=Szara szyba -Lime Stained Glass Pane=Jasnozielona szyba -Light Grey Stained Glass Pane=Jasnoszara szyba -Magenta Stained Glass Pane=Karmazynowa szyba -Purple Stained Glass Pane=Fioletowa szyba -Cyan Stained Glass Pane=Błękitna szyba diff --git a/mods/ITEMS/xpanes/locale/xpanes.ru.tr b/mods/ITEMS/xpanes/locale/xpanes.ru.tr deleted file mode 100644 index 47702516db..0000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.ru.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Стеклянные панели это тонкие стёкла, которые аккуратно присоединяются к соседним блокам, когда вы устанавливаете их. -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Витражи это тонкие стёкла, которые аккуратно присоединяются к соседним блокам, когда вы устанавливаете их. Они могут быть разных цветов. -Iron Bars=Железные слитки -Iron bars neatly connect to their neighbors as you build them.=Железные слитки аккуратно присоединяются к соседним блокам, когда вы устанавливаете их. -Glass Pane=Стеклянная панель -Stained Glass Pane=Витраж -Red Stained Glass Pane=Красный витраж -Green Stained Glass Pane=Зелёный витраж -Blue Stained Glass Pane=Синий витраж -Light Blue Stained Glass Pane=Светло-голубой витраж -Black Stained Glass Pane=Чёрный витраж -White Stained Glass Pane=Белый витраж -Yellow Stained Glass Pane=Жёлтый витраж -Brown Stained Glass Pane=Коричневый витраж -Orange Stained Glass Pane=Оранжевый витраж -Pink Stained Glass Pane=Розовый витраж -Grey Stained Glass Pane=Серый витраж -Lime Stained Glass Pane=Зелёный лаймовый витраж -Light Grey Stained Glass Pane=Светло-серый витраж -Magenta Stained Glass Pane=Фиолетовый витраж -Purple Stained Glass Pane=Пурпурный витраж -Cyan Stained Glass Pane=Голубой витраж diff --git a/mods/ITEMS/xpanes/locale/xpanes.zh_TW.tr b/mods/ITEMS/xpanes/locale/xpanes.zh_TW.tr deleted file mode 100644 index bcf33c2055..0000000000 --- a/mods/ITEMS/xpanes/locale/xpanes.zh_TW.tr +++ /dev/null @@ -1,23 +0,0 @@ -# textdomain: xpanes -Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=玻璃板是薄薄的玻璃層,在你建造它們時,它們會整齊地連接到鄰近的方塊。 -Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=染色玻璃片是薄薄的一層染色玻璃,在你建造它們時,它們會整齊地連接到它們的鄰居。它們有許多不同的顏色。 -Iron Bars=鐵柵欄 -Iron bars neatly connect to their neighbors as you build them.=在你建造鐵柵欄時,它們會整齊地連接到鄰近的方塊。 -Glass Pane=玻璃片 -Stained Glass Pane=染色玻璃片 -Red Stained Glass Pane=紅色玻璃片 -Green Stained Glass Pane=綠色玻璃片 -Blue Stained Glass Pane=藍色玻璃片 -Light Blue Stained Glass Pane=淺藍色玻璃片 -Black Stained Glass Pane=黑色玻璃片 -White Stained Glass Pane=白色玻璃片 -Yellow Stained Glass Pane=黃色玻璃片 -Brown Stained Glass Pane=棕色玻璃片 -Orange Stained Glass Pane=橙色玻璃片 -Pink Stained Glass Pane=粉紅色玻璃片 -Grey Stained Glass Pane=灰色玻璃片 -Lime Stained Glass Pane=淺綠色玻璃片 -Light Grey Stained Glass Pane=淺灰色玻璃片 -Magenta Stained Glass Pane=洋紅色玻璃片 -Purple Stained Glass Pane=紫色玻璃片 -Cyan Stained Glass Pane=青色玻璃片 diff --git a/mods/ITEMS/xpanes/mod.conf b/mods/ITEMS/xpanes/mod.conf deleted file mode 100644 index ba21476631..0000000000 --- a/mods/ITEMS/xpanes/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = xpanes -depends = mcl_sounds, mcl_core -optional_depends = doc diff --git a/mods/ITEMS/xpanes/textures/xpanes_pane_iron.png b/mods/ITEMS/xpanes/textures/xpanes_pane_iron.png deleted file mode 100644 index 45c4bf13cd..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_pane_iron.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_black.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_black.png deleted file mode 100644 index 84a68034bb..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_black.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_blue.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_blue.png deleted file mode 100644 index c5bf8235e4..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_blue.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_brown.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_brown.png deleted file mode 100644 index eafbb2f2f4..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_brown.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_cyan.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_cyan.png deleted file mode 100644 index 315734e14d..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_cyan.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_gray.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_gray.png deleted file mode 100644 index 2826e38d59..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_gray.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_green.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_green.png deleted file mode 100644 index 88d73ce04b..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_green.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_light_blue.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_light_blue.png deleted file mode 100644 index 7244012ec0..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_light_blue.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_lime.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_lime.png deleted file mode 100644 index 3fb8ed2dda..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_lime.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_magenta.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_magenta.png deleted file mode 100644 index 6824b438fd..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_magenta.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_natural.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_natural.png deleted file mode 100644 index db53c90dcf..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_natural.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_orange.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_orange.png deleted file mode 100644 index 5d2fb60f21..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_orange.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_pink.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_pink.png deleted file mode 100644 index e6cef5507b..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_pink.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_purple.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_purple.png deleted file mode 100644 index fa02e7f84a..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_purple.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_red.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_red.png deleted file mode 100644 index 891de591c0..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_red.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_silver.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_silver.png deleted file mode 100644 index 0b0e7d598b..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_silver.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_white.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_white.png deleted file mode 100644 index 9244f361f6..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_white.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_glass_yellow.png b/mods/ITEMS/xpanes/textures/xpanes_top_glass_yellow.png deleted file mode 100644 index d2f0b32046..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_glass_yellow.png and /dev/null differ diff --git a/mods/ITEMS/xpanes/textures/xpanes_top_iron.png b/mods/ITEMS/xpanes/textures/xpanes_top_iron.png deleted file mode 100644 index 972cf737bd..0000000000 Binary files a/mods/ITEMS/xpanes/textures/xpanes_top_iron.png and /dev/null differ diff --git a/mods/MAPGEN/mcl_biomes/mod.conf b/mods/MAPGEN/mcl_biomes/mod.conf index 8d83771405..9738840f5e 100644 --- a/mods/MAPGEN/mcl_biomes/mod.conf +++ b/mods/MAPGEN/mcl_biomes/mod.conf @@ -1,4 +1,4 @@ name = mcl_biomes author = maikerumine description = Adds the various biomes and biome-related things for non-v6 map generators. -depends = mcl_init, mcl_mapgen_core, mcl_core, mcl_worlds, mcl_end +depends = mcl_core diff --git a/mods/MAPGEN/mcl_mapgen_core/mod.conf b/mods/MAPGEN/mcl_mapgen_core/mod.conf index 5a6bf94524..f3c8e26bb6 100644 --- a/mods/MAPGEN/mcl_mapgen_core/mod.conf +++ b/mods/MAPGEN/mcl_mapgen_core/mod.conf @@ -1,5 +1,4 @@ name = mcl_mapgen_core author = Wuzzy description = The core of the MCL2 mapgen -depends = mcl_init, mcl_core, biomeinfo, mcl_worlds, mcl_cocoas, mcl_sponges, mcl_structures -optional_depends = mclx_core +depends = mcl_core