forked from nalc/technic_armor
rework mod
* register armor using `armor:register_armor` (fixes #4) * improve code readability * make `technic_worldgen` optional * add screenshot * update readme and mod.conf * remove integration test (unnecessary for a simple mod) * remove other unnecessary files
This commit is contained in:
parent
ee9e651ba3
commit
c83d07419c
13
.github/workflows/integration-test.yml
vendored
13
.github/workflows/integration-test.yml
vendored
@ -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
|
@ -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
|
10
.gitignore
vendored
10
.gitignore
vendored
@ -1,10 +0,0 @@
|
||||
## Generic ignorable patterns and files
|
||||
*~
|
||||
.*.swp
|
||||
*bak*
|
||||
tags
|
||||
*.vim
|
||||
|
||||
## Eclipse project files & directories
|
||||
.project
|
||||
.settings
|
28
.luacheckrc
28
.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"
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
9
README.md
Normal file
9
README.md
Normal file
@ -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
|
@ -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
|
175
init.lua
175
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]
|
||||
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
|
||||
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
|
||||
|
@ -1,24 +0,0 @@
|
||||
#!/bin/sh
|
||||
# simple integration test
|
||||
|
||||
CFG=/tmp/minetest.conf
|
||||
MTDIR=/tmp/mt
|
||||
WORLDDIR=${MTDIR}/worlds/world
|
||||
WORLDMODDIR=${WORLDDIR}/worldmods
|
||||
|
||||
cat <<EOF > ${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
|
@ -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)
|
3
mod.conf
3
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
|
||||
|
BIN
screenshot.png
Normal file
BIN
screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 118 KiB |
@ -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
|
Loading…
Reference in New Issue
Block a user