14 Commits

8 changed files with 3153 additions and 19 deletions

View File

@@ -1,25 +1,35 @@
# IndustrialTest # IndustrialTest
IndustrialTest is a mod for [Minetest](https://www.minetest.net/) that adds various tech and machinery related stuff. IndustrialTest is a mod for [Minetest](https://luanti.org) that adds various tech and machinery related stuff.
## Guide
Guide can be accessed in-game using `/industrialtest_guide` command.
## Compatibility ## Compatibility
Currently IndustrialTest supports following games: Currently IndustrialTest supports following games:
- [Minetest Game](https://content.minetest.net/packages/Minetest/minetest_game) and derivatives - [Minetest Game](https://content.luanti.org/packages/Minetest/minetest_game) and derivatives
- [MineClone2](https://content.minetest.net/packages/Wuzzy/mineclone2/) and derivatives - [VoxeLibre](https://content.luanti.org/packages/Wuzzy/mineclone2) and derivatives
## Additional dependencies ## Additional dependencies
- Minetest Game - Minetest Game
- [3D Armor](https://content.minetest.net/packages/stu/3d_armor) - [3D Armor](https://content.luanti.org/packages/stu/3d_armor)
- VoxeLibre - VoxeLibre
- none - none
## Optional dependencies ## Optional dependencies
- [Rubber Addon for MineClone](https://content.minetest.net/packages/biochemist/mcl_rubber) - [Rubber Addon for MineClone](https://content.luanti.org/packages/biochemist/mcl_rubber)
- [Pipeworks](https://content.minetest.net/packages/VanessaE/pipeworks) - [Pipeworks](https://content.luanti.org/packages/VanessaE/pipeworks)
- [Logistica](https://content.minetest.net/packages/ZenonSeth/logistica) - [Logistica](https://content.luanti.org/packages/ZenonSeth/logistica)
- [Mesecons](https://content.minetest.net/packages/Jeija/mesecons) - [Mesecons](https://content.luanti.org/packages/Jeija/mesecons)
## Locale
Mod is available in following languages:
- English / en_US (base)
- Polish / pl_PL (by mrkubax10)
New translations highly appreciated!
## Contributors ## Contributors
- mrkubax10 <mrkubax10@onet.pl or mrkubax10 at irc.libera.chat> [programming, some graphics] - mrkubax10 <mrkubax10@onet.pl or mrkubax10 at irc.libera.chat> [programming, some graphics]
- HandfulOfFrogs <<handfuloffrogs@gmail.com>> [some programming, graphics] - HandfulOfFrogs <<handfuloffrogs@gmail.com>> [some programming, graphics]
- LuanHawk <Discord: LuanHawk#8733> [lead graphics] - LuanHawk <Discord: luanhawk> [lead graphics]
- Migdyn <<temp1@cubesoftware.xyz>> [graphics] - Migdyn <<temp1@cubesoftware.xyz>> [graphics]

View File

@@ -385,6 +385,29 @@ addPipeworksCompatibility("industrialtest:induction_furnace",{
{listname="src"} {listname="src"}
},"dst") },"dst")
-- Miner
addPipeworksCompatibility("industrialtest:miner",{
{
y=1,
listname="powerStorage"
},
{listname="src"}
},"dst")
-- Pump
addPipeworksCompatibility("industrialtest:pump",{
{
y=1,
listname="powerStorage"
},
{listname="src"}
},"dst")
-- Magnetizer
addPipeworksCompatibility("industrialtest:magnetizer",{
{listname="powerStorage"}
},"powerStorage")
-- Simple electric item processors -- Simple electric item processors
for _,name in ipairs(industrialtest.api.tags.simpleElectricItemProcessor) do for _,name in ipairs(industrialtest.api.tags.simpleElectricItemProcessor) do
addPipeworksCompatibility(name,{ addPipeworksCompatibility(name,{

View File

@@ -66,14 +66,15 @@ local function createMachineInformationTable(fields,machineName,num)
local fieldLabels={ local fieldLabels={
inputVoltage="Input voltage level", inputVoltage="Input voltage level",
outputVoltage="Output voltage level", outputVoltage="Output voltage level",
voltage="Voltage", voltage="Voltage level",
lowVoltage="Low voltage", lowVoltage="Low voltage level",
highVoltage="High voltage", highVoltage="High voltage level",
damageRed="Damage reduction", damageRed="Damage reduction",
recipe="Recipe type", recipe="Recipe type",
powerCapacity="Power capacity", powerCapacity="Power capacity",
opPower="Power per operation", opPower="Power per operation",
powerPerFuel="Power per fuel unit", powerPerFuel="Power per fuel unit",
uses="Uses",
efficiency="Default efficiency" efficiency="Default efficiency"
} }
@@ -86,7 +87,7 @@ local function createMachineInformationTable(fields,machineName,num)
}) })
end end
return createTable(rows,false,string.format("Figure %d. Machine information for %s",(num or 1),machineName)) return createTable(rows,false,S("Figure @1. Information for @2",(num or 1),machineName))
end end
local pages={ local pages={
@@ -1840,13 +1841,62 @@ local pages={
} }
},S("Static Boots")) },S("Static Boots"))
} }
},
{
name="treetap",
title=S("Treetap"),
icon=industrialtest.elementKeys.treetap,
content={
[[
<big>||Treetap||</big>
<left>
||Treetap is used to extract <item name="{{elementKeyStickyResin}}" height="{{ITEM_HEIGHT}}"> <b>Sticky Resin</b> from <item name="{{elementKeyRubberWood}}" height="{{ITEM_HEIGHT}}"> <b>Rubber Wood</b>.||
</left>
]],
createMachineInformationTable({
{
name="uses",
value=tostring(industrialtest.Treetap.uses)
}
},S("Treetap"))
}
},
{
name="wrench",
title=S("Wrench"),
icon="industrialtest:wrench",
content={
[[
<big>||Wrench||</big>
<left>
||Wrench is one of the most important tools in this mod. It is used to safely remove machines with no material loss. In many cases when machine is removed without Wrench it drops <item name="industrialtest:machine_block" height="{{ITEM_HEIGHT}}"> <b>Machine Block</b> instead.||
</left>
]],
createMachineInformationTable({
{
name="uses",
value=tostring(industrialtest.Wrench.uses)
}
},S("Wrench"))
}
} }
} }
local function preprocessHypertext(content,vars) local function preprocessHypertext(content,vars)
-- Find and replace strings which should be translated, this pattern matches any string that doesn't include | which is contained within || at both ends -- Find and replace strings which should be translated, this pattern matches any string that doesn't include | which is contained within || at both ends
content=string.gsub(content,"||([^|]+)||",function(sourceString) content=string.gsub(content,"||([^|]+)||",function(sourceString)
return S(sourceString) -- Replace all sequences which should be treated as variables inside translation with format string
local trFormatIndex=1
local trFormatValues={}
sourceString=string.gsub(sourceString,"{{([^{}]+)}}",function(var)
local result=string.format("@%d",trFormatIndex)
trFormatIndex=trFormatIndex+1
table.insert(trFormatValues,vars[var] or "nil")
return result
end)
return S(sourceString,unpack(trFormatValues))
end) end)
-- Replace all sequences which should be treated as variables with values provided in vars -- Replace all sequences which should be treated as variables with values provided in vars
@@ -1894,6 +1944,7 @@ local function getGuideFormspec(playerName,pageName)
elementKeyIronIngot=industrialtest.elementKeys.ironIngot, elementKeyIronIngot=industrialtest.elementKeys.ironIngot,
elementKeyIronLump=industrialtest.elementKeys.ironLump, elementKeyIronLump=industrialtest.elementKeys.ironLump,
elementKeyIronPickaxe=industrialtest.elementKeys.ironPickaxe, elementKeyIronPickaxe=industrialtest.elementKeys.ironPickaxe,
elementKeyStickyResin=industrialtest.elementKeys.stickyResin,
elementKeyRubber=industrialtest.elementKeys.rubber, elementKeyRubber=industrialtest.elementKeys.rubber,
elementKeyRubberWood=industrialtest.elementKeys.rubberWood elementKeyRubberWood=industrialtest.elementKeys.rubberWood
}) })

1462
locale/industrialtest.pl.po Normal file

File diff suppressed because it is too large Load Diff

1462
locale/industrialtest.pot Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -95,7 +95,11 @@ function industrialtest.ElectricMachine.onTimer(self,pos,elapsed)
end end
function industrialtest.ElectricMachine.allowMetadataInventoryMove(self,pos,fromList,fromIndex,toList,toIndex,count) function industrialtest.ElectricMachine.allowMetadataInventoryMove(self,pos,fromList,fromIndex,toList,toIndex,count)
local meta=minetest.get_meta(pos)
local inv=meta:get_inventory()
local movedItemStack=inv:get_stack(fromList,fromIndex)
local found=false local found=false
if self.powerLists then if self.powerLists then
for _,value in ipairs(self.powerLists) do for _,value in ipairs(self.powerLists) do
if value.list==toList then if value.list==toList then
@@ -104,7 +108,7 @@ function industrialtest.ElectricMachine.allowMetadataInventoryMove(self,pos,from
end end
end end
end end
if found and not industrialtest.api.hasPowerStorage(movedItemStack:get_meta()) then if found and not industrialtest.api.hasPowerStorage(movedItemStack:get_meta()) and not self.isValidElectricItemDef(movedItemStack) then
return 0 return 0
end end
@@ -121,7 +125,7 @@ function industrialtest.ElectricMachine.allowMetadataInventoryPut(self,pos,listn
end end
end end
end end
if found and not industrialtest.api.hasPowerStorage(stack:get_meta()) then if found and not industrialtest.api.hasPowerStorage(stack:get_meta()) and not self.isValidElectricItemDef(stack) then
return 0 return 0
end end
@@ -205,6 +209,11 @@ function industrialtest.ElectricMachine.powerExchange(self,pos)
local powerFlow=meta:get_int("industrialtest.powerFlow") local powerFlow=meta:get_int("industrialtest.powerFlow")
for _,listDesc in ipairs(self.powerLists) do for _,listDesc in ipairs(self.powerLists) do
local slot=inv:get_stack(listDesc.list,1) local slot=inv:get_stack(listDesc.list,1)
if not industrialtest.api.hasPowerStorage(slot:get_meta()) and self.isValidElectricItemDef(slot) then
local def=slot:get_definition()
def._industrialtest_self:prepare(slot)
inv:set_stack(listDesc.list,1,slot)
end
if slot:get_count()>0 then if slot:get_count()>0 then
if listDesc.direction=="o" then if listDesc.direction=="o" then
if meta:get_int("industrialtest.powerAmount")<=0 then if meta:get_int("industrialtest.powerAmount")<=0 then
@@ -235,6 +244,12 @@ function industrialtest.ElectricMachine.powerExchange(self,pos)
return shouldRerunTimer return shouldRerunTimer
end end
-- Checks if itemstack has a valid electric item definition, even if it's not prepared
function industrialtest.ElectricMachine.isValidElectricItemDef(itemstack)
local def=itemstack:get_definition()
return def._industrialtest_self and def._industrialtest_self.flow and def._industrialtest_self.flow and def._industrialtest_self.prepare
end
function industrialtest.ElectricMachine.createPowerIndicatorWidget(charged,x,y) function industrialtest.ElectricMachine.createPowerIndicatorWidget(charged,x,y)
return table.concat({ return table.concat({
string.format("box[%f,%f;0.3,4.8;#202020]",x,y), string.format("box[%f,%f;0.3,4.8;#202020]",x,y),

View File

@@ -29,7 +29,8 @@ end
local function hasMetalBoots(player) local function hasMetalBoots(player)
local inv local inv
if industrialtest.mtgAvailable then if industrialtest.mtgAvailable then
_,inv=armor:get_valid_player(player,"") local _unused
_unused,inv=armor:get_valid_player(player,"")
elseif industrialtest.mclAvailable then elseif industrialtest.mclAvailable then
inv=player:get_inventory() inv=player:get_inventory()
end end

View File

@@ -121,7 +121,87 @@ minetest.register_craft({
} }
}) })
if industrialtest.mclAvailable then minetest.register_craft({
type="shaped",
output=industrialtest.elementKeys.coal,
recipe={
{"industrialtest:uu_matter","",""},
{"","","industrialtest:uu_matter"},
{"industrialtest:uu_matter","",""}
}
})
minetest.register_craft({
type="shaped",
output=industrialtest.elementKeys.stoneWithIron,
recipe={
{"industrialtest:uu_matter","","industrialtest:uu_matter"},
{"","industrialtest:uu_matter",""},
{"industrialtest:uu_matter","","industrialtest:uu_matter"}
}
})
minetest.register_craft({
type="shaped",
output=industrialtest.elementKeys.diamond,
recipe={
{"industrialtest:uu_matter","industrialtest:uu_matter","industrialtest:uu_matter"},
{"industrialtest:uu_matter","industrialtest:uu_matter","industrialtest:uu_matter"},
{"industrialtest:uu_matter","industrialtest:uu_matter","industrialtest:uu_matter"}
}
})
minetest.register_craft({
type="shaped",
output=industrialtest.elementKeys.stickyResin.." 32",
recipe={
{"industrialtest:uu_matter","","industrialtest:uu_matter"},
{"","",""},
{"industrialtest:uu_matter","","industrialtest:uu_matter"}
}
})
minetest.register_craft({
type="shaped",
output="industrialtest:tin_dust 4",
recipe={
{"","",""},
{"industrialtest:uu_matter","","industrialtest:uu_matter"},
{"","","industrialtest:uu_matter"}
}
})
minetest.register_craft({
type="shaped",
output="industrialtest:copper_dust 4",
recipe={
{"","","industrialtest:uu_matter"},
{"industrialtest:uu_matter","","industrialtest:uu_matter"},
{"","",""}
}
})
if industrialtest.mtgAvailable then
minetest.register_craft({
type="shaped",
output="industrialtest:iridium_lump",
recipe={
{"industrialtest:uu_matter","industrialtest:uu_matter","industrialtest:uu_matter"},
{"","industrialtest:uu_matter",""},
{"industrialtest:uu_matter","industrialtest:uu_matter","industrialtest:uu_matter"}
}
})
elseif industrialtest.mclAvailable then
minetest.register_craft({
type="shaped",
output="industrialtest:raw_iridium",
recipe={
{"industrialtest:uu_matter","industrialtest:uu_matter","industrialtest:uu_matter"},
{"","industrialtest:uu_matter",""},
{"industrialtest:uu_matter","industrialtest:uu_matter","industrialtest:uu_matter"}
}
})
minetest.register_craft({ minetest.register_craft({
type="shaped", type="shaped",
output="mcl_core:vine 24", output="mcl_core:vine 24",
@@ -141,4 +221,34 @@ if industrialtest.mclAvailable then
{"industrialtest:uu_matter",""} {"industrialtest:uu_matter",""}
} }
}) })
minetest.register_craft({
type="shaped",
output=industrialtest.elementKeys.powerCarrier.." 10",
recipe={
{"","",""},
{"","industrialtest:uu_matter",""},
{"industrialtest:uu_matter","industrialtest:uu_matter","industrialtest:uu_matter"}
}
})
minetest.register_craft({
type="shaped",
output=industrialtest.elementKeys.blueDye,
recipe={
{"","industrialtest:uu_matter",""},
{"","industrialtest:uu_matter",""},
{"","industrialtest:uu_matter","industrialtest:uu_matter"}
}
})
minetest.register_craft({
type="shaped",
output="mcl_core:emerald 8",
recipe={
{"industrialtest:uu_matter","industrialtest:uu_matter","industrialtest:uu_matter"},
{"industrialtest:uu_matter","industrialtest:uu_matter","industrialtest:uu_matter"},
{"","industrialtest:uu_matter",""}
}
})
end end