diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml deleted file mode 100644 index fdb28b5..0000000 --- a/.github/workflows/integration-test.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: integration-test -on: [push, pull_request] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@master - - - name: integration-test - run: ./integration-test.sh diff --git a/.github/workflows/build.yml b/.github/workflows/luacheck.yml similarity index 95% rename from .github/workflows/build.yml rename to .github/workflows/luacheck.yml index 1f0ae32..a13efa9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/luacheck.yml @@ -1,11 +1,8 @@ -name: build +name: luacheck on: [push, pull_request] - jobs: build: - runs-on: ubuntu-latest - steps: - uses: actions/checkout@master - name: apt diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 23de171..0000000 --- a/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -## Generic ignorable patterns and files -*~ -.*.swp -*bak* -tags -*.vim - -## Eclipse project files & directories -.project -.settings diff --git a/.luacheckrc b/.luacheckrc index bd1e744..4950c49 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -1,32 +1,4 @@ -allow_defined_top = true -unused_args = false - globals = { - "wieldview", "armor", - "inventory_plus" -} - -read_globals = { - -- Stdlib - string = {fields = {"split"}}, - table = {fields = {"copy", "getn"}}, - - -- Minetest - "vector", "ItemStack", - "dump", "VoxelArea", - - -- deps - "default", "minetest", - "unified_inventory", - "wardrobe", - "player_monoids", - "armor_monoid", - "sfinv", - "ARMOR_MATERIALS", - "ARMOR_FIRE_NODES", - "pova", - "skins", - "u_skins" } diff --git a/LICENSE.txt b/LICENSE.txt index 00d2545..7980686 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,7 +1,4 @@ -[mod] Technic Armor [technic_armor] -=================================== - License Source Code: Copyright (C) 2013-2018 Stuart Jones - LGPL v2.1 -License Textures: poet.nohit and numberZero - 2015-2018 WTFPL +License Textures: poet-nohit and numberZero - 2015-2018 WTFPL diff --git a/README.md b/README.md new file mode 100644 index 0000000..ee0aaee --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Technic Armor [technic_armor] + +[![luacheck](https://github.com/mt-mods/technic_armor/workflows/luacheck/badge.svg)](https://github.com/mt-mods/technic_armor/actions) + +Adds armor made from lead, brass, cast iron, carbon steel, stainless steel, tin and silver. + +![](screenshot.png?raw=true) + +Textures by @poet-nohit and @numberZero diff --git a/README.txt b/README.txt deleted file mode 100644 index 76a88eb..0000000 --- a/README.txt +++ /dev/null @@ -1,9 +0,0 @@ -[mod] Technic Armor [technic_armor] -=================================== - -Adds tin, silver and technic materials to 3d_armor. -Requires technic (technic_worldgen at least) mod. - -Depends: 3d_armor, technic_worldgen - -Textures by poet.nohit and numberZero diff --git a/init.lua b/init.lua index 1be4d4d..fbe5b33 100644 --- a/init.lua +++ b/init.lua @@ -1,75 +1,150 @@ --- integration test -if minetest.settings:get_bool("technic_armor.enable_technic_armor_integration_test") then - dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/integration_test.lua") -end --- support for i18n +-- Use 3d_armor translator to take advantage of existing translations for armor parts local S = minetest.get_translator("3d_armor") -if not minetest.get_modpath("technic_worldgen") then - minetest.log("warning", S("technic_armor: Mod loaded but unused.")) - return +local materials = {} + +if minetest.get_modpath("technic_worldgen") then + materials.lead = { + name = S("Lead"), + craft_item = "technic:lead_ingot", + armor = 1.6, + heal = 0, + use = 500, + radiation = 88 + } + materials.brass = { + name = S("Brass"), + craft_item = "technic:brass_ingot", + armor = 1.8, + heal = 0, + use = 650, + radiation = 43 + } + materials.cast = { + name = S("Cast Iron"), + craft_item = "technic:cast_iron_ingot", + armor = 2.5, + heal = 8, + use = 200, + radiation = 40 + } + materials.carbon = { + name = S("Carbon Steel"), + craft_item = "technic:carbon_steel_ingot", + armor = 2.7, + heal = 10, + use = 100, + radiation = 40 + } + materials.stainless = { + name = S("Stainless Steel"), + craft_item = "technic:stainless_steel_ingot", + armor = 2.7, + heal = 10, + use = 75, + radiation = 40 + } +end + +local tin_ingot + +if minetest.registered_items["default:tin_ingot"] then + tin_ingot = "default:tin_ingot" end -local stats = { - lead = { name=S("Lead"), material="technic:lead_ingot", armor=1.6, heal=0, use=500, radiation=80*1.1 }, - brass = { name=S("Brass"), material="technic:brass_ingot", armor=1.8, heal=0, use=650, radiation=43 }, - cast = { name=S("Cast Iron"), material="technic:cast_iron_ingot", armor=2.5, heal=8, use=200, radiation=40 }, - carbon = { name=S("Carbon Steel"), material="technic:carbon_steel_ingot", armor=2.7, heal=10, use=100, radiation=40 }, - stainless = { name=S("Stainless Steel"), material="technic:" .. - "stainless_steel_ingot", armor=2.7, heal=10, use=75, radiation=40 }, -} if minetest.get_modpath("moreores") then - stats.tin = { name=S("Tin"), material="moreores:tin_ingot", armor=1.6, heal=0, use=750, radiation=37 } - stats.silver = { name=S("Silver"), material="moreores:silver_ingot", armor=1.8, heal=6, use=650, radiation=53 } + tin_ingot = "moreores:tin_ingot" + materials.silver = { + name = S("Silver"), + craft_item = "moreores:silver_ingot", + armor = 1.8, + heal = 6, + use = 650, + radiation = 53 + } +end + +if tin_ingot then + materials.tin = { + name = S("Tin"), + craft_item = tin_ingot, + armor = 1.6, + heal = 0, + use = 750, + radiation = 37 + } end local parts = { - helmet = { place="head", name=S("Helmet"), level=5, radlevel = 0.10, craft={{1,1,1},{1,0,1}} }, - chestplate = { place="torso", name=S("Chestplate"), level=8, radlevel = 0.35, craft={{1,0,1},{1,1,1},{1,1,1}} }, - leggings = { place="legs", name=S("Leggings"), level=7, radlevel = 0.15, craft={{1,1,1},{1,0,1},{1,0,1}} }, - boots = { place="feet", name=S("Boots"), level=4, radlevel = 0.10, craft={{1,0,1},{1,0,1}} }, + helmet = { + name = S("Helmet"), + place = "head", + level = 5, + radlevel = 0.10, + craft = {{1, 1, 1}, {1, 0, 1}} + }, + chestplate = { + name = S("Chestplate"), + place = "torso", + level = 8, + radlevel = 0.35, + craft = {{1, 0, 1}, {1, 1, 1}, {1, 1, 1}} + }, + leggings = { + name = S("Leggings"), + place = "legs", + level = 7, + radlevel = 0.15, + craft = {{1, 1, 1}, {1, 0, 1}, {1, 0, 1}} + }, + boots = { + name = S("Boots"), + place = "feet", + level = 4, + radlevel = 0.10, + craft = {{1, 0, 1}, {1, 0, 1}} + } } + if minetest.get_modpath("shields") then - parts.shield = { place="shield", name=S("Shield"), level=5, radlevel=0.00, craft={{1,1,1},{1,1,1},{0,1,0}} } + parts.shield = { + name = S("Shield"), + place = "shield", + level = 5, + radlevel = 0.00, + craft = {{1, 1, 1}, {1, 1, 1}, {0, 1, 0}} + } end --- Makes a craft recipe based on a template --- template is a recipe-like table but indices are used instead of actual item names: --- 0 means nothing, everything else is treated as an index in the materials table -local function make_recipe(template, materials) +local function make_recipe(template, material) local recipe = {} - for j, trow in ipairs(template) do - local rrow = {} - for i, tcell in ipairs(trow) do - if tcell == 0 then - rrow[i] = "" - else - rrow[i] = materials[tcell] - end + for i, row in ipairs(template) do + recipe[i] = {} + for j, item in ipairs(row) do + recipe[i][j] = item == 0 and "" or material end - recipe[j] = rrow end return recipe end -for key, armor in pairs(stats) do - for partkey, part in pairs(parts) do - local partname = "technic_armor:"..partkey.."_"..key - minetest.register_tool(partname, { - -- Translators: @1 stands for material and @2 for part of the armor - -- so that you could use a conjunction if in your language part name - -- comes first then material (e.g. in french 'Silver Boots' - -- is translated in 'Bottes en argent' by using '@2 en @1' as translated string) - description = S("@1 @2", armor.name, part.name), - inventory_image = "technic_armor_inv_"..partkey.."_"..key..".png", - groups = {["armor_"..part.place]=math.floor(part.level*armor.armor), armor_heal=armor.heal, - armor_use=armor.use, armor_radiation=math.floor(part.radlevel*armor.radiation)}, +for material, m in pairs(materials) do + for part, p in pairs(parts) do + local name = "technic_armor:"..part.."_"..material + armor:register_armor(name, { + description = S("@1 @2", m.name, p.name), + inventory_image = "technic_armor_inv_"..part.."_"..material..".png", + groups = { + ["armor_"..p.place] = math.floor(p.level * m.armor), + armor_heal = m.heal, + armor_use = m.use, + armor_radiation = math.floor(p.radlevel * m.radiation) + }, wear = 0, }) minetest.register_craft({ - output = partname, - recipe = make_recipe(part.craft, {armor.material}), + output = name, + recipe = make_recipe(p.craft, m.craft_item), }) end end diff --git a/integration-test.sh b/integration-test.sh deleted file mode 100755 index 221027f..0000000 --- a/integration-test.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -# simple integration test - -CFG=/tmp/minetest.conf -MTDIR=/tmp/mt -WORLDDIR=${MTDIR}/worlds/world -WORLDMODDIR=${WORLDDIR}/worldmods - -cat < ${CFG} - technic_armor.enable_technic_armor_integration_test = true -EOF - -# clone dependencies -git clone --depth 1 https://github.com/minetest-mods/3d_armor.git ${WORLDMODDIR}/3d_armor - -mkdir -p ${WORLDDIR} -chmod 777 ${MTDIR} -R -docker run --rm -i \ - -v ${CFG}:/etc/minetest/minetest.conf:ro \ - -v ${MTDIR}:/var/lib/minetest/.minetest \ - -v $(pwd):/var/lib/minetest/.minetest/worlds/world/worldmods/technic_armor \ - registry.gitlab.com/minetest/minetest/server:5.3.0 - -test -f ${WORLDDIR}/integration_test.json && exit 0 || exit 1 diff --git a/integration_test.lua b/integration_test.lua deleted file mode 100644 index 65e9dfd..0000000 --- a/integration_test.lua +++ /dev/null @@ -1,25 +0,0 @@ - -minetest.log("warning", "[TEST] integration-test enabled!") - -minetest.register_on_mods_loaded(function() - minetest.after(1, function() - - local data = minetest.write_json({ success = true }, true); - local file = io.open(minetest.get_worldpath().."/integration_test.json", "w" ); - if file then - file:write(data) - file:close() - end - - file = io.open(minetest.get_worldpath().."/registered_nodes.txt", "w" ); - if file then - for name in pairs(minetest.registered_nodes) do - file:write(name .. '\n') - end - file:close() - end - - minetest.log("warning", "[TEST] integration tests done!") - minetest.request_shutdown("success") - end) -end) diff --git a/mod.conf b/mod.conf index 4320287..1cc8c00 100644 --- a/mod.conf +++ b/mod.conf @@ -1,3 +1,4 @@ name = technic_armor +description = Adds armor made from lead, brass, cast iron, carbon steel, stainless steel, tin and silver depends = 3d_armor -optional_depends = moreores, technic_worldgen +optional_depends = default, moreores, technic_worldgen diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..22077cc Binary files /dev/null and b/screenshot.png differ diff --git a/textures/preview_index.txt b/textures/preview_index.txt deleted file mode 100644 index e39a0b6..0000000 --- a/textures/preview_index.txt +++ /dev/null @@ -1,41 +0,0 @@ -technic_armor/textures/technic_armor_helmet_brass.png:head -technic_armor/textures/technic_armor_chestplate_brass.png:torso -technic_armor/textures/technic_armor_leggings_brass.png:legs -technic_armor/textures/technic_armor_boots_brass.png:feet -technic_armor/textures/technic_armor_shield_brass.png:shield - -technic_armor/textures/technic_armor_helmet_cast.png:head -technic_armor/textures/technic_armor_chestplate_cast.png:torso -technic_armor/textures/technic_armor_leggings_cast.png:legs -technic_armor/textures/technic_armor_boots_cast.png:feet -technic_armor/textures/technic_armor_shield_cast.png:shield - -technic_armor/textures/technic_armor_helmet_stainless.png:head -technic_armor/textures/technic_armor_chestplate_stainless.png:torso -technic_armor/textures/technic_armor_leggings_stainless.png:legs -technic_armor/textures/technic_armor_boots_stainless.png:feet -technic_armor/textures/technic_armor_shield_stainless.png:shield - -technic_armor/textures/technic_armor_helmet_tin.png:head -technic_armor/textures/technic_armor_chestplate_tin.png:torso -technic_armor/textures/technic_armor_leggings_tin.png:legs -technic_armor/textures/technic_armor_boots_tin.png:feet -technic_armor/textures/technic_armor_shield_tin.png:shield - -technic_armor/textures/technic_armor_helmet_lead.png:head -technic_armor/textures/technic_armor_chestplate_lead.png:torso -technic_armor/textures/technic_armor_leggings_lead.png:legs -technic_armor/textures/technic_armor_boots_lead.png:feet -technic_armor/textures/technic_armor_shield_lead.png:shield - -technic_armor/textures/technic_armor_helmet_carbon.png:head -technic_armor/textures/technic_armor_chestplate_carbon.png:torso -technic_armor/textures/technic_armor_leggings_carbon.png:legs -technic_armor/textures/technic_armor_boots_carbon.png:feet -technic_armor/textures/technic_armor_shield_carbon.png:shield - -technic_armor/textures/technic_armor_helmet_silver.png:head -technic_armor/textures/technic_armor_chestplate_silver.png:torso -technic_armor/textures/technic_armor_leggings_silver.png:legs -technic_armor/textures/technic_armor_boots_silver.png:feet -technic_armor/textures/technic_armor_shield_silver.png:shield