diff --git a/mods/3d_armor/LICENSE.txt b/mods/3d_armor/LICENSE.txt new file mode 100644 index 0000000..c0f9da9 --- /dev/null +++ b/mods/3d_armor/LICENSE.txt @@ -0,0 +1,7 @@ +[mod] 3d Armor [3d_armor] +========================= + +License Source Code: (C) 2012-2017 Stuart Jones - LGPL v2.1 + +License Textures: Copyright (C) 2013-2017 Ryan Jones - CC-BY-SA 3.0 + diff --git a/mods/3d_armor/README.txt b/mods/3d_armor/README.txt new file mode 100644 index 0000000..224f81c --- /dev/null +++ b/mods/3d_armor/README.txt @@ -0,0 +1,24 @@ +[mod] Visible Player Armor [3d_armor] +===================================== + +Depends: default + +Recommends: inventory_plus or unified_inventory (use only one) + +Adds craftable armor that is visible to other players. Each armor item worn contributes to +a player's armor group level making them less vulnerable to weapons. + +Armor takes damage when a player is hurt but also offers a percentage chance of healing. +Overall level is boosted by 10% when wearing a full matching set. + +Fire protection added by TenPlus1 when using crystal armor if Ethereal mod active, level 1 +protects against torches, level 2 for crystal spike, level 3 for fire, level 5 for lava. + +Configuration +------------- + +Armor can be configured by adding a file called armor.conf in 3d_armor mod and/or world directory. +see armor.conf.example for all available options. + +Note: worldpath config settings override any settings made in the mod's directory. + diff --git a/mods/3d_armor/admin.lua b/mods/3d_armor/admin.lua new file mode 100644 index 0000000..f499987 --- /dev/null +++ b/mods/3d_armor/admin.lua @@ -0,0 +1,45 @@ +minetest.register_alias("adminboots","3d_armor:boots_admin") +minetest.register_alias("adminhelmet","3d_armor:helmet_admin") +minetest.register_alias("adminchestplate","3d_armor:chestplate_admin") +minetest.register_alias("adminleggings","3d_armor:leggings_admin") + +minetest.register_tool("3d_armor:helmet_admin", { + description = "Admin Helmet", + inventory_image = "3d_armor_inv_helmet_admin.png", + groups = {armor_head=1000, armor_heal=1000, armor_use=0, armor_water=1, not_in_creative_inventory=1}, + wear = 0, + on_drop = function(itemstack, dropper, pos) + return + end, +}) + +minetest.register_tool("3d_armor:chestplate_admin", { + description = "Admin Chestplate", + inventory_image = "3d_armor_inv_chestplate_admin.png", + groups = {armor_torso=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1}, + wear = 0, + on_drop = function(itemstack, dropper, pos) + return + end, +}) + +minetest.register_tool("3d_armor:leggings_admin", { + description = "Admin Leggings", + inventory_image = "3d_armor_inv_leggings_admin.png", + groups = {armor_legs=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1}, + wear = 0, + on_drop = function(itemstack, dropper, pos) + return + end, +}) + +minetest.register_tool("3d_armor:boots_admin", { + description = "Admin Boots", + inventory_image = "3d_armor_inv_boots_admin.png", + groups = {armor_feet=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1}, + wear = 0, + on_drop = function(itemstack, dropper, pos) + return + end, +}) + diff --git a/mods/3d_armor/armor.conf.example b/mods/3d_armor/armor.conf.example new file mode 100644 index 0000000..75e072d --- /dev/null +++ b/mods/3d_armor/armor.conf.example @@ -0,0 +1,61 @@ +-- Armor Configuration (defaults) + +-- You can remove any unwanted armor materials from this table. +-- Note that existing armor that is removed will show up as an unknown item. +ARMOR_MATERIALS = { + wood = "group:wood", + cactus = "default:cactus", + steel = "default:steel_ingot", + bronze = "default:bronze_ingot", + diamond = "default:diamond", + gold = "default:gold_ingot", + mithril = "moreores:mithril_ingot", + crystal = "ethereal:crystal_ingot", +} + +-- Enable fire protection (defaults true if using ethereal mod) +ARMOR_FIRE_PROTECT = false + +-- Fire protection nodes, (name, protection level, damage) +ARMOR_FIRE_NODES = { + {"default:lava_source", 5, 4}, + {"default:lava_flowing", 5, 4}, + {"fire:basic_flame", 3, 4}, + {"fire:permanent_flame", 3, 4}, + {"ethereal:crystal_spike", 2, 1}, + {"ethereal:fire_flower", 2, 1}, + {"default:torch", 1, 1}, +} + +-- Increase this if you get initialization glitches when a player first joins. +ARMOR_INIT_DELAY = 1 + +-- Number of initialization attempts. +-- Use in conjunction with ARMOR_INIT_DELAY if initialization problems persist. +ARMOR_INIT_TIMES = 1 + +-- Increase this if armor is not getting into bones due to server lag. +ARMOR_BONES_DELAY = 1 + +-- How often player armor/wield items are updated. +ARMOR_UPDATE_TIME = 1 + +-- Drop armor when a player dies. +-- Uses bones mod if present, otherwise items are dropped around the player. +ARMOR_DROP = true + +-- Pulverise armor when a player dies, overrides ARMOR_DROP. +ARMOR_DESTROY = false + +-- You can use this to increase or decrease overall armor effectiveness, +-- eg: ARMOR_LEVEL_MULTIPLIER = 0.5 will reduce armor level by half. +ARMOR_LEVEL_MULTIPLIER = 1 + +-- You can use this to increase or decrease overall armor healing, +-- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether. +ARMOR_HEAL_MULTIPLIER = 1 + +-- You can use this to increase or decrease overall armor radiation protection, +-- eg: ARMOR_RADIATION_MULTIPLIER = 0 will completely disable radiation protection. +-- Note: patched technic mod is required +ARMOR_RADIATION_MULTIPLIER = 1 diff --git a/mods/3d_armor/armor.lua b/mods/3d_armor/armor.lua new file mode 100644 index 0000000..5d620d9 --- /dev/null +++ b/mods/3d_armor/armor.lua @@ -0,0 +1,646 @@ +ARMOR_INIT_DELAY = 1 +ARMOR_INIT_TIMES = 1 +ARMOR_BONES_DELAY = 1 +ARMOR_UPDATE_TIME = 1 +ARMOR_DROP = minetest.get_modpath("bones") ~= nil +ARMOR_DESTROY = false +ARMOR_LEVEL_MULTIPLIER = 1 +ARMOR_HEAL_MULTIPLIER = 1 +ARMOR_RADIATION_MULTIPLIER = 1 +ARMOR_MATERIALS = { + wood = "group:wood", + cactus = "default:cactus", + steel = "default:steel_ingot", + bronze = "default:bronze_ingot", + diamond = "default:diamond", + gold = "default:gold_ingot", + mithril = "moreores:mithril_ingot", + crystal = "ethereal:crystal_ingot", +} +ARMOR_FIRE_PROTECT = minetest.get_modpath("ethereal") ~= nil +ARMOR_FIRE_NODES = { + {"default:lava_source", 5, 8}, + {"default:lava_flowing", 5, 8}, + {"fire:basic_flame", 3, 4}, + {"fire:permanent_flame", 3, 4}, + {"ethereal:crystal_spike", 2, 1}, + {"ethereal:fire_flower", 2, 1}, + {"default:torch", 1, 1}, +} + +local skin_mod = nil +local inv_mod = nil + +local modpath = minetest.get_modpath(ARMOR_MOD_NAME) +local worldpath = minetest.get_worldpath() +local input = io.open(modpath.."/armor.conf", "r") +if input then + dofile(modpath.."/armor.conf") + input:close() + input = nil +end +input = io.open(worldpath.."/armor.conf", "r") +if input then + dofile(worldpath.."/armor.conf") + input:close() + input = nil +end +if not minetest.get_modpath("moreores") then + ARMOR_MATERIALS.mithril = nil +end +if not minetest.get_modpath("ethereal") then + ARMOR_MATERIALS.crystal = nil +end + +armor = { + timer = 0, + elements = {"head", "torso", "legs", "feet"}, + physics = {"jump","speed","gravity"}, + formspec = "size[8,8.5]image[2,0.75;2,4;armor_preview]" + .."list[current_player;main;0,4.5;8,4;]" + .."list[current_player;craft;4,1;3,3;]" + .."list[current_player;craftpreview;7,2;1,1;]" + .."listring[current_player;main]" + .."listring[current_player;craft]", + textures = {}, + default_skin = "character", + version = "0.4.7", +} + +if minetest.get_modpath("inventory_plus") then + inv_mod = "inventory_plus" + armor.formspec = "size[8,8.5]button[0,0;2,0.5;main;Back]" + .."image[2.5,0.75;2,4;armor_preview]" + .."label[5,1;Level: armor_level]" + .."label[5,1.5;Heal: armor_heal]" + .."label[5,2;Fire: armor_fire]" + .."label[5,2.5;Radiation: armor_radiation]" + .."list[current_player;main;0,4.5;8,4;]" + if minetest.get_modpath("crafting") then + inventory_plus.get_formspec = function(player, page) + end + end +elseif minetest.get_modpath("unified_inventory") then + inv_mod = "unified_inventory" + unified_inventory.register_button("armor", { + type = "image", + image = "inventory_plus_armor.png", + }) + unified_inventory.register_page("armor", { + get_formspec = function(player, perplayer_formspec) + local fy = perplayer_formspec.formspec_y + local name = player:get_player_name() + local formspec = "background[0.06,"..fy..";7.92,7.52;3d_armor_ui_form.png]" + .."label[0,0;Armor]" + .."list[detached:"..name.."_armor;armor;0,"..fy..";2,3;]" + .."image[2.5,"..(fy - 0.25)..";2,4;"..armor.textures[name].preview.."]" + .."label[5.0,"..(fy + 0.0)..";Level: "..armor.def[name].level.."]" + .."label[5.0,"..(fy + 0.5)..";Heal: "..armor.def[name].heal.."]" + .."label[5.0,"..(fy + 1.0)..";Fire: "..armor.def[name].fire.."]" + .."label[5.0,"..(fy + 1.5)..";Radiation: "..armor.def[name].radiation.."]" + .."listring[current_player;main]" + .."listring[detached:"..name.."_armor;armor]" + return {formspec=formspec} + end, + }) +elseif minetest.get_modpath("inventory_enhanced") then + inv_mod = "inventory_enhanced" +end + +if minetest.get_modpath("skins") then + skin_mod = "skins" +elseif minetest.get_modpath("simple_skins") then + skin_mod = "simple_skins" +elseif minetest.get_modpath("u_skins") then + skin_mod = "u_skins" +elseif minetest.get_modpath("wardrobe") then + skin_mod = "wardrobe" +end + +armor.def = { + state = 0, + count = 0, +} + +armor.update_player_visuals = function(self, player) + if not player then + return + end + local name = player:get_player_name() + if self.textures[name] then + default.player_set_textures(player, { + self.textures[name].skin, + self.textures[name].armor, + self.textures[name].wielditem, + }) + end +end + +armor.set_player_armor = function(self, player) + local name, player_inv = armor:get_valid_player(player, "[set_player_armor]") + if not name then + return + end + local armor_texture = "3d_armor_trans.png" + local armor_level = 0 + local armor_heal = 0 + local armor_fire = 0 + local armor_water = 0 + local armor_radiation = 0 + local state = 0 + local items = 0 + local elements = {} + local textures = {} + local physics_o = {speed=1,gravity=1,jump=1} + local material = {type=nil, count=1} + local preview = armor:get_preview(name) or "character_preview.png" + for _,v in ipairs(self.elements) do + elements[v] = false + end + for i=1, 6 do + local stack = player_inv:get_stack("armor", i) + local item = stack:get_name() + if stack:get_count() == 1 then + local def = stack:get_definition() + for k, v in pairs(elements) do + if v == false then + local level = def.groups["armor_"..k] + if level then + local texture = def.texture or item:gsub("%:", "_") + table.insert(textures, texture..".png") + preview = preview.."^"..texture.."_preview.png" + armor_level = armor_level + level + state = state + stack:get_wear() + items = items + 1 + armor_heal = armor_heal + (def.groups["armor_heal"] or 0) + armor_fire = armor_fire + (def.groups["armor_fire"] or 0) + armor_water = armor_water + (def.groups["armor_water"] or 0) + armor_radiation = armor_radiation + (def.groups["armor_radiation"] or 0) + for kk,vv in ipairs(self.physics) do + local o_value = def.groups["physics_"..vv] + if o_value then + physics_o[vv] = physics_o[vv] + o_value + end + end + local mat = string.match(item, "%:.+_(.+)$") + if material.type then + if material.type == mat then + material.count = material.count + 1 + end + else + material.type = mat + end + elements[k] = true + end + end + end + end + end + if minetest.get_modpath("shields") then + armor_level = armor_level * 0.9 + end + if material.type and material.count == #self.elements then + armor_level = armor_level * 1.1 + end + armor_level = armor_level * ARMOR_LEVEL_MULTIPLIER + armor_heal = armor_heal * ARMOR_HEAL_MULTIPLIER + armor_radiation = armor_radiation * ARMOR_RADIATION_MULTIPLIER + if #textures > 0 then + armor_texture = table.concat(textures, "^") + end + local armor_groups = {fleshy=100} + if armor_level > 0 then + armor_groups.level = math.floor(armor_level / 20) + armor_groups.fleshy = 100 - armor_level + armor_groups.radiation = 100 - armor_radiation + end + player:set_armor_groups(armor_groups) + player:set_physics_override(physics_o) + self.textures[name].armor = armor_texture + self.textures[name].preview = preview + self.def[name].state = state + self.def[name].count = items + self.def[name].level = armor_level + self.def[name].heal = armor_heal + self.def[name].jump = physics_o.jump + self.def[name].speed = physics_o.speed + self.def[name].gravity = physics_o.gravity + self.def[name].fire = armor_fire + self.def[name].water = armor_water + self.def[name].radiation = armor_radiation + self:update_player_visuals(player) +end + +armor.update_armor = function(self, player) + -- Legacy support: Called when armor levels are changed + -- Other mods can hook on to this function, see hud mod for example +end + +armor.get_player_skin = function(self, name) + local skin = nil + if skin_mod == "skins" or skin_mod == "simple_skins" then + skin = skins.skins[name] + elseif skin_mod == "u_skins" then + skin = u_skins.u_skins[name] + elseif skin_mod == "wardrobe" then + skin = string.gsub(wardrobe.playerSkins[name], "%.png$","") + end + return skin or armor.default_skin +end + +armor.get_preview = function(self, name) + if skin_mod == "skins" then + return armor:get_player_skin(name).."_preview.png" + end +end + +armor.get_armor_formspec = function(self, name) + if not armor.textures[name] then + minetest.log("error", "3d_armor: Player texture["..name.."] is nil [get_armor_formspec]") + return "" + end + if not armor.def[name] then + minetest.log("error", "3d_armor: Armor def["..name.."] is nil [get_armor_formspec]") + return "" + end + local formspec = armor.formspec.."list[detached:"..name.."_armor;armor;0,1;2,3;]" + formspec = formspec:gsub("armor_preview", armor.textures[name].preview) + formspec = formspec:gsub("armor_level", armor.def[name].level) + formspec = formspec:gsub("armor_heal", armor.def[name].heal) + formspec = formspec:gsub("armor_fire", armor.def[name].fire) + formspec = formspec:gsub("armor_radiation", armor.def[name].radiation) + return formspec +end + +armor.update_inventory = function(self, player) + local name = armor:get_valid_player(player, "[set_player_armor]") + if not name or inv_mod == "inventory_enhanced" then + return + end + if inv_mod == "unified_inventory" then + if unified_inventory.current_page[name] == "armor" then + unified_inventory.set_inventory_formspec(player, "armor") + end + else + local formspec = armor:get_armor_formspec(name) + if inv_mod == "inventory_plus" then + formspec = formspec.."listring[current_player;main]" + .."listring[detached:"..name.."_armor;armor]" + local page = player:get_inventory_formspec() + if page:find("detached:"..name.."_armor") then + inventory_plus.set_inventory_formspec(player, formspec) + end + elseif not core.setting_getbool("creative_mode") then + player:set_inventory_formspec(formspec) + end + end +end + +armor.get_valid_player = function(self, player, msg) + msg = msg or "" + if not player then + minetest.log("error", "3d_armor: Player reference is nil "..msg) + return + end + local name = player:get_player_name() + if not name then + minetest.log("error", "3d_armor: Player name is nil "..msg) + return + end + local pos = player:getpos() + local player_inv = player:get_inventory() + local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"}) + if not pos then + minetest.log("error", "3d_armor: Player position is nil "..msg) + return + elseif not player_inv then + minetest.log("error", "3d_armor: Player inventory is nil "..msg) + return + elseif not armor_inv then + minetest.log("error", "3d_armor: Detached armor inventory is nil "..msg) + return + end + return name, player_inv, armor_inv, pos +end + +-- Register Player Model + +default.player_register_model("3d_armor_character.b3d", { + animation_speed = 30, + textures = { + armor.default_skin..".png", + "3d_armor_trans.png", + "3d_armor_trans.png", + }, + animations = { + stand = {x=0, y=79}, + lay = {x=162, y=166}, + walk = {x=168, y=187}, + mine = {x=189, y=198}, + walk_mine = {x=200, y=219}, + sit = {x=81, y=160}, + }, +}) + +-- Register Callbacks + +minetest.register_on_player_receive_fields(function(player, formname, fields) + local name = armor:get_valid_player(player, "[on_player_receive_fields]") + if not name or inv_mod == "inventory_enhanced" then + return + end + if inv_mod == "inventory_plus" and fields.armor then + local formspec = armor:get_armor_formspec(name) + inventory_plus.set_inventory_formspec(player, formspec) + return + end + for field, _ in pairs(fields) do + if string.find(field, "skins_set") then + minetest.after(0, function(player) + local skin = armor:get_player_skin(name) + armor.textures[name].skin = skin..".png" + armor:set_player_armor(player) + end, player) + end + end +end) + +minetest.register_on_joinplayer(function(player) + default.player_set_model(player, "3d_armor_character.b3d") + local name = player:get_player_name() + local player_inv = player:get_inventory() + local armor_inv = minetest.create_detached_inventory(name.."_armor", { + on_put = function(inv, listname, index, stack, player) + player:get_inventory():set_stack(listname, index, stack) + armor:set_player_armor(player) + armor:update_inventory(player) + end, + on_take = function(inv, listname, index, stack, player) + player:get_inventory():set_stack(listname, index, nil) + armor:set_player_armor(player) + armor:update_inventory(player) + end, + on_move = function(inv, from_list, from_index, to_list, to_index, count, player) + local plaver_inv = player:get_inventory() + local stack = inv:get_stack(to_list, to_index) + player_inv:set_stack(to_list, to_index, stack) + player_inv:set_stack(from_list, from_index, nil) + armor:set_player_armor(player) + armor:update_inventory(player) + end, + allow_put = function(inv, listname, index, stack, player) + return 1 + end, + allow_take = function(inv, listname, index, stack, player) + return stack:get_count() + end, + allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) + return count + end, + }, name) + if inv_mod == "inventory_plus" then + inventory_plus.register_button(player,"armor", "Armor") + end + armor_inv:set_size("armor", 6) + player_inv:set_size("armor", 6) + for i=1, 6 do + local stack = player_inv:get_stack("armor", i) + armor_inv:set_stack("armor", i, stack) + end + armor.def[name] = { + state = 0, + count = 0, + level = 0, + heal = 0, + jump = 1, + speed = 1, + gravity = 1, + fire = 0, + water = 0, + radiation = 0, + } + armor.textures[name] = { + skin = armor.default_skin..".png", + armor = "3d_armor_trans.png", + wielditem = "3d_armor_trans.png", + preview = armor.default_skin.."_preview.png", + } + if skin_mod == "skins" then + local skin = skins.skins[name] + if skin and skins.get_type(skin) == skins.type.MODEL then + armor.textures[name].skin = skin..".png" + end + elseif skin_mod == "simple_skins" then + local skin = skins.skins[name] + if skin then + armor.textures[name].skin = skin..".png" + end + elseif skin_mod == "u_skins" then + local skin = u_skins.u_skins[name] + if skin and u_skins.get_type(skin) == u_skins.type.MODEL then + armor.textures[name].skin = skin..".png" + end + elseif skin_mod == "wardrobe" then + local skin = wardrobe.playerSkins[name] + if skin then + armor.textures[name].skin = skin + end + end + if minetest.get_modpath("player_textures") then + local filename = minetest.get_modpath("player_textures").."/textures/player_"..name + local f = io.open(filename..".png") + if f then + f:close() + armor.textures[name].skin = "player_"..name..".png" + end + end + for i=1, ARMOR_INIT_TIMES do + minetest.after(ARMOR_INIT_DELAY * i, function(player) + armor:set_player_armor(player) + if not inv_mod then + armor:update_inventory(player) + end + end, player) + end +end) + +if ARMOR_DROP == true or ARMOR_DESTROY == true then + armor.drop_armor = function(pos, stack) + local obj = minetest.add_item(pos, stack) + if obj then + obj:setvelocity({x=math.random(-1, 1), y=5, z=math.random(-1, 1)}) + end + end + minetest.register_on_dieplayer(function(player) + local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]") + if not name then + return + end + local drop = {} + for i=1, player_inv:get_size("armor") do + local stack = armor_inv:get_stack("armor", i) + if stack:get_count() > 0 then + table.insert(drop, stack) + armor_inv:set_stack("armor", i, nil) + player_inv:set_stack("armor", i, nil) + end + end + armor:set_player_armor(player) + if inv_mod == "unified_inventory" then + unified_inventory.set_inventory_formspec(player, "craft") + elseif inv_mod == "inventory_plus" then + local formspec = inventory_plus.get_formspec(player,"main") + inventory_plus.set_inventory_formspec(player, formspec) + else + armor:update_inventory(player) + end + if ARMOR_DESTROY == false then + minetest.after(ARMOR_BONES_DELAY, function() + local node = minetest.get_node(vector.round(pos)) + if node then + if node.name ~= "bones:bones" then + pos.y = pos.y+1 + node = minetest.get_node(vector.round(pos)) + if node.name ~= "bones:bones" then + minetest.log("warning", "Failed to add armor to bones node.") + return + end + end + local meta = minetest.get_meta(vector.round(pos)) + local owner = meta:get_string("owner") + local inv = meta:get_inventory() + for _,stack in ipairs(drop) do + if name == owner and inv:room_for_item("main", stack) then + inv:add_item("main", stack) + else + armor.drop_armor(pos, stack) + end + end + else + for _,stack in ipairs(drop) do + armor.drop_armor(pos, stack) + end + end + end) + end + end) +end + +minetest.register_on_player_hpchange(function(player, hp_change) + local name, player_inv, armor_inv = armor:get_valid_player(player, "[on_hpchange]") + if name and hp_change < 0 then + + -- used for insta kill tools/commands like /kill (doesnt damage armor) + if hp_change < -100 then + return hp_change + end + + local heal_max = 0 + local state = 0 + local items = 0 + for i=1, 6 do + local stack = player_inv:get_stack("armor", i) + if stack:get_count() > 0 then + local use = stack:get_definition().groups["armor_use"] or 0 + local heal = stack:get_definition().groups["armor_heal"] or 0 + local item = stack:get_name() + stack:add_wear(use) + armor_inv:set_stack("armor", i, stack) + player_inv:set_stack("armor", i, stack) + state = state + stack:get_wear() + items = items + 1 + if stack:get_count() == 0 then + local desc = minetest.registered_items[item].description + if desc then + minetest.chat_send_player(name, "Your "..desc.." got destroyed!") + end + armor:set_player_armor(player) + armor:update_inventory(player) + end + heal_max = heal_max + heal + end + end + armor.def[name].state = state + armor.def[name].count = items + heal_max = heal_max * ARMOR_HEAL_MULTIPLIER + if heal_max > math.random(100) then + hp_change = 0 + end + armor:update_armor(player) + end + return hp_change +end, true) + +-- Fire Protection and water breating, added by TenPlus1 + +if ARMOR_FIRE_PROTECT == true then + -- override hot nodes so they do not hurt player anywhere but mod + for _, row in pairs(ARMOR_FIRE_NODES) do + if minetest.registered_nodes[row[1]] then + minetest.override_item(row[1], {damage_per_second = 0}) + end + end +else + print ("[3d_armor] Fire Nodes disabled") +end + +minetest.register_globalstep(function(dtime) + armor.timer = armor.timer + dtime + if armor.timer < ARMOR_UPDATE_TIME then + return + end + for _,player in pairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local pos = player:getpos() + local hp = player:get_hp() + -- water breathing + if name and armor.def[name].water > 0 then + if player:get_breath() < 10 then + player:set_breath(10) + end + end + -- fire protection + if ARMOR_FIRE_PROTECT == true + and name and pos and hp then + pos.y = pos.y + 1.4 -- head level + local node_head = minetest.get_node(pos).name + pos.y = pos.y - 1.2 -- feet level + local node_feet = minetest.get_node(pos).name + -- is player inside a hot node? + for _, row in pairs(ARMOR_FIRE_NODES) do + -- check fire protection, if not enough then get hurt + if row[1] == node_head or row[1] == node_feet then + if hp > 0 and armor.def[name].fire < row[2] then + hp = hp - row[3] * ARMOR_UPDATE_TIME + player:set_hp(hp) + break + end + end + end + end + end + armor.timer = 0 +end) + +-- kill player when command issued +minetest.register_chatcommand("kill", { + params = "", + description = "Kills player instantly", + privs = {ban=true}, + func = function(name, param) + local player = minetest.get_player_by_name(param) + if player then + player:set_hp(0) + end + end, +}) + +minetest.register_chatcommand("killme", { + description = "Kill yourself instantly", + func = function(name) + local player = minetest.get_player_by_name(name) + if player then + player:set_hp(-1001) + end + end, +}) diff --git a/mods/3d_armor/crafting_guide.txt b/mods/3d_armor/crafting_guide.txt new file mode 100644 index 0000000..abd1519 --- /dev/null +++ b/mods/3d_armor/crafting_guide.txt @@ -0,0 +1,79 @@ +3d_armor -- Crafting Guide +-------------------------- + +Helmets: + ++---+---+---+ +| X | X | X | ++---+---+---+ +| X | | X | ++---+---+---+ +| | | | ++---+---+---+ + +[3d_armor:helmet_wood] X = [default:wood] +[3d_armor:helmet_cactus] X = [default:cactus] +[3d_armor:helmet_steel] X = [default:steel_ingot] +[3d_armor:helmet_bronze] X = [default:bronze_ingot] +[3d_armor:helmet_diamond] X = [default:diamond] +[3d_armor:helmet_gold] X = [default:gold_ingot] +[3d_armor:helmet_mithril] X = [moreores:mithril_ingot] * +[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] ** + +Chestplates: + ++---+---+---+ +| X | | X | ++---+---+---+ +| X | X | X | ++---+---+---+ +| X | X | X | ++---+---+---+ + +[3d_armor:chestplate_wood] X = [default:wood] +[3d_armor:chestplate_cactus] X = [default:cactus] +[3d_armor:chestplate_steel] X = [default:steel_ingot] +[3d_armor:chestplate_bronze] X = [default:bronze_ingot] +[3d_armor:chestplate_diamond] X = [default:diamond] +[3d_armor:chestplate_gold] X = [default:gold_ingot] +[3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] * +[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] ** + +Leggings: + ++---+---+---+ +| X | X | X | ++---+---+---+ +| X | | X | ++---+---+---+ +| X | | X | ++---+---+---+ + +[3d_armor:leggings_wood] X = [default:wood] +[3d_armor:leggings_cactus] X = [default:cactus] +[3d_armor:leggings_steel] X = [default:steel_ingot] +[3d_armor:leggings_bronze] X = [default:bronze_ingot] +[3d_armor:leggings_diamond] X = [default:diamond] +[3d_armor:leggings_gold] X = [default:gold_ingot] +[3d_armor:leggings_mithril] X = [moreores:mithril_ingot] * +[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] ** + +Boots: + ++---+---+---+ +| X | | X | ++---+---+---+ +| X | | X | ++---+---+---+ + +[3d_armor:boots_wood] X = [default:wood] +[3d_armor:boots_cactus] X = [default:cactus] +[3d_armor:boots_steel] X = [default:steel_ingot] +[3d_armor:boots_bronze] X = [default:bronze_ingot +[3d_armor:boots_diamond] X = [default:diamond] +[3d_armor:boots_gold] X = [default:gold_ingot] +[3d_armor:boots_mithril] X = [moreores:mithril_ingot] * +[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] ** + + * Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549 +** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal diff --git a/mods/3d_armor/depends.txt b/mods/3d_armor/depends.txt new file mode 100644 index 0000000..3acf737 --- /dev/null +++ b/mods/3d_armor/depends.txt @@ -0,0 +1,6 @@ +default +inventory_plus? +unified_inventory? +fire? +ethereal? +bakedclay? diff --git a/mods/3d_armor/description.txt b/mods/3d_armor/description.txt new file mode 100644 index 0000000..b0a9b0a --- /dev/null +++ b/mods/3d_armor/description.txt @@ -0,0 +1 @@ +Adds craftable armor that is visible to other players. diff --git a/mods/3d_armor/init.lua b/mods/3d_armor/init.lua new file mode 100644 index 0000000..4a2116f --- /dev/null +++ b/mods/3d_armor/init.lua @@ -0,0 +1,254 @@ +ARMOR_MOD_NAME = minetest.get_current_modname() +dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/armor.lua") +dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/admin.lua") + +if ARMOR_MATERIALS.wood then + minetest.register_tool("3d_armor:helmet_wood", { + description = "Wood Helmet", + inventory_image = "3d_armor_inv_helmet_wood.png", + groups = {armor_head=5, armor_heal=0, armor_use=2000}, + wear = 0, + }) + minetest.register_tool("3d_armor:chestplate_wood", { + description = "Wood Chestplate", + inventory_image = "3d_armor_inv_chestplate_wood.png", + groups = {armor_torso=10, armor_heal=0, armor_use=2000}, + wear = 0, + }) + minetest.register_tool("3d_armor:leggings_wood", { + description = "Wood Leggings", + inventory_image = "3d_armor_inv_leggings_wood.png", + groups = {armor_legs=5, armor_heal=0, armor_use=2000}, + wear = 0, + }) + minetest.register_tool("3d_armor:boots_wood", { + description = "Wood Boots", + inventory_image = "3d_armor_inv_boots_wood.png", + groups = {armor_feet=5, armor_heal=0, armor_use=2000}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.cactus then + minetest.register_tool("3d_armor:helmet_cactus", { + description = "Cactuc Helmet", + inventory_image = "3d_armor_inv_helmet_cactus.png", + groups = {armor_head=5, armor_heal=0, armor_use=1000}, + wear = 0, + }) + minetest.register_tool("3d_armor:chestplate_cactus", { + description = "Cactus Chestplate", + inventory_image = "3d_armor_inv_chestplate_cactus.png", + groups = {armor_torso=10, armor_heal=0, armor_use=1000}, + wear = 0, + }) + minetest.register_tool("3d_armor:leggings_cactus", { + description = "Cactus Leggings", + inventory_image = "3d_armor_inv_leggings_cactus.png", + groups = {armor_legs=5, armor_heal=0, armor_use=1000}, + wear = 0, + }) + minetest.register_tool("3d_armor:boots_cactus", { + description = "Cactus Boots", + inventory_image = "3d_armor_inv_boots_cactus.png", + groups = {armor_feet=5, armor_heal=0, armor_use=2000}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.steel then + minetest.register_tool("3d_armor:helmet_steel", { + description = "Steel Helmet", + inventory_image = "3d_armor_inv_helmet_steel.png", + groups = {armor_head=10, armor_heal=0, armor_use=500}, + wear = 0, + }) + minetest.register_tool("3d_armor:chestplate_steel", { + description = "Steel Chestplate", + inventory_image = "3d_armor_inv_chestplate_steel.png", + groups = {armor_torso=15, armor_heal=0, armor_use=500}, + wear = 0, + }) + minetest.register_tool("3d_armor:leggings_steel", { + description = "Steel Leggings", + inventory_image = "3d_armor_inv_leggings_steel.png", + groups = {armor_legs=15, armor_heal=0, armor_use=500}, + wear = 0, + }) + minetest.register_tool("3d_armor:boots_steel", { + description = "Steel Boots", + inventory_image = "3d_armor_inv_boots_steel.png", + groups = {armor_feet=10, armor_heal=0, armor_use=500}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.bronze then + minetest.register_tool("3d_armor:helmet_bronze", { + description = "Bronze Helmet", + inventory_image = "3d_armor_inv_helmet_bronze.png", + groups = {armor_head=10, armor_heal=6, armor_use=250}, + wear = 0, + }) + minetest.register_tool("3d_armor:chestplate_bronze", { + description = "Bronze Chestplate", + inventory_image = "3d_armor_inv_chestplate_bronze.png", + groups = {armor_torso=15, armor_heal=6, armor_use=250}, + wear = 0, + }) + minetest.register_tool("3d_armor:leggings_bronze", { + description = "Bronze Leggings", + inventory_image = "3d_armor_inv_leggings_bronze.png", + groups = {armor_legs=15, armor_heal=6, armor_use=250}, + wear = 0, + }) + minetest.register_tool("3d_armor:boots_bronze", { + description = "Bronze Boots", + inventory_image = "3d_armor_inv_boots_bronze.png", + groups = {armor_feet=10, armor_heal=6, armor_use=250}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.diamond then + minetest.register_tool("3d_armor:helmet_diamond", { + description = "Diamond Helmet", + inventory_image = "3d_armor_inv_helmet_diamond.png", + groups = {armor_head=15, armor_heal=12, armor_use=100}, + wear = 0, + }) + minetest.register_tool("3d_armor:chestplate_diamond", { + description = "Diamond Chestplate", + inventory_image = "3d_armor_inv_chestplate_diamond.png", + groups = {armor_torso=20, armor_heal=12, armor_use=100}, + wear = 0, + }) + minetest.register_tool("3d_armor:leggings_diamond", { + description = "Diamond Leggings", + inventory_image = "3d_armor_inv_leggings_diamond.png", + groups = {armor_legs=20, armor_heal=12, armor_use=100}, + wear = 0, + }) + minetest.register_tool("3d_armor:boots_diamond", { + description = "Diamond Boots", + inventory_image = "3d_armor_inv_boots_diamond.png", + groups = {armor_feet=15, armor_heal=12, armor_use=100}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.gold then + minetest.register_tool("3d_armor:helmet_gold", { + description = "Gold Helmet", + inventory_image = "3d_armor_inv_helmet_gold.png", + groups = {armor_head=10, armor_heal=6, armor_use=250}, + wear = 0, + }) + minetest.register_tool("3d_armor:chestplate_gold", { + description = "Gold Chestplate", + inventory_image = "3d_armor_inv_chestplate_gold.png", + groups = {armor_torso=15, armor_heal=6, armor_use=250}, + wear = 0, + }) + minetest.register_tool("3d_armor:leggings_gold", { + description = "Gold Leggings", + inventory_image = "3d_armor_inv_leggings_gold.png", + groups = {armor_legs=15, armor_heal=6, armor_use=250}, + wear = 0, + }) + minetest.register_tool("3d_armor:boots_gold", { + description = "Gold Boots", + inventory_image = "3d_armor_inv_boots_gold.png", + groups = {armor_feet=10, armor_heal=6, armor_use=250}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.mithril then + minetest.register_tool("3d_armor:helmet_mithril", { + description = "Mithril Helmet", + inventory_image = "3d_armor_inv_helmet_mithril.png", + groups = {armor_head=15, armor_heal=12, armor_use=50}, + wear = 0, + }) + minetest.register_tool("3d_armor:chestplate_mithril", { + description = "Mithril Chestplate", + inventory_image = "3d_armor_inv_chestplate_mithril.png", + groups = {armor_torso=20, armor_heal=12, armor_use=50}, + wear = 0, + }) + minetest.register_tool("3d_armor:leggings_mithril", { + description = "Mithril Leggings", + inventory_image = "3d_armor_inv_leggings_mithril.png", + groups = {armor_legs=20, armor_heal=12, armor_use=50}, + wear = 0, + }) + minetest.register_tool("3d_armor:boots_mithril", { + description = "Mithril Boots", + inventory_image = "3d_armor_inv_boots_mithril.png", + groups = {armor_feet=15, armor_heal=12, armor_use=50}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.crystal then + minetest.register_tool("3d_armor:helmet_crystal", { + description = "Crystal Helmet", + inventory_image = "3d_armor_inv_helmet_crystal.png", + groups = {armor_head=15, armor_heal=12, armor_use=50, armor_fire=1}, + wear = 0, + }) + minetest.register_tool("3d_armor:chestplate_crystal", { + description = "Crystal Chestplate", + inventory_image = "3d_armor_inv_chestplate_crystal.png", + groups = {armor_torso=20, armor_heal=12, armor_use=50, armor_fire=1}, + wear = 0, + }) + minetest.register_tool("3d_armor:leggings_crystal", { + description = "Crystal Leggings", + inventory_image = "3d_armor_inv_leggings_crystal.png", + groups = {armor_legs=20, armor_heal=12, armor_use=50, armor_fire=1}, + wear = 0, + }) + minetest.register_tool("3d_armor:boots_crystal", { + description = "Crystal Boots", + inventory_image = "3d_armor_inv_boots_crystal.png", + groups = {armor_feet=15, armor_heal=12, armor_use=50, physics_speed=1, physics_jump=0.5, armor_fire=1}, + wear = 0, + }) +end + +for k, v in pairs(ARMOR_MATERIALS) do + minetest.register_craft({ + output = "3d_armor:helmet_"..k, + recipe = { + {v, v, v}, + {v, "", v}, + {"", "", ""}, + }, + }) + minetest.register_craft({ + output = "3d_armor:chestplate_"..k, + recipe = { + {v, "", v}, + {v, v, v}, + {v, v, v}, + }, + }) + minetest.register_craft({ + output = "3d_armor:leggings_"..k, + recipe = { + {v, v, v}, + {v, "", v}, + {v, "", v}, + }, + }) + minetest.register_craft({ + output = "3d_armor:boots_"..k, + recipe = { + {v, "", v}, + {v, "", v}, + }, + }) +end + diff --git a/mods/3d_armor/models/3d_armor_character.b3d b/mods/3d_armor/models/3d_armor_character.b3d new file mode 100644 index 0000000..7c27cae Binary files /dev/null and b/mods/3d_armor/models/3d_armor_character.b3d differ diff --git a/mods/3d_armor/models/3d_armor_character.blend b/mods/3d_armor/models/3d_armor_character.blend new file mode 100644 index 0000000..f61e222 Binary files /dev/null and b/mods/3d_armor/models/3d_armor_character.blend differ diff --git a/mods/3d_armor/textures/3d_armor_boots_admin.png b/mods/3d_armor/textures/3d_armor_boots_admin.png new file mode 100644 index 0000000..a05e4c5 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_admin.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_admin_preview.png b/mods/3d_armor/textures/3d_armor_boots_admin_preview.png new file mode 100644 index 0000000..d61ab25 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_admin_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_bronze.png b/mods/3d_armor/textures/3d_armor_boots_bronze.png new file mode 100644 index 0000000..7cfe378 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_bronze.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_bronze_preview.png b/mods/3d_armor/textures/3d_armor_boots_bronze_preview.png new file mode 100644 index 0000000..6da8019 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_bronze_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_cactus.png b/mods/3d_armor/textures/3d_armor_boots_cactus.png new file mode 100644 index 0000000..7dc43e3 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_cactus.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_cactus_preview.png b/mods/3d_armor/textures/3d_armor_boots_cactus_preview.png new file mode 100644 index 0000000..33f9221 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_cactus_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_crystal.png b/mods/3d_armor/textures/3d_armor_boots_crystal.png new file mode 100644 index 0000000..50bbf20 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_crystal.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_crystal_preview.png b/mods/3d_armor/textures/3d_armor_boots_crystal_preview.png new file mode 100644 index 0000000..a3ab7d1 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_crystal_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_diamond.png b/mods/3d_armor/textures/3d_armor_boots_diamond.png new file mode 100644 index 0000000..6678b16 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_diamond.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_diamond_preview.png b/mods/3d_armor/textures/3d_armor_boots_diamond_preview.png new file mode 100644 index 0000000..eb99c4e Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_diamond_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_gold.png b/mods/3d_armor/textures/3d_armor_boots_gold.png new file mode 100644 index 0000000..2de3966 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_gold.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_gold_preview.png b/mods/3d_armor/textures/3d_armor_boots_gold_preview.png new file mode 100644 index 0000000..5ca40ac Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_gold_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_mithril.png b/mods/3d_armor/textures/3d_armor_boots_mithril.png new file mode 100644 index 0000000..3e4173b Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_mithril.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_mithril_preview.png b/mods/3d_armor/textures/3d_armor_boots_mithril_preview.png new file mode 100644 index 0000000..b0c4684 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_mithril_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_steel.png b/mods/3d_armor/textures/3d_armor_boots_steel.png new file mode 100644 index 0000000..4664be5 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_steel.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_steel_preview.png b/mods/3d_armor/textures/3d_armor_boots_steel_preview.png new file mode 100644 index 0000000..25fc47a Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_steel_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_wood.png b/mods/3d_armor/textures/3d_armor_boots_wood.png new file mode 100644 index 0000000..0ec5d6c Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_wood.png differ diff --git a/mods/3d_armor/textures/3d_armor_boots_wood_preview.png b/mods/3d_armor/textures/3d_armor_boots_wood_preview.png new file mode 100644 index 0000000..53d6d15 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_boots_wood_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_admin.png b/mods/3d_armor/textures/3d_armor_chestplate_admin.png new file mode 100644 index 0000000..404d6e8 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_admin.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_admin_preview.png b/mods/3d_armor/textures/3d_armor_chestplate_admin_preview.png new file mode 100644 index 0000000..09325a5 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_admin_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_bronze.png b/mods/3d_armor/textures/3d_armor_chestplate_bronze.png new file mode 100644 index 0000000..d9c7267 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_bronze.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_bronze_preview.png b/mods/3d_armor/textures/3d_armor_chestplate_bronze_preview.png new file mode 100644 index 0000000..90d887a Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_bronze_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_cactus.png b/mods/3d_armor/textures/3d_armor_chestplate_cactus.png new file mode 100644 index 0000000..ee433de Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_cactus.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_cactus_preview.png b/mods/3d_armor/textures/3d_armor_chestplate_cactus_preview.png new file mode 100644 index 0000000..32bf6f6 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_cactus_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_crystal.png b/mods/3d_armor/textures/3d_armor_chestplate_crystal.png new file mode 100644 index 0000000..e36aa49 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_crystal.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_crystal_preview.png b/mods/3d_armor/textures/3d_armor_chestplate_crystal_preview.png new file mode 100644 index 0000000..c43015c Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_crystal_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_diamond.png b/mods/3d_armor/textures/3d_armor_chestplate_diamond.png new file mode 100644 index 0000000..81a7b21 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_diamond.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_diamond_preview.png b/mods/3d_armor/textures/3d_armor_chestplate_diamond_preview.png new file mode 100644 index 0000000..17e2eb8 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_diamond_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_gold.png b/mods/3d_armor/textures/3d_armor_chestplate_gold.png new file mode 100644 index 0000000..91b1631 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_gold.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_gold_preview.png b/mods/3d_armor/textures/3d_armor_chestplate_gold_preview.png new file mode 100644 index 0000000..cb11321 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_gold_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_mithril.png b/mods/3d_armor/textures/3d_armor_chestplate_mithril.png new file mode 100644 index 0000000..2bbeab8 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_mithril.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_mithril_preview.png b/mods/3d_armor/textures/3d_armor_chestplate_mithril_preview.png new file mode 100644 index 0000000..eca051c Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_mithril_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_steel.png b/mods/3d_armor/textures/3d_armor_chestplate_steel.png new file mode 100644 index 0000000..23cdbda Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_steel.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_steel_preview.png b/mods/3d_armor/textures/3d_armor_chestplate_steel_preview.png new file mode 100644 index 0000000..0e45907 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_steel_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_wood.png b/mods/3d_armor/textures/3d_armor_chestplate_wood.png new file mode 100644 index 0000000..ea7a1d7 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_wood.png differ diff --git a/mods/3d_armor/textures/3d_armor_chestplate_wood_preview.png b/mods/3d_armor/textures/3d_armor_chestplate_wood_preview.png new file mode 100644 index 0000000..cdca575 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_chestplate_wood_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_admin.png b/mods/3d_armor/textures/3d_armor_helmet_admin.png new file mode 100644 index 0000000..3a75a85 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_admin.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_admin_preview.png b/mods/3d_armor/textures/3d_armor_helmet_admin_preview.png new file mode 100644 index 0000000..51ecb9b Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_admin_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_bronze.png b/mods/3d_armor/textures/3d_armor_helmet_bronze.png new file mode 100644 index 0000000..91d15d7 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_bronze.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_bronze_preview.png b/mods/3d_armor/textures/3d_armor_helmet_bronze_preview.png new file mode 100644 index 0000000..61fa1af Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_bronze_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_cactus.png b/mods/3d_armor/textures/3d_armor_helmet_cactus.png new file mode 100644 index 0000000..3021f20 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_cactus.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_cactus_preview.png b/mods/3d_armor/textures/3d_armor_helmet_cactus_preview.png new file mode 100644 index 0000000..4e3bfe2 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_cactus_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_crystal.png b/mods/3d_armor/textures/3d_armor_helmet_crystal.png new file mode 100644 index 0000000..7a2c774 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_crystal.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_crystal_preview.png b/mods/3d_armor/textures/3d_armor_helmet_crystal_preview.png new file mode 100644 index 0000000..451a15d Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_crystal_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_diamond.png b/mods/3d_armor/textures/3d_armor_helmet_diamond.png new file mode 100644 index 0000000..e1768b3 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_diamond.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_diamond_preview.png b/mods/3d_armor/textures/3d_armor_helmet_diamond_preview.png new file mode 100644 index 0000000..33a273a Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_diamond_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_gold.png b/mods/3d_armor/textures/3d_armor_helmet_gold.png new file mode 100644 index 0000000..4d701b4 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_gold.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_gold_preview.png b/mods/3d_armor/textures/3d_armor_helmet_gold_preview.png new file mode 100644 index 0000000..d2e7ac8 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_gold_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_mithril.png b/mods/3d_armor/textures/3d_armor_helmet_mithril.png new file mode 100644 index 0000000..916e69d Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_mithril.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_mithril_preview.png b/mods/3d_armor/textures/3d_armor_helmet_mithril_preview.png new file mode 100644 index 0000000..a331f6a Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_mithril_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_steel.png b/mods/3d_armor/textures/3d_armor_helmet_steel.png new file mode 100644 index 0000000..e0a5afd Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_steel.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_steel_preview.png b/mods/3d_armor/textures/3d_armor_helmet_steel_preview.png new file mode 100644 index 0000000..2c8721c Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_steel_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_wood.png b/mods/3d_armor/textures/3d_armor_helmet_wood.png new file mode 100644 index 0000000..fd5f712 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_wood.png differ diff --git a/mods/3d_armor/textures/3d_armor_helmet_wood_preview.png b/mods/3d_armor/textures/3d_armor_helmet_wood_preview.png new file mode 100644 index 0000000..fe1cead Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_helmet_wood_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_boots_admin.png b/mods/3d_armor/textures/3d_armor_inv_boots_admin.png new file mode 100644 index 0000000..f94c844 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_boots_admin.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_boots_bronze.png b/mods/3d_armor/textures/3d_armor_inv_boots_bronze.png new file mode 100644 index 0000000..7f5f968 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_boots_bronze.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_boots_cactus.png b/mods/3d_armor/textures/3d_armor_inv_boots_cactus.png new file mode 100644 index 0000000..b665eb8 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_boots_cactus.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_boots_crystal.png b/mods/3d_armor/textures/3d_armor_inv_boots_crystal.png new file mode 100644 index 0000000..5709a17 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_boots_crystal.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_boots_diamond.png b/mods/3d_armor/textures/3d_armor_inv_boots_diamond.png new file mode 100644 index 0000000..6bcd620 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_boots_diamond.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_boots_gold.png b/mods/3d_armor/textures/3d_armor_inv_boots_gold.png new file mode 100644 index 0000000..8598cf9 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_boots_gold.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_boots_mithril.png b/mods/3d_armor/textures/3d_armor_inv_boots_mithril.png new file mode 100644 index 0000000..a4c180d Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_boots_mithril.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_boots_steel.png b/mods/3d_armor/textures/3d_armor_inv_boots_steel.png new file mode 100644 index 0000000..77286b5 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_boots_steel.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_boots_wood.png b/mods/3d_armor/textures/3d_armor_inv_boots_wood.png new file mode 100644 index 0000000..66993a1 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_boots_wood.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_chestplate_admin.png b/mods/3d_armor/textures/3d_armor_inv_chestplate_admin.png new file mode 100644 index 0000000..29f3897 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_chestplate_admin.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_chestplate_bronze.png b/mods/3d_armor/textures/3d_armor_inv_chestplate_bronze.png new file mode 100644 index 0000000..da2f3e0 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_chestplate_bronze.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_chestplate_cactus.png b/mods/3d_armor/textures/3d_armor_inv_chestplate_cactus.png new file mode 100644 index 0000000..a695e78 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_chestplate_cactus.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_chestplate_crystal.png b/mods/3d_armor/textures/3d_armor_inv_chestplate_crystal.png new file mode 100644 index 0000000..4d23066 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_chestplate_crystal.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_chestplate_diamond.png b/mods/3d_armor/textures/3d_armor_inv_chestplate_diamond.png new file mode 100644 index 0000000..eee800b Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_chestplate_diamond.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_chestplate_gold.png b/mods/3d_armor/textures/3d_armor_inv_chestplate_gold.png new file mode 100644 index 0000000..1dddc3d Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_chestplate_gold.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_chestplate_mithril.png b/mods/3d_armor/textures/3d_armor_inv_chestplate_mithril.png new file mode 100644 index 0000000..e4c50a7 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_chestplate_mithril.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_chestplate_steel.png b/mods/3d_armor/textures/3d_armor_inv_chestplate_steel.png new file mode 100644 index 0000000..421b3e3 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_chestplate_steel.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_chestplate_wood.png b/mods/3d_armor/textures/3d_armor_inv_chestplate_wood.png new file mode 100644 index 0000000..434374f Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_chestplate_wood.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_helmet_admin.png b/mods/3d_armor/textures/3d_armor_inv_helmet_admin.png new file mode 100644 index 0000000..e019702 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_helmet_admin.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_helmet_bronze.png b/mods/3d_armor/textures/3d_armor_inv_helmet_bronze.png new file mode 100644 index 0000000..53cdaf1 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_helmet_bronze.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_helmet_cactus.png b/mods/3d_armor/textures/3d_armor_inv_helmet_cactus.png new file mode 100644 index 0000000..746c264 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_helmet_cactus.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_helmet_crystal.png b/mods/3d_armor/textures/3d_armor_inv_helmet_crystal.png new file mode 100644 index 0000000..8a29eec Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_helmet_crystal.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_helmet_diamond.png b/mods/3d_armor/textures/3d_armor_inv_helmet_diamond.png new file mode 100644 index 0000000..2eb3a5c Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_helmet_diamond.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_helmet_gold.png b/mods/3d_armor/textures/3d_armor_inv_helmet_gold.png new file mode 100644 index 0000000..e8f83d8 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_helmet_gold.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_helmet_mithril.png b/mods/3d_armor/textures/3d_armor_inv_helmet_mithril.png new file mode 100644 index 0000000..abdd0ca Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_helmet_mithril.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_helmet_steel.png b/mods/3d_armor/textures/3d_armor_inv_helmet_steel.png new file mode 100644 index 0000000..4c636f2 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_helmet_steel.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_helmet_wood.png b/mods/3d_armor/textures/3d_armor_inv_helmet_wood.png new file mode 100644 index 0000000..e8ee2fe Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_helmet_wood.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_leggings_admin.png b/mods/3d_armor/textures/3d_armor_inv_leggings_admin.png new file mode 100644 index 0000000..04b64c0 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_leggings_admin.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_leggings_bronze.png b/mods/3d_armor/textures/3d_armor_inv_leggings_bronze.png new file mode 100644 index 0000000..b574108 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_leggings_bronze.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_leggings_cactus.png b/mods/3d_armor/textures/3d_armor_inv_leggings_cactus.png new file mode 100644 index 0000000..c011db8 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_leggings_cactus.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_leggings_crystal.png b/mods/3d_armor/textures/3d_armor_inv_leggings_crystal.png new file mode 100644 index 0000000..5b3f703 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_leggings_crystal.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_leggings_diamond.png b/mods/3d_armor/textures/3d_armor_inv_leggings_diamond.png new file mode 100644 index 0000000..2ab1c8e Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_leggings_diamond.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_leggings_gold.png b/mods/3d_armor/textures/3d_armor_inv_leggings_gold.png new file mode 100644 index 0000000..7424833 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_leggings_gold.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_leggings_mithril.png b/mods/3d_armor/textures/3d_armor_inv_leggings_mithril.png new file mode 100644 index 0000000..b9b1b3c Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_leggings_mithril.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_leggings_steel.png b/mods/3d_armor/textures/3d_armor_inv_leggings_steel.png new file mode 100644 index 0000000..77ee17e Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_leggings_steel.png differ diff --git a/mods/3d_armor/textures/3d_armor_inv_leggings_wood.png b/mods/3d_armor/textures/3d_armor_inv_leggings_wood.png new file mode 100644 index 0000000..f162e51 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_inv_leggings_wood.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_admin.png b/mods/3d_armor/textures/3d_armor_leggings_admin.png new file mode 100644 index 0000000..6752256 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_admin.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_admin_preview.png b/mods/3d_armor/textures/3d_armor_leggings_admin_preview.png new file mode 100644 index 0000000..fe47999 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_admin_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_bronze.png b/mods/3d_armor/textures/3d_armor_leggings_bronze.png new file mode 100644 index 0000000..3394288 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_bronze.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_bronze_preview.png b/mods/3d_armor/textures/3d_armor_leggings_bronze_preview.png new file mode 100644 index 0000000..c4aa7b9 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_bronze_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_cactus.png b/mods/3d_armor/textures/3d_armor_leggings_cactus.png new file mode 100644 index 0000000..7d22404 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_cactus.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_cactus_preview.png b/mods/3d_armor/textures/3d_armor_leggings_cactus_preview.png new file mode 100644 index 0000000..1a24863 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_cactus_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_crystal.png b/mods/3d_armor/textures/3d_armor_leggings_crystal.png new file mode 100644 index 0000000..cc61390 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_crystal.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_crystal_preview.png b/mods/3d_armor/textures/3d_armor_leggings_crystal_preview.png new file mode 100644 index 0000000..559d008 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_crystal_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_diamond.png b/mods/3d_armor/textures/3d_armor_leggings_diamond.png new file mode 100644 index 0000000..a646ba2 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_diamond.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_diamond_preview.png b/mods/3d_armor/textures/3d_armor_leggings_diamond_preview.png new file mode 100644 index 0000000..a6ac2e2 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_diamond_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_gold.png b/mods/3d_armor/textures/3d_armor_leggings_gold.png new file mode 100644 index 0000000..d207dff Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_gold.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_gold_preview.png b/mods/3d_armor/textures/3d_armor_leggings_gold_preview.png new file mode 100644 index 0000000..75e6ca4 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_gold_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_mithril.png b/mods/3d_armor/textures/3d_armor_leggings_mithril.png new file mode 100644 index 0000000..ffff3ee Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_mithril.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_mithril_preview.png b/mods/3d_armor/textures/3d_armor_leggings_mithril_preview.png new file mode 100644 index 0000000..ee99178 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_mithril_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_steel.png b/mods/3d_armor/textures/3d_armor_leggings_steel.png new file mode 100644 index 0000000..78d5874 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_steel.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_steel_preview.png b/mods/3d_armor/textures/3d_armor_leggings_steel_preview.png new file mode 100644 index 0000000..3e3ec85 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_steel_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_wood.png b/mods/3d_armor/textures/3d_armor_leggings_wood.png new file mode 100644 index 0000000..3880fc0 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_wood.png differ diff --git a/mods/3d_armor/textures/3d_armor_leggings_wood_preview.png b/mods/3d_armor/textures/3d_armor_leggings_wood_preview.png new file mode 100644 index 0000000..f8ee8e8 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_leggings_wood_preview.png differ diff --git a/mods/3d_armor/textures/3d_armor_trans.png b/mods/3d_armor/textures/3d_armor_trans.png new file mode 100644 index 0000000..4d7beb8 Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_trans.png differ diff --git a/mods/3d_armor/textures/3d_armor_ui_form.png b/mods/3d_armor/textures/3d_armor_ui_form.png new file mode 100644 index 0000000..6e5cfee Binary files /dev/null and b/mods/3d_armor/textures/3d_armor_ui_form.png differ diff --git a/mods/3d_armor/textures/character_preview.png b/mods/3d_armor/textures/character_preview.png new file mode 100644 index 0000000..4ac4602 Binary files /dev/null and b/mods/3d_armor/textures/character_preview.png differ diff --git a/mods/3d_armor/textures/inventory_plus_armor.png b/mods/3d_armor/textures/inventory_plus_armor.png new file mode 100644 index 0000000..6cde640 Binary files /dev/null and b/mods/3d_armor/textures/inventory_plus_armor.png differ diff --git a/mods/3d_armor_stand/LICENSE.txt b/mods/3d_armor_stand/LICENSE.txt new file mode 100644 index 0000000..fe6dbd8 --- /dev/null +++ b/mods/3d_armor_stand/LICENSE.txt @@ -0,0 +1,7 @@ +[mod] 3d Armor Stand [3d_armor_stand] +===================================== + +License Source Code: (C) 2016-2017 Stuart Jones - LGPL v2.1 + +Lecense Media: (C) 2016-2017 Stuart Jones - CC BY-SA 3.0 + diff --git a/mods/3d_armor_stand/README.txt b/mods/3d_armor_stand/README.txt new file mode 100644 index 0000000..6a98ab9 --- /dev/null +++ b/mods/3d_armor_stand/README.txt @@ -0,0 +1,21 @@ +[mod] 3d Armor Stand [3d_armor_stand] +===================================== + +Depends: 3d_armor + +Adds a chest-like armor stand for armor storage and display. + +Crafting +-------- + +F = Wooden Fence [default:fence_wood] +S = Steel Ingot [default:steel_ingot] + ++---+---+---+ +| | F | | ++---+---+---+ +| | F | | ++---+---+---+ +| S | S | S | ++---+---+---+ + diff --git a/mods/3d_armor_stand/depends.txt b/mods/3d_armor_stand/depends.txt new file mode 100644 index 0000000..fdbb290 --- /dev/null +++ b/mods/3d_armor_stand/depends.txt @@ -0,0 +1,2 @@ +3d_armor + diff --git a/mods/3d_armor_stand/init.lua b/mods/3d_armor_stand/init.lua new file mode 100644 index 0000000..0a4e91c --- /dev/null +++ b/mods/3d_armor_stand/init.lua @@ -0,0 +1,301 @@ +local armor_stand_formspec = "size[8,7]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + default.get_hotbar_bg(0,3) .. + "list[current_name;armor_head;3,0.5;1,1;]" .. + "list[current_name;armor_torso;4,0.5;1,1;]" .. + "list[current_name;armor_legs;3,1.5;1,1;]" .. + "list[current_name;armor_feet;4,1.5;1,1;]" .. + "image[3,0.5;1,1;3d_armor_stand_head.png]" .. + "image[4,0.5;1,1;3d_armor_stand_torso.png]" .. + "image[3,1.5;1,1;3d_armor_stand_legs.png]" .. + "image[4,1.5;1,1;3d_armor_stand_feet.png]" .. + "list[current_player;main;0,3;8,1;]" .. + "list[current_player;main;0,4.25;8,3;8]" + +local elements = {"head", "torso", "legs", "feet"} + +local function get_stand_object(pos) + local object = nil + local objects = minetest.get_objects_inside_radius(pos, 0.5) or {} + for _, obj in pairs(objects) do + local ent = obj:get_luaentity() + if ent then + if ent.name == "3d_armor_stand:armor_entity" then + -- Remove duplicates + if object then + obj:remove() + else + object = obj + end + end + end + end + return object +end + +local function update_entity(pos) + local node = minetest.get_node(pos) + local object = get_stand_object(pos) + if object then + if not string.find(node.name, "3d_armor_stand:") then + object:remove() + return + end + else + object = minetest.add_entity(pos, "3d_armor_stand:armor_entity") + end + if object then + local texture = "3d_armor_trans.png" + local textures = {} + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local yaw = 0 + if inv then + for _, element in pairs(elements) do + local stack = inv:get_stack("armor_"..element, 1) + if stack:get_count() == 1 then + local item = stack:get_name() or "" + local def = stack:get_definition() or {} + local groups = def.groups or {} + if groups["armor_"..element] then + local texture = def.texture or item:gsub("%:", "_") + table.insert(textures, texture..".png") + end + end + end + end + if #textures > 0 then + texture = table.concat(textures, "^") + end + if node.param2 then + local rot = node.param2 % 4 + if rot == 1 then + yaw = 3 * math.pi / 2 + elseif rot == 2 then + yaw = math.pi + elseif rot == 3 then + yaw = math.pi / 2 + end + end + object:setyaw(yaw) + object:set_properties({textures={texture}}) + end +end + +local function has_locked_armor_stand_privilege(meta, player) + local name = "" + if player then + if minetest.check_player_privs(player, "protection_bypass") then + return true + end + name = player:get_player_name() + end + if name ~= meta:get_string("owner") then + return false + end + return true +end + +minetest.register_node("3d_armor_stand:armor_stand", { + description = "Armor stand", + drawtype = "mesh", + mesh = "3d_armor_stand.obj", + tiles = {"default_wood.png", "default_steel_block.png"}, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.5,-0.5,-0.5, 0.5,1.4,0.5} + }, + groups = {choppy=2, oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", armor_stand_formspec) + meta:set_string("infotext", "Armor Stand") + local inv = meta:get_inventory() + for _, element in pairs(elements) do + inv:set_size("armor_"..element, 1) + end + end, + can_dig = function(pos, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + for _, element in pairs(elements) do + if not inv:is_empty("armor_"..element) then + return false + end + end + return true + end, + after_place_node = function(pos) + minetest.add_entity(pos, "3d_armor_stand:armor_entity") + end, + allow_metadata_inventory_put = function(pos, listname, index, stack) + local def = stack:get_definition() or {} + local groups = def.groups or {} + if groups[listname] then + return 1 + end + return 0 + end, + allow_metadata_inventory_move = function(pos) + return 0 + end, + on_metadata_inventory_put = function(pos) + update_entity(pos) + end, + on_metadata_inventory_take = function(pos) + update_entity(pos) + end, + after_destruct = function(pos) + update_entity(pos) + end, + on_blast = function(pos) + local object = get_stand_object(pos) + if object then + object:remove() + end + minetest.after(1, function(pos) + update_entity(pos) + end, pos) + end, +}) + +minetest.register_node("3d_armor_stand:locked_armor_stand", { + description = "Locked Armor stand", + drawtype = "mesh", + mesh = "3d_armor_stand.obj", + tiles = {"default_wood.png", "default_steel_block.png"}, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.5,-0.5,-0.5, 0.5,1.4,0.5} + }, + groups = {choppy=2, oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", armor_stand_formspec) + meta:set_string("infotext", "Armor Stand") + meta:set_string("owner", "") + local inv = meta:get_inventory() + for _, element in pairs(elements) do + inv:set_size("armor_"..element, 1) + end + end, + can_dig = function(pos, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + for _, element in pairs(elements) do + if not inv:is_empty("armor_"..element) then + return false + end + end + return true + end, + after_place_node = function(pos, placer) + minetest.add_entity(pos, "3d_armor_stand:armor_entity") + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Armor Stand (owned by " .. + meta:get_string("owner") .. ")") + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not has_locked_armor_stand_privilege(meta, player) then + return 0 + end + local def = stack:get_definition() or {} + local groups = def.groups or {} + if groups[listname] then + return 1 + end + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not has_locked_armor_stand_privilege(meta, player) then + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_move = function(pos) + return 0 + end, + on_metadata_inventory_put = function(pos) + update_entity(pos) + end, + on_metadata_inventory_take = function(pos) + update_entity(pos) + end, + after_destruct = function(pos) + update_entity(pos) + end, + on_blast = function(pos) + local object = get_stand_object(pos) + if object then + object:remove() + end + minetest.after(1, function(pos) + update_entity(pos) + end, pos) + end, +}) + +minetest.register_entity("3d_armor_stand:armor_entity", { + physical = true, + visual = "mesh", + mesh = "3d_armor_entity.obj", + visual_size = {x=1, y=1}, + collisionbox = {-0.1,-0.4,-0.1, 0.1,1.3,0.1}, + textures = {"3d_armor_trans.png"}, + pos = nil, + timer = 0, + on_activate = function(self) + local pos = self.object:getpos() + if pos then + self.pos = vector.round(pos) + update_entity(pos) + end + end, + on_step = function(self, dtime) + if not self.pos then + return + end + self.timer = self.timer + dtime + if self.timer > 1 then + self.timer = 0 + local pos = self.object:getpos() + if pos then + if vector.equals(vector.round(pos), self.pos) then + return + end + end + update_entity(self.pos) + self.object:remove() + end + end, +}) + +minetest.register_craft({ + output = "3d_armor_stand:armor_stand", + recipe = { + {"", "default:fence_wood", ""}, + {"", "default:fence_wood", ""}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "3d_armor_stand:locked_armor_stand", + recipe = { + {"3d_armor_stand:armor_stand", "default:steel_ingot"}, + } +}) + diff --git a/mods/3d_armor_stand/models/3d_armor_entity.obj b/mods/3d_armor_stand/models/3d_armor_entity.obj new file mode 100644 index 0000000..052f692 --- /dev/null +++ b/mods/3d_armor_stand/models/3d_armor_entity.obj @@ -0,0 +1,193 @@ +# Blender v2.73 (sub 0) OBJ File: '3d_armor_entity_3.blend' +# www.blender.org +mtllib 3d_armor_entity.mtl +o Player_Cube +v 2.200000 9.763893 1.200000 +v 2.200000 9.763893 -1.200000 +v 2.200000 2.663871 1.200000 +v 2.200000 2.663871 -1.200000 +v -2.200000 9.763893 -1.200000 +v -2.200000 9.763893 1.200000 +v -2.200000 2.663871 -1.200000 +v -2.200000 2.663871 1.200000 +v 2.300000 13.863962 2.300000 +v 2.300000 13.863962 -2.300000 +v 2.300000 9.263885 2.300000 +v 2.300000 9.263885 -2.300000 +v -2.300000 13.863962 -2.300000 +v -2.300000 13.863962 2.300000 +v -2.300000 9.263885 -2.300000 +v -2.300000 9.263885 2.300000 +v -2.322686 2.473175 -1.300000 +v -2.322686 2.473175 1.300000 +v -4.713554 2.682348 1.300000 +v -4.713554 2.682348 -1.300000 +v -1.686446 9.745432 -1.300000 +v -1.686446 9.745432 1.300000 +v -4.077313 9.954605 1.300000 +v -4.077313 9.954605 -1.300000 +v 4.077313 9.954605 -1.300000 +v 4.077313 9.954605 1.300000 +v 1.686446 9.745432 1.300000 +v 1.686446 9.745432 -1.300000 +v 4.713554 2.682348 -1.300000 +v 4.713554 2.682348 1.300000 +v 2.322686 2.473175 1.300000 +v 2.322686 2.473175 -1.300000 +v 0.139099 2.938947 -1.200000 +v 0.139099 2.938947 1.200000 +v 0.261266 -4.059988 1.200000 +v 0.261266 -4.059988 -1.200000 +v 2.660901 -4.018101 1.190000 +v 2.660901 -4.018101 -1.210000 +v 2.538733 2.980834 1.190000 +v 2.538733 2.980834 -1.210000 +v -0.139099 2.938947 -1.200000 +v -0.139099 2.938947 1.200000 +v -0.261266 -4.059988 1.200000 +v -0.261266 -4.059988 -1.200000 +v -2.538734 2.980834 -1.210000 +v -2.538734 2.980834 1.190000 +v -2.660901 -4.018101 -1.210000 +v -2.660901 -4.018101 1.190000 +v -2.799999 -4.387500 1.390000 +v -2.799999 -4.387500 -1.410000 +v -2.800000 -0.812499 1.390000 +v -2.800000 -0.812499 -1.410000 +v -0.000000 -4.387500 -1.400000 +v -0.000000 -4.387500 1.400000 +v -0.000000 -0.812499 1.400000 +v -0.000000 -0.812499 -1.400000 +v 2.800000 -0.812499 -1.410000 +v 2.800000 -0.812499 1.390000 +v 2.799999 -4.387500 -1.410000 +v 2.799999 -4.387500 1.390000 +v 0.000000 -4.387500 -1.400000 +v 0.000000 -4.387500 1.400000 +v 0.000000 -0.812499 1.400000 +v 0.000000 -0.812499 -1.400000 +v 2.267006 13.830965 2.267006 +v 2.267006 13.830965 -2.267006 +v 2.267006 9.296881 2.267006 +v 2.267006 9.296881 -2.267006 +v -2.267006 13.830965 -2.267006 +v -2.267006 13.830965 2.267006 +v -2.267006 9.296881 -2.267006 +v -2.267006 9.296881 2.267006 +vt 0.250000 0.375000 +vt 0.250000 0.000000 +vt 0.312500 0.000000 +vt 0.312500 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.500000 +vt 0.312500 0.500000 +vt 0.562500 0.375000 +vt 0.562500 0.500000 +vt 0.437500 0.000000 +vt 0.500000 0.000000 +vt 0.500000 0.375000 +vt 0.625000 0.000000 +vt 0.625000 0.375000 +vt 0.500000 0.750000 +vt 0.500000 0.500000 +vt 0.625000 0.500000 +vt 0.625000 0.750000 +vt 0.750000 0.750000 +vt 0.750000 1.000000 +vt 0.625000 1.000000 +vt 0.875000 0.750000 +vt 0.875000 1.000000 +vt 0.750000 0.500000 +vt 0.875000 0.500000 +vt 1.000000 0.750000 +vt 1.000000 0.500000 +vt 0.750000 0.375000 +vt 0.812500 0.500000 +vt 0.812500 0.375000 +vt 0.687500 0.375000 +vt 0.687500 0.500000 +vt 0.687500 0.000000 +vt 0.750000 0.000000 +vt 0.812500 0.000000 +vt 0.875000 0.375000 +vt 0.875000 0.000000 +vt 0.125000 0.375000 +vt 0.062500 0.375000 +vt 0.062500 0.500000 +vt 0.125000 0.500000 +vt 0.187500 0.375000 +vt 0.187500 0.500000 +vt 0.000000 0.375000 +vt 0.000000 0.000000 +vt 0.062500 0.000000 +vt 0.187500 0.000000 +vt 0.125000 0.000000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.875000 +vt 0.250000 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.656250 +vt 0.250000 0.656250 +vt 0.500000 0.875000 +vt 0.437500 0.656250 +vt 0.500000 0.656250 +vt 0.375000 0.656250 +vt 0.312500 1.000000 +usemtl Armor +s off +f 1/1 3/2 4/3 2/4 +f 5/5 6/6 1/7 2/4 +f 8/6 7/5 4/8 3/9 +f 5/5 2/4 4/3 7/10 +f 7/10 8/11 6/12 5/5 +f 8/11 3/13 1/14 6/12 +f 9/15 11/16 12/17 10/18 +f 13/19 14/20 9/21 10/18 +f 12/22 11/23 16/20 15/19 +f 13/19 10/18 12/17 15/24 +f 14/22 13/19 15/24 16/25 +f 9/26 14/22 16/25 11/27 +f 17/28 18/24 19/29 20/30 +f 24/31 23/32 22/24 21/28 +f 23/31 24/14 20/13 19/33 +f 24/31 21/28 17/34 20/33 +f 21/28 22/30 18/35 17/34 +f 22/30 23/36 19/37 18/35 +f 27/30 31/35 30/37 26/36 +f 28/28 32/34 31/35 27/30 +f 25/31 29/33 32/34 28/28 +f 26/31 30/33 29/13 25/14 +f 25/31 28/28 27/24 26/32 +f 32/28 29/30 30/29 31/24 +f 40/38 33/39 34/40 39/41 +f 36/42 38/38 37/41 35/43 +f 39/44 37/45 38/46 40/39 +f 34/1 35/2 37/47 39/42 +f 40/38 38/48 36/46 33/39 +f 33/42 36/47 35/48 34/38 +f 45/38 46/41 42/40 41/39 +f 41/42 42/38 43/48 44/47 +f 45/38 41/39 44/46 47/48 +f 42/1 46/42 48/47 43/2 +f 46/44 45/39 47/46 48/45 +f 44/42 43/43 48/41 47/38 +f 53/49 54/50 49/51 50/52 +f 51/53 52/54 50/55 49/56 +f 55/57 51/49 49/58 54/59 +f 52/52 56/54 53/55 50/60 +f 56/49 55/52 54/60 53/58 +f 52/52 51/51 55/61 56/54 +f 64/49 61/58 62/60 63/52 +f 57/52 59/60 61/55 64/54 +f 63/57 62/59 60/58 58/49 +f 58/53 60/56 59/55 57/54 +f 61/49 59/52 60/51 62/50 +f 57/52 64/54 63/61 58/51 +f 65/15 66/18 68/17 67/16 +f 69/19 66/18 65/21 70/20 +f 68/22 71/19 72/20 67/23 +f 69/19 71/24 68/17 66/18 +f 70/22 72/25 71/24 69/19 +f 65/26 67/27 72/25 70/22 diff --git a/mods/3d_armor_stand/models/3d_armor_stand.obj b/mods/3d_armor_stand/models/3d_armor_stand.obj new file mode 100644 index 0000000..89f3793 --- /dev/null +++ b/mods/3d_armor_stand/models/3d_armor_stand.obj @@ -0,0 +1,191 @@ +# Blender v2.73 (sub 0) OBJ File: '3d_armor_stand.blend' +# www.blender.org +mtllib 3d_armor_stand.mtl +o Player_Cube +v 0.062500 1.312500 -0.062500 +v 0.062500 1.312500 0.062500 +v -0.062500 1.312500 -0.062500 +v -0.062500 1.312500 0.062500 +v -0.187500 -0.437504 0.062500 +v -0.187500 -0.437504 -0.062500 +v -0.187500 0.937500 0.062500 +v -0.187500 0.937500 -0.062500 +v -0.250000 0.250000 0.062500 +v -0.250000 0.250000 -0.062500 +v -0.250000 0.125003 0.062500 +v -0.250000 0.125003 -0.062500 +v 0.250000 0.250000 0.062500 +v 0.250000 0.250000 -0.062500 +v 0.250000 0.125003 0.062500 +v 0.250000 0.125003 -0.062500 +v -0.062500 -0.437504 -0.062500 +v -0.062500 -0.437504 0.062500 +v -0.062500 0.937500 0.062500 +v -0.062500 0.937500 -0.062500 +v 0.062500 0.250000 0.062500 +v 0.062500 0.250000 -0.062500 +v 0.187500 0.250000 -0.062500 +v 0.187500 0.250000 0.062500 +v 0.187500 0.937500 -0.062500 +v 0.187500 0.937500 0.062500 +v 0.187500 -0.437504 -0.062500 +v 0.187500 -0.437504 0.062500 +v 0.062500 -0.437504 -0.062500 +v 0.062500 -0.437504 0.062500 +v 0.062500 0.937500 0.062500 +v 0.062500 0.937500 -0.062500 +v -0.062500 0.812500 -0.062500 +v -0.187500 0.812500 -0.062500 +v -0.062500 0.812500 0.062500 +v -0.187500 0.812500 0.062500 +v 0.062500 0.812500 -0.062500 +v 0.187500 0.812500 -0.062500 +v 0.187500 0.812500 0.062500 +v 0.062500 0.812500 0.062500 +v 0.375000 0.812500 0.062500 +v 0.375000 0.812500 -0.062500 +v 0.375000 0.937500 0.062500 +v 0.375000 0.937500 -0.062500 +v 0.500000 -0.437500 -0.500000 +v 0.500000 -0.437500 0.500000 +v -0.500000 -0.437500 -0.500000 +v -0.500000 -0.437500 0.500000 +v -0.062500 0.250000 -0.062500 +v -0.187500 0.250000 -0.062500 +v -0.062500 0.250000 0.062500 +v -0.187500 0.250000 0.062500 +v -0.375000 0.937500 0.062500 +v -0.375000 0.937500 -0.062500 +v -0.375000 0.812500 -0.062500 +v -0.375000 0.812500 0.062500 +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.187500 0.124998 0.062500 +v 0.187500 0.124998 -0.062500 +v 0.062500 0.124998 0.062500 +v 0.062500 0.124998 -0.062500 +v -0.062500 0.124998 -0.062500 +v -0.187500 0.124998 -0.062500 +v -0.062500 0.124998 0.062500 +v -0.187500 0.124998 0.062500 +vt 0.000000 0.000000 +vt 0.875000 0.000000 +vt 0.875000 0.250000 +vt 0.000000 0.250000 +vt 0.125000 0.500000 +vt 0.125000 0.750000 +vt -0.000000 0.750000 +vt -0.000000 0.500000 +vt 0.750000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.250000 +vt 0.750000 0.250000 +vt 0.375000 0.500000 +vt 0.375000 0.750000 +vt 0.875000 0.750000 +vt 0.875000 1.000000 +vt 0.000000 1.000000 +vt 0.875000 0.500000 +vt 0.750000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.750000 +vt 0.750000 0.750000 +vt 0.625000 1.000000 +vt 0.375000 1.000000 +vt 0.625000 0.750000 +vt 0.625000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.750000 +vt 0.625000 0.250000 +vt 0.625000 -0.000000 +vt 0.250000 0.250000 +vt 0.250000 0.000000 +vt 0.375000 0.250000 +vt 0.250000 1.000000 +vt 1.000000 1.000000 +vt 0.750000 1.000000 +vt 0.375000 -0.000000 +vt 0.125000 0.250000 +vt 0.125000 1.000000 +vt 0.125000 0.000000 +vt -0.000000 0.937500 +vt 1.000000 0.937500 +vt 0.937500 0.000000 +vt 0.937500 1.000000 +vt 1.000000 0.062500 +vt 0.000000 0.062500 +vt 0.062500 0.000000 +vt 0.062500 1.000000 +g Player_Cube_Stand +usemtl Stand +s off +f 64/1 29/2 30/3 63/4 +f 52/5 50/6 10/7 9/8 +f 17/9 18/10 5/11 6/12 +f 68/3 66/2 6/1 5/4 +f 7/13 8/14 54/7 53/8 +f 67/15 68/16 5/17 18/7 +f 62/4 27/3 29/18 64/8 +f 66/3 65/18 17/8 6/4 +f 9/19 10/20 12/21 11/22 +f 63/7 30/15 28/16 61/17 +f 65/18 67/15 18/7 17/8 +f 61/8 28/18 27/15 62/7 +f 19/23 7/24 36/14 35/25 +f 8/14 7/13 19/26 20/25 +f 23/15 24/18 13/20 14/21 +f 13/8 15/27 16/28 14/7 +f 39/29 38/30 42/10 41/11 +f 29/31 27/4 28/1 30/32 +f 25/28 26/27 43/26 44/25 +f 38/12 25/19 44/13 42/33 +f 25/28 32/7 31/8 26/27 +f 8/26 20/13 33/33 34/29 +f 25/19 38/12 37/11 32/20 +f 31/17 40/7 39/28 26/34 +f 26/34 39/28 41/25 43/23 +f 43/7 41/28 42/34 44/17 +f 53/22 54/21 55/35 56/36 +f 36/14 7/24 53/17 56/7 +f 8/26 34/29 55/11 54/20 +f 34/37 36/33 56/4 55/1 +f 51/13 21/26 22/25 49/14 +f 20/4 3/12 1/19 32/8 +f 40/15 31/16 19/23 35/25 +f 35/29 33/30 37/2 40/3 +f 33/33 20/13 32/5 37/38 +f 3/14 4/24 2/23 1/25 +f 19/12 4/4 3/1 20/9 +f 31/36 2/17 4/7 19/22 +f 32/22 1/7 2/8 31/19 +f 23/5 62/38 64/33 22/13 +f 21/14 63/24 61/39 24/6 +f 61/3 62/2 16/10 15/11 +f 62/38 23/5 14/8 16/4 +f 24/6 61/39 15/17 13/7 +f 50/18 66/3 12/11 10/20 +f 66/40 68/38 11/4 12/1 +f 50/18 49/26 65/29 66/3 +f 51/25 52/15 68/16 67/23 +f 68/16 52/15 9/21 11/35 +f 49/26 22/13 64/33 65/29 +f 51/25 67/23 63/24 21/14 +f 67/33 65/37 64/30 63/29 +f 37/1 22/2 21/3 40/4 +f 38/4 23/3 22/18 37/8 +f 40/7 21/15 24/16 39/17 +f 39/8 24/18 23/15 38/7 +f 36/2 34/3 50/4 52/1 +f 35/15 36/16 52/17 51/7 +f 34/3 33/18 49/8 50/4 +f 33/18 35/15 51/7 49/8 +g Player_Cube_Base +usemtl Base +f 47/17 48/1 46/10 45/35 +f 59/1 57/10 58/35 60/17 +f 48/17 60/41 58/42 46/35 +f 46/43 58/10 57/35 45/44 +f 47/1 45/10 57/45 59/46 +f 48/47 47/48 59/17 60/1 diff --git a/mods/3d_armor_stand/textures/3d_armor_stand_feet.png b/mods/3d_armor_stand/textures/3d_armor_stand_feet.png new file mode 100644 index 0000000..d04f9e3 Binary files /dev/null and b/mods/3d_armor_stand/textures/3d_armor_stand_feet.png differ diff --git a/mods/3d_armor_stand/textures/3d_armor_stand_head.png b/mods/3d_armor_stand/textures/3d_armor_stand_head.png new file mode 100644 index 0000000..228c08e Binary files /dev/null and b/mods/3d_armor_stand/textures/3d_armor_stand_head.png differ diff --git a/mods/3d_armor_stand/textures/3d_armor_stand_legs.png b/mods/3d_armor_stand/textures/3d_armor_stand_legs.png new file mode 100644 index 0000000..66ec357 Binary files /dev/null and b/mods/3d_armor_stand/textures/3d_armor_stand_legs.png differ diff --git a/mods/3d_armor_stand/textures/3d_armor_stand_torso.png b/mods/3d_armor_stand/textures/3d_armor_stand_torso.png new file mode 100644 index 0000000..af95ec7 Binary files /dev/null and b/mods/3d_armor_stand/textures/3d_armor_stand_torso.png differ diff --git a/mods/clawshot/init.lua b/mods/clawshot/init.lua new file mode 100644 index 0000000..17a28d0 --- /dev/null +++ b/mods/clawshot/init.lua @@ -0,0 +1,237 @@ + + +local function register_clawshot(name, desc, texture, texture2, speed, accel, timeout, time2) + + minetest.register_entity("clawshot:dummy", { + visual = "sprite", + textures = {"clawshot_trans.png"}, + physical = false, + collisionbox = {0, 0, 0, 0.1, 0.1, 0.1}, + }) + + minetest.register_entity("clawshot:"..name.."_chain", { + visual = "mesh", + mesh = "claw.b3d", + textures = {texture2}, + velocity = 15, + acceleration = -5, + damage = 2, + physical = false, + collisionbox = {0, 0, 0, 0.1, 0.1, 0.1}, + on_step = function(self) + local remove_ent = minetest.after(timeout*2, function() + self.object:remove() + end) + local pos = self.object:getpos() + local objs = minetest.get_objects_inside_radius(pos, 2) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= self.object:get_luaentity().name and obj:get_luaentity().name ~= "__builtin:item" and not obj:is_player() then + obj:punch(self.object, 1.0, { + full_punch_interval=2.0, + damage_groups={fleshy=1}, + }, nil) + local velo = self.object:getvelocity() + self.object:setvelocity({x=-velo.x, y=-velo.y, z=-velo.z}) + end + end + + end + + if minetest.get_item_group(minetest.get_node(pos).name, "hook") ~= 0 or minetest.get_item_group(minetest.get_node(pos).name, "choppy") ~= 0 then + local player = self.launcher + local player_pos = player:getpos() + local attach_obj = minetest.env:add_entity(player_pos, "clawshot:dummy") + local obj = attach_obj:get_luaentity() + local obj_pos = attach_obj:getpos() + local vec = {x=pos.x-obj_pos.x, y=pos.y-obj_pos.y, z=pos.z-obj_pos.z} + player:set_attach(obj.object, "", {x=0, y=0, z=0}, {x=0, y=0.9, z=0}) + + if minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z}).name == "air" then + attach_obj:setvelocity(vec) + minetest.after(time2, function() + attach_obj:remove() + --self.launcher:setpos({x=pos.x+1, y=pos.y, z=pos.z}) + self.object:remove() + end) + elseif minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z}).name == "air" then + attach_obj:setvelocity(vec) + minetest.after(time2, function() + attach_obj:remove() + --self.launcher:setpos({x=pos.x-1, y=pos.y, z=pos.z}) + self.object:remove() + attach_obj:remove() + end) + elseif minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}).name == "air" then + attach_obj:setvelocity(vec) + minetest.after(time2, function() + attach_obj:remove() + --self.launcher:setpos({x=pos.x, y=pos.y, z=pos.z+1}) + self.object:remove() + attach_obj:remove() + end) + elseif minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}).name == "air" then + attach_obj:setvelocity(vec) + minetest.after(time2, function() + attach_obj:remove() + --self.launcher:setpos({x=pos.x, y=pos.y, z=pos.z-1}) + self.object:remove() + attach_obj:remove() + end) + end + self.object:remove() + end + + local part = minetest.add_particlespawner( + 5, --amount + 0.2, --time + {x=pos.x, y=pos.y, z=pos.z}, --minpos + {x=pos.x, y=pos.y, z=pos.z}, --maxpos + {x=0, y=0, z=0}, --minvel + {x=0, y=0, z=0}, --maxvel + {x=0,y=0,z=0}, --minacc + {x=0,y=0,z=0}, --maxacc + 1, --minexptime + 1, --maxexptime + 1, --minsize + 1, --maxsize + false, --collisiondetection + "clawshot_chain.png" --texture + ) + end, + }) + + minetest.register_entity("clawshot:"..name.."_chain2", { + visual = "mesh", + mesh = "claw.b3d", + textures = {texture2}, + velocity = 15, + acceleration = -5, + damage = 2, + physical = false, + collisionbox = {0, 0, 0, 0.1, 0.1, 0.1}, + on_step = function(self) + local remove_ent = minetest.after(timeout*2, function() + self.object:remove() + end) + local pos = self.object:getpos() + local objs = minetest.get_objects_inside_radius(pos, 2) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= self.object:get_luaentity().name and obj:get_luaentity().name ~= "__builtin:item" and not obj:is_player() then + obj:punch(self.object, 1.0, { + full_punch_interval=2.0, + damage_groups={fleshy=1}, + }, nil) + local velo = self.object:getvelocity() + self.object:setvelocity({x=-velo.x, y=-velo.y, z=-velo.z}) + end + end + + end + + if minetest.get_item_group(minetest.get_node(pos).name, "hook") ~= 0 or minetest.get_item_group(minetest.get_node(pos).name, "choppy") ~= 0 then + local player = self.launcher + local player_pos = player:getpos() + local attach_obj = minetest.env:add_entity(player_pos, "clawshot:dummy") + local obj = attach_obj:get_luaentity() + local obj_pos = attach_obj:getpos() + local dir = player:get_look_dir() + local vec = {x=pos.x+dir.x*2.5-obj_pos.x, y=0, z=pos.z+dir.z*2.5-obj_pos.z} + player:set_attach(obj.object, "", {x=0, y=0, z=0}, {x=0, y=0.9, z=0}) + + if minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z}).name == "air" then + attach_obj:setvelocity(vec) + minetest.after(time2, function() + attach_obj:remove() + --self.launcher:setpos({x=pos.x+1, y=pos.y, z=pos.z}) + self.object:remove() + end) + elseif minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z}).name == "air" then + attach_obj:setvelocity(vec) + minetest.after(time2, function() + attach_obj:remove() + --self.launcher:setpos({x=pos.x-1, y=pos.y, z=pos.z}) + self.object:remove() + attach_obj:remove() + end) + elseif minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1}).name == "air" then + attach_obj:setvelocity(vec) + minetest.after(time2, function() + attach_obj:remove() + --self.launcher:setpos({x=pos.x, y=pos.y, z=pos.z+1}) + self.object:remove() + attach_obj:remove() + end) + elseif minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1}).name == "air" then + attach_obj:setvelocity(vec) + minetest.after(time2, function() + attach_obj:remove() + --self.launcher:setpos({x=pos.x, y=pos.y, z=pos.z-1}) + self.object:remove() + attach_obj:remove() + end) + end + self.object:remove() + end + + local part = minetest.add_particlespawner( + 5, --amount + 0.2, --time + {x=pos.x, y=pos.y, z=pos.z}, --minpos + {x=pos.x, y=pos.y, z=pos.z}, --maxpos + {x=0, y=0, z=0}, --minvel + {x=0, y=0, z=0}, --maxvel + {x=0,y=0,z=0}, --minacc + {x=0,y=0,z=0}, --maxacc + 1, --minexptime + 1, --maxexptime + 1, --minsize + 1, --maxsize + false, --collisiondetection + "clawshot_chain.png" --texture + ) + end, + }) + + + minetest.register_tool("clawshot:"..name, { + description = desc, + inventory_image = texture, + wield_scale = {x = 1.5, y = 1.5, z = 1}, + tool_capabilities = { + full_punch_interval = 0.7, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3}, + }, + damage_groups = {fleshy=1}, + }, + on_use = function(item, placer, pointed_thing) + local dir = placer:get_look_dir(); + local playerpos = placer:getpos(); + local ctrl = placer:get_player_control() + local obj = {} + if not ctrl.sneak then + obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "clawshot:"..name.."_chain") + else + obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1.4+dir.y,z=playerpos.z+0+dir.z}, "clawshot:"..name.."_chain2") + end + local vec = {x=dir.x*speed,y=dir.y*speed,z=dir.z*speed} + local yaw = placer:get_look_yaw() + obj:setvelocity(vec) + obj:setyaw(yaw-math.pi/2) + local acc = {x=dir.x*accel,y=dir.y*accel,z=dir.z*accel} + obj:setacceleration(acc) + local object = obj:get_luaentity() + object.launcher = placer + object.ready = true + item:add_wear(300) + return item + end, + +}) +end + +register_clawshot("clawshot", "Clawshot", "clawshot.png", "clawshot_claw.png", 10, -6, 1, 1) +register_clawshot("clawshot_gold", "Gold Clawshot", "clawshot_gold.png", "clawshot_claw_gold.png", 12, -6, 2, 1) diff --git a/mods/clawshot/license.txt b/mods/clawshot/license.txt new file mode 100644 index 0000000..a949a83 --- /dev/null +++ b/mods/clawshot/license.txt @@ -0,0 +1,25 @@ + + +License for Code +---------------- + +Copyright (C) 2017 D00Med + +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. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +License for Textures, Models +--------------------------------------- + +CC BY-SA 3.0 UNPORTED. Created by D00Med \ No newline at end of file diff --git a/mods/clawshot/models/claw.b3d b/mods/clawshot/models/claw.b3d new file mode 100644 index 0000000..51a9804 Binary files /dev/null and b/mods/clawshot/models/claw.b3d differ diff --git a/mods/clawshot/models/clawshot_claw.png b/mods/clawshot/models/clawshot_claw.png new file mode 100644 index 0000000..acc7438 Binary files /dev/null and b/mods/clawshot/models/clawshot_claw.png differ diff --git a/mods/clawshot/models/clawshot_claw_gold.png b/mods/clawshot/models/clawshot_claw_gold.png new file mode 100644 index 0000000..5af844e Binary files /dev/null and b/mods/clawshot/models/clawshot_claw_gold.png differ diff --git a/mods/clawshot/textures/clawshot.png b/mods/clawshot/textures/clawshot.png new file mode 100644 index 0000000..05040eb Binary files /dev/null and b/mods/clawshot/textures/clawshot.png differ diff --git a/mods/clawshot/textures/clawshot_chain.png b/mods/clawshot/textures/clawshot_chain.png new file mode 100644 index 0000000..09adea4 Binary files /dev/null and b/mods/clawshot/textures/clawshot_chain.png differ diff --git a/mods/clawshot/textures/clawshot_gold.png b/mods/clawshot/textures/clawshot_gold.png new file mode 100644 index 0000000..62b8a89 Binary files /dev/null and b/mods/clawshot/textures/clawshot_gold.png differ diff --git a/mods/clawshot/textures/clawshot_trans.png b/mods/clawshot/textures/clawshot_trans.png new file mode 100644 index 0000000..e7d5372 Binary files /dev/null and b/mods/clawshot/textures/clawshot_trans.png differ diff --git a/mods/mapgen/mapgen.lua b/mods/mapgen/mapgen.lua index 1814ef2..4ef5d31 100644 --- a/mods/mapgen/mapgen.lua +++ b/mods/mapgen/mapgen.lua @@ -1432,7 +1432,7 @@ end }) --Willow tree - + --[[ minetest.register_decoration({ deco_type = "schematic", place_on = {"mapgen:dirt_with_swampgrass"}, @@ -1451,6 +1451,7 @@ end schematic = minetest.get_modpath("mapgen") .. "/schematics/willow.mts", flags = "place_center_x, place_center_z", }) + ]] minetest.register_decoration({ deco_type = "schematic", diff --git a/mods/sfinv/depends.txt b/mods/sfinv/depends.txt index 4ad96d5..5c9566e 100644 --- a/mods/sfinv/depends.txt +++ b/mods/sfinv/depends.txt @@ -1 +1,3 @@ default + +3d_armor \ No newline at end of file diff --git a/mods/shields/LICENSE.txt b/mods/shields/LICENSE.txt new file mode 100644 index 0000000..ea64f2c --- /dev/null +++ b/mods/shields/LICENSE.txt @@ -0,0 +1,6 @@ +[mod] Shields [shields] +======================= + +License Source Code: Copyright (C) 2013-2017 Stuart Jones - LGPL v2.1 + +License Textures: Copyright (C) 2013-2017 Ryan Jones - CC-BY-SA 3.0 diff --git a/mods/shields/README.txt b/mods/shields/README.txt new file mode 100644 index 0000000..d71626d --- /dev/null +++ b/mods/shields/README.txt @@ -0,0 +1,9 @@ +[mod] Shields [shields] +======================= + +Adds shields to 3d_armor + +Depends: 3d_armor + +Originally a part of 3d_armor, shields have been re-included as an optional extra. +If you do not what shields then simply remove the shields folder from the modpack. diff --git a/mods/shields/crafting_guide.txt b/mods/shields/crafting_guide.txt new file mode 100644 index 0000000..9b61dde --- /dev/null +++ b/mods/shields/crafting_guide.txt @@ -0,0 +1,36 @@ +Shields -- Crafting Guide +-------------------------- + ++---+---+---+ +| X | X | X | ++---+---+---+ +| X | X | X | ++---+---+---+ +| | X | | ++---+---+---+ + +[shields:shield_wood] X = [default:wood] +[shields:shield_cactus] X = [default:cactus] +[shields:shield_steel] X = [default:steel_ingot] +[shields:shield_bronze] X = [default:bronze_ingot] +[shields:shield_diamond] X = [default:diamond] +[shields:shield_gold] X = [default:gold_ingot] +[shields:shield_mithril] X = [moreores:mithril_ingot] +[shields:shield_crystal] X = [ethereal:crystal_ingot] + +Enhanced Shields +---------------- + ++---+ +| S | ++---+ +| X | ++---+ +| S | ++---+ + +[shields:shield_enhanced_wood] X = [shields:shield_wood] +[shields:shield_enhanced_cactus] X = [shields:shield_cactus] + +S = [default:steel_ingot] + diff --git a/mods/shields/depends.txt b/mods/shields/depends.txt new file mode 100644 index 0000000..585cc7a --- /dev/null +++ b/mods/shields/depends.txt @@ -0,0 +1,2 @@ +default +3d_armor diff --git a/mods/shields/description.txt b/mods/shields/description.txt new file mode 100644 index 0000000..cb378bb --- /dev/null +++ b/mods/shields/description.txt @@ -0,0 +1 @@ +Adds visible shields to 3d armor. diff --git a/mods/shields/init.lua b/mods/shields/init.lua new file mode 100644 index 0000000..2234fa4 --- /dev/null +++ b/mods/shields/init.lua @@ -0,0 +1,126 @@ +local use_moreores = minetest.get_modpath("moreores") + +-- Regisiter Shields + +minetest.register_tool("shields:shield_admin", { + description = "Admin Shield", + inventory_image = "shields_inv_shield_admin.png", + groups = {armor_shield=1000, armor_heal=100, armor_use=0, not_in_creative_inventory=1}, + wear = 0, +}) + +if ARMOR_MATERIALS.wood then + minetest.register_tool("shields:shield_wood", { + description = "Wooden Shield", + inventory_image = "shields_inv_shield_wood.png", + groups = {armor_shield=5, armor_heal=0, armor_use=2000}, + wear = 0, + }) + minetest.register_tool("shields:shield_enhanced_wood", { + description = "Enhanced Wood Shield", + inventory_image = "shields_inv_shield_enhanced_wood.png", + groups = {armor_shield=8, armor_heal=0, armor_use=1000}, + wear = 0, + }) + minetest.register_craft({ + output = "shields:shield_enhanced_wood", + recipe = { + {"default:steel_ingot"}, + {"shields:shield_wood"}, + {"default:steel_ingot"}, + }, + }) +end + +if ARMOR_MATERIALS.cactus then + minetest.register_tool("shields:shield_cactus", { + description = "Cactus Shield", + inventory_image = "shields_inv_shield_cactus.png", + groups = {armor_shield=5, armor_heal=0, armor_use=2000}, + wear = 0, + }) + minetest.register_tool("shields:shield_enhanced_cactus", { + description = "Enhanced Cactus Shield", + inventory_image = "shields_inv_shield_enhanced_cactus.png", + groups = {armor_shield=8, armor_heal=0, armor_use=1000}, + wear = 0, + }) + minetest.register_craft({ + output = "shields:shield_enhanced_cactus", + recipe = { + {"default:steel_ingot"}, + {"shields:shield_cactus"}, + {"default:steel_ingot"}, + }, + }) +end + +if ARMOR_MATERIALS.steel then + minetest.register_tool("shields:shield_steel", { + description = "Steel Shield", + inventory_image = "shields_inv_shield_steel.png", + groups = {armor_shield=10, armor_heal=0, armor_use=500}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.bronze then + minetest.register_tool("shields:shield_bronze", { + description = "Bronze Shield", + inventory_image = "shields_inv_shield_bronze.png", + groups = {armor_shield=10, armor_heal=6, armor_use=250}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.diamond then + minetest.register_tool("shields:shield_diamond", { + description = "Diamond Shield", + inventory_image = "shields_inv_shield_diamond.png", + groups = {armor_shield=15, armor_heal=12, armor_use=100}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.gold then + minetest.register_tool("shields:shield_gold", { + description = "Gold Shield", + inventory_image = "shields_inv_shield_gold.png", + groups = {armor_shield=10, armor_heal=6, armor_use=250}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.mithril then + minetest.register_tool("shields:shield_mithril", { + description = "Mithril Shield", + inventory_image = "shields_inv_shield_mithril.png", + groups = {armor_shield=15, armor_heal=12, armor_use=50}, + wear = 0, + }) +end + +if ARMOR_MATERIALS.crystal then + minetest.register_tool("shields:shield_crystal", { + description = "Crystal Shield", + inventory_image = "shields_inv_shield_crystal.png", + groups = {armor_shield=15, armor_heal=12, armor_use=50, armor_fire=1}, + wear = 0, + }) +end + +for k, v in pairs(ARMOR_MATERIALS) do + minetest.register_craft({ + output = "shields:shield_"..k, + recipe = { + {v, v, v}, + {v, v, v}, + {"", v, ""}, + }, + }) +end + +minetest.after(0, function() + table.insert(armor.elements, "shield") +end) + diff --git a/mods/shields/textures/shields_inv_shield_admin.png b/mods/shields/textures/shields_inv_shield_admin.png new file mode 100644 index 0000000..ae5ab7d Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_admin.png differ diff --git a/mods/shields/textures/shields_inv_shield_bronze.png b/mods/shields/textures/shields_inv_shield_bronze.png new file mode 100644 index 0000000..67bac0f Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_bronze.png differ diff --git a/mods/shields/textures/shields_inv_shield_cactus.png b/mods/shields/textures/shields_inv_shield_cactus.png new file mode 100644 index 0000000..00d1d58 Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_cactus.png differ diff --git a/mods/shields/textures/shields_inv_shield_crystal.png b/mods/shields/textures/shields_inv_shield_crystal.png new file mode 100644 index 0000000..1ec1981 Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_crystal.png differ diff --git a/mods/shields/textures/shields_inv_shield_diamond.png b/mods/shields/textures/shields_inv_shield_diamond.png new file mode 100644 index 0000000..ea7c567 Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_diamond.png differ diff --git a/mods/shields/textures/shields_inv_shield_enhanced_cactus.png b/mods/shields/textures/shields_inv_shield_enhanced_cactus.png new file mode 100644 index 0000000..39436cd Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_enhanced_cactus.png differ diff --git a/mods/shields/textures/shields_inv_shield_enhanced_wood.png b/mods/shields/textures/shields_inv_shield_enhanced_wood.png new file mode 100644 index 0000000..058e042 Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_enhanced_wood.png differ diff --git a/mods/shields/textures/shields_inv_shield_gold.png b/mods/shields/textures/shields_inv_shield_gold.png new file mode 100644 index 0000000..8995834 Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_gold.png differ diff --git a/mods/shields/textures/shields_inv_shield_mithril.png b/mods/shields/textures/shields_inv_shield_mithril.png new file mode 100644 index 0000000..d32665a Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_mithril.png differ diff --git a/mods/shields/textures/shields_inv_shield_steel.png b/mods/shields/textures/shields_inv_shield_steel.png new file mode 100644 index 0000000..178b507 Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_steel.png differ diff --git a/mods/shields/textures/shields_inv_shield_wood.png b/mods/shields/textures/shields_inv_shield_wood.png new file mode 100644 index 0000000..dcbe933 Binary files /dev/null and b/mods/shields/textures/shields_inv_shield_wood.png differ diff --git a/mods/shields/textures/shields_shield_admin.png b/mods/shields/textures/shields_shield_admin.png new file mode 100644 index 0000000..430c3e3 Binary files /dev/null and b/mods/shields/textures/shields_shield_admin.png differ diff --git a/mods/shields/textures/shields_shield_admin_preview.png b/mods/shields/textures/shields_shield_admin_preview.png new file mode 100644 index 0000000..762c2d2 Binary files /dev/null and b/mods/shields/textures/shields_shield_admin_preview.png differ diff --git a/mods/shields/textures/shields_shield_bronze.png b/mods/shields/textures/shields_shield_bronze.png new file mode 100644 index 0000000..89d6799 Binary files /dev/null and b/mods/shields/textures/shields_shield_bronze.png differ diff --git a/mods/shields/textures/shields_shield_bronze_preview.png b/mods/shields/textures/shields_shield_bronze_preview.png new file mode 100644 index 0000000..5f9ca7b Binary files /dev/null and b/mods/shields/textures/shields_shield_bronze_preview.png differ diff --git a/mods/shields/textures/shields_shield_cactus.png b/mods/shields/textures/shields_shield_cactus.png new file mode 100644 index 0000000..8679aa5 Binary files /dev/null and b/mods/shields/textures/shields_shield_cactus.png differ diff --git a/mods/shields/textures/shields_shield_cactus_preview.png b/mods/shields/textures/shields_shield_cactus_preview.png new file mode 100644 index 0000000..ae83661 Binary files /dev/null and b/mods/shields/textures/shields_shield_cactus_preview.png differ diff --git a/mods/shields/textures/shields_shield_crystal.png b/mods/shields/textures/shields_shield_crystal.png new file mode 100644 index 0000000..888bc5a Binary files /dev/null and b/mods/shields/textures/shields_shield_crystal.png differ diff --git a/mods/shields/textures/shields_shield_crystal_preview.png b/mods/shields/textures/shields_shield_crystal_preview.png new file mode 100644 index 0000000..299776f Binary files /dev/null and b/mods/shields/textures/shields_shield_crystal_preview.png differ diff --git a/mods/shields/textures/shields_shield_diamond.png b/mods/shields/textures/shields_shield_diamond.png new file mode 100644 index 0000000..e4938f9 Binary files /dev/null and b/mods/shields/textures/shields_shield_diamond.png differ diff --git a/mods/shields/textures/shields_shield_diamond_preview.png b/mods/shields/textures/shields_shield_diamond_preview.png new file mode 100644 index 0000000..afd004e Binary files /dev/null and b/mods/shields/textures/shields_shield_diamond_preview.png differ diff --git a/mods/shields/textures/shields_shield_enhanced_cactus.png b/mods/shields/textures/shields_shield_enhanced_cactus.png new file mode 100644 index 0000000..50d7673 Binary files /dev/null and b/mods/shields/textures/shields_shield_enhanced_cactus.png differ diff --git a/mods/shields/textures/shields_shield_enhanced_cactus_preview.png b/mods/shields/textures/shields_shield_enhanced_cactus_preview.png new file mode 100644 index 0000000..b15df06 Binary files /dev/null and b/mods/shields/textures/shields_shield_enhanced_cactus_preview.png differ diff --git a/mods/shields/textures/shields_shield_enhanced_wood.png b/mods/shields/textures/shields_shield_enhanced_wood.png new file mode 100644 index 0000000..14bd057 Binary files /dev/null and b/mods/shields/textures/shields_shield_enhanced_wood.png differ diff --git a/mods/shields/textures/shields_shield_enhanced_wood_preview.png b/mods/shields/textures/shields_shield_enhanced_wood_preview.png new file mode 100644 index 0000000..9298383 Binary files /dev/null and b/mods/shields/textures/shields_shield_enhanced_wood_preview.png differ diff --git a/mods/shields/textures/shields_shield_gold.png b/mods/shields/textures/shields_shield_gold.png new file mode 100644 index 0000000..b198d18 Binary files /dev/null and b/mods/shields/textures/shields_shield_gold.png differ diff --git a/mods/shields/textures/shields_shield_gold_preview.png b/mods/shields/textures/shields_shield_gold_preview.png new file mode 100644 index 0000000..66d8f2e Binary files /dev/null and b/mods/shields/textures/shields_shield_gold_preview.png differ diff --git a/mods/shields/textures/shields_shield_mithril.png b/mods/shields/textures/shields_shield_mithril.png new file mode 100644 index 0000000..2fb622e Binary files /dev/null and b/mods/shields/textures/shields_shield_mithril.png differ diff --git a/mods/shields/textures/shields_shield_mithril_preview.png b/mods/shields/textures/shields_shield_mithril_preview.png new file mode 100644 index 0000000..45306e3 Binary files /dev/null and b/mods/shields/textures/shields_shield_mithril_preview.png differ diff --git a/mods/shields/textures/shields_shield_steel.png b/mods/shields/textures/shields_shield_steel.png new file mode 100644 index 0000000..cfe58a1 Binary files /dev/null and b/mods/shields/textures/shields_shield_steel.png differ diff --git a/mods/shields/textures/shields_shield_steel_preview.png b/mods/shields/textures/shields_shield_steel_preview.png new file mode 100644 index 0000000..0a3d36a Binary files /dev/null and b/mods/shields/textures/shields_shield_steel_preview.png differ diff --git a/mods/shields/textures/shields_shield_wood.png b/mods/shields/textures/shields_shield_wood.png new file mode 100644 index 0000000..baf092d Binary files /dev/null and b/mods/shields/textures/shields_shield_wood.png differ diff --git a/mods/shields/textures/shields_shield_wood_preview.png b/mods/shields/textures/shields_shield_wood_preview.png new file mode 100644 index 0000000..b446e4e Binary files /dev/null and b/mods/shields/textures/shields_shield_wood_preview.png differ diff --git a/mods/wieldview/LICENSE.txt b/mods/wieldview/LICENSE.txt new file mode 100644 index 0000000..4e8d524 --- /dev/null +++ b/mods/wieldview/LICENSE.txt @@ -0,0 +1,5 @@ +[mod] visible wielded items [wieldview] +======================================= + +License Source Code: Copyright (C) 2013-2017 Stuart Jones - LGPL v2.1 + diff --git a/mods/wieldview/README.txt b/mods/wieldview/README.txt new file mode 100644 index 0000000..cffae46 --- /dev/null +++ b/mods/wieldview/README.txt @@ -0,0 +1,15 @@ +[mod] visible wielded items [wieldview] +======================================= + +depends: default, 3d_armor + +Makes hand wielded items visible to other players. + +default settings: [minetest.conf] + +# Set number of seconds between visible wielded item updates. +wieldview_update_time = 2 + +# Show nodes as tiles, disabled by default +wieldview_node_tiles = false + diff --git a/mods/wieldview/depends.txt b/mods/wieldview/depends.txt new file mode 100644 index 0000000..585cc7a --- /dev/null +++ b/mods/wieldview/depends.txt @@ -0,0 +1,2 @@ +default +3d_armor diff --git a/mods/wieldview/description.txt b/mods/wieldview/description.txt new file mode 100644 index 0000000..0d51ad9 --- /dev/null +++ b/mods/wieldview/description.txt @@ -0,0 +1 @@ +Makes hand wielded items visible to other players. diff --git a/mods/wieldview/init.lua b/mods/wieldview/init.lua new file mode 100644 index 0000000..7a5a619 --- /dev/null +++ b/mods/wieldview/init.lua @@ -0,0 +1,76 @@ +local time = 0 +local update_time = tonumber(minetest.setting_get("wieldview_update_time")) +if not update_time then + update_time = 2 + minetest.setting_set("wieldview_update_time", tostring(update_time)) +end +local node_tiles = minetest.setting_getbool("wieldview_node_tiles") +if not node_tiles then + node_tiles = false + minetest.setting_set("wieldview_node_tiles", "false") +end + +wieldview = { + wielded_item = {}, + transform = {}, +} + +dofile(minetest.get_modpath(minetest.get_current_modname()).."/transform.lua") + +wieldview.get_item_texture = function(self, item) + local texture = "3d_armor_trans.png" + if item ~= "" then + if minetest.registered_items[item] then + if minetest.registered_items[item].inventory_image ~= "" then + texture = minetest.registered_items[item].inventory_image + elseif node_tiles == true and minetest.registered_items[item].tiles + and type(minetest.registered_items[item].tiles[1]) == "string" + and minetest.registered_items[item].tiles[1] ~= "" then + texture = minetest.inventorycube(minetest.registered_items[item].tiles[1]) + end + end + if wieldview.transform[item] then + texture = texture.."^[transform"..wieldview.transform[item] + end + end + return texture +end + +wieldview.update_wielded_item = function(self, player) + if not player then + return + end + local name = player:get_player_name() + local stack = player:get_wielded_item() + local item = stack:get_name() + if not item then + return + end + if self.wielded_item[name] then + if self.wielded_item[name] == item then + return + end + armor.textures[name].wielditem = self:get_item_texture(item) + armor:update_player_visuals(player) + end + self.wielded_item[name] = item +end + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + wieldview.wielded_item[name] = "" + minetest.after(0, function(player) + wieldview:update_wielded_item(player) + end, player) +end) + +minetest.register_globalstep(function(dtime) + time = time + dtime + if time > update_time then + for _,player in ipairs(minetest.get_connected_players()) do + wieldview:update_wielded_item(player) + end + time = 0 + end +end) + diff --git a/mods/wieldview/transform.lua b/mods/wieldview/transform.lua new file mode 100644 index 0000000..4d5133e --- /dev/null +++ b/mods/wieldview/transform.lua @@ -0,0 +1,24 @@ +-- Wielded Item Transformations - http://dev.minetest.net/texture + +wieldview.transform = { + ["default:torch"]="R270", + ["default:sapling"]="R270", + ["flowers:dandelion_white"]="R270", + ["flowers:dandelion_yellow"]="R270", + ["flowers:geranium"]="R270", + ["flowers:rose"]="R270", + ["flowers:tulip"]="R270", + ["flowers:viola"]="R270", + ["bucket:bucket_empty"]="R270", + ["bucket:bucket_water"]="R270", + ["bucket:bucket_lava"]="R270", + ["screwdriver:screwdriver"]="R270", + ["screwdriver:screwdriver1"]="R270", + ["screwdriver:screwdriver2"]="R270", + ["screwdriver:screwdriver3"]="R270", + ["screwdriver:screwdriver4"]="R270", + ["vessels:glass_bottle"]="R270", + ["vessels:drinking_glass"]="R270", + ["vessels:steel_bottle"]="R270", +} +