V1.01, Support for Ethereal added

This commit is contained in:
Joachim Stolberg 2018-03-24 18:32:28 +01:00
parent a65d2cbf53
commit dca97e08c7
12 changed files with 271 additions and 244 deletions

@ -1,4 +1,4 @@
# TechPack
# TechPack V1.01
TechPack, a Mining, Crafting, & Farming Modpack for Minetest.
@ -61,3 +61,9 @@ default, doors.
SmartLine Display optional: display_lib, font_lib
SmartLine Controller optional: mail,
Gravelsieve optional: moreores, hopper, pipeworks
### History
- 2018-03-18 V1.00 * Tubelib, tubelib_addons1, tubelib_addons2, smartline, and gravelsieve combined to one modpack.
- 2018-03-24 V1.01 * Support for Ethereal added

@ -8,20 +8,15 @@
LGPLv2.1+
See LICENSE.txt for more information
History:
2018-01-01 v0.01 first version
2018-01-26 v0.02 timer and sequencer added
2018-02-01 v0.03 further commands, hints and cancel button aded
]]--
if minetest.get_modpath("display_lib") and display_lib ~= nil and
minetest.get_modpath("font_lib") and font_lib ~= nil then
dofile(minetest.get_modpath("smartline") .. "/playerdetector.lua")
dofile(minetest.get_modpath("smartline") .. "/display.lua")
end
dofile(minetest.get_modpath("smartline") .. "/button.lua")
dofile(minetest.get_modpath("smartline") .. "/signaltower.lua")
dofile(minetest.get_modpath("smartline") .. "/display.lua")
dofile(minetest.get_modpath("smartline") .. "/playerdetector.lua")
dofile(minetest.get_modpath("smartline") .. "/sequencer.lua")
dofile(minetest.get_modpath("smartline") .. "/timer.lua")
dofile(minetest.get_modpath("smartline") .. "/repeater.lua")

@ -3,7 +3,7 @@
Tube Library
============
Copyright (C) 2017 Joachim Stolberg
Copyright (C) 2017,2018 Joachim Stolberg
LGPLv2.1+
See LICENSE.txt for more information

@ -1,37 +0,0 @@
# Tubelib Library
## Hints for Admins and Players
Tubelib is little useful for itself, it makes only sense with izs extensions.
However, Tubelib provides the following basic nodes:
### Tubes
Tubes allow the item exchange between two nodes. Tube forks are not possible. You have to use chests
or other inventory nodes as hubs to build more complex structures.
Tubes for itself are passive. For item exchange you have to use pulling/pushing nodes in addition.
The maximum tube length is limited to 100 nodes.
### Pusher
The Pusher is able to pull one item out of one inventory node and pushing it into another inventory node directly or by means of tubes.
It the source node is empty or the destination node full, the Pusher goes into STANDBY state for some seconds.
### Distributor
The Distributor works as filter and pusher. It allows to divide and distribute incoming items into 4 tube channels.
The channels can be switched on/off and individually configured with up to 6 items. The filter passes the configured
items and restrains all others. To increase the throughput, one item can be added several times to a filter.
An unconfigured but activated filter allows to pass up to 6 remaining items.
### Button/Switch
The Button/Switch is a simple communication node for the Tubelib wireless communication.
This node can be configured as button and switch. For the button configuration different switching
times from 2 to 16 seconds are possible. The Button/Switch node has to be configured with the destination
number of the receiving node (e.g. Lamp). This node allows to address several receivers by means or their numbers.
All numbers of the receiving nodes have to be added a configuration time.
### Lamp
The Lamp is a receiving node, showing its destination/communication number via "infotext".
The Lamp can be switched on/off by means of the right mouse button (use function) or by means of messages commands
from a Button/Switch or any other command sending node.

@ -1,2 +1,6 @@
tubelib
default
stairs?
moreores?
farming?
ethereal?

@ -3,7 +3,7 @@
Tubelib Addons 1
================
Copyright (C) 2017 Joachim Stolberg
Copyright (C) 2017,2018 Joachim Stolberg
LGPLv2.1+
See LICENSE.txt for more information

@ -3,7 +3,7 @@
Tubelib Addons 1
================
Copyright (C) 2017 Joachim Stolberg
Copyright (C) 2017,2018 Joachim Stolberg
LGPLv2.1+
See LICENSE.txt for more information
@ -57,76 +57,6 @@ end
local WorkingSteps = gen_working_steps()
-- valid harvesting nodes and the results for the inventory
local ResultNodes = {
["default:tree"] = "default:tree",
["default:aspen_tree"] = "default:aspen_tree",
["default:pine_tree"] = "default:pine_tree",
["default:acacia_tree"] = "default:acacia_tree",
["default:jungletree"] = "default:jungletree",
["default:leaves"] = "default:leaves",
["default:aspen_leaves"] = "default:aspen_leaves",
["default:pine_needles"] = "default:pine_needles",
["default:acacia_leaves"] = "default:acacia_leaves",
["default:jungleleaves"] = "default:jungleleaves",
["default:bush_leaves"] = "default:bush_leaves",
["default:acacia_bush_leaves"] = "default:acacia_bush_leaves",
["default:cactus"] = "default:cactus",
["default:papyrus"] = "default:papyrus",
["farming:wheat_8"] = "farming:wheat",
["farming:cotton_8"] = "farming:cotton",
["default:apple"] = "default:apple",
["farming:carrot_8"] = "farming:carrot 2",
["farming:potato_4"] = "farming:potato 3",
["farming:tomato_8"] = "farming:tomato 3",
["farming:cucumber_4"] = "farming:cucumber 2",
["farming:corn_8"] = "farming:corn 2",
["farming:coffee_5"] = "farming:coffee_beans 2",
["farming:melon_8"] = "farming:melon_slice 9",
["farming:pumpkin_8"] = "farming:pumpkin_slice 9",
["farming:raspberry_4"] = "farming:raspberries",
["farming:blueberry_4"] = "farming:blueberries",
["farming:rhubarb_3"] = "farming:rhubarb 2",
["farming:beanpole_5"] = "farming:beans 3",
["farming:grapes_8"] = "farming:grapes 3",
["farming:barley_7"] = "farming:barley",
["farming:chili_8"] = "farming:chili_pepper 2",
["farming:hemp_8"] = "farming:hemp_leaf",
}
-- Which sapling/seed belongs to which tree/crop
local SaplingList = {
["default:tree"] = "default:sapling",
["default:aspen_tree"] = "default:aspen_sapling",
["default:pine_tree"] = "default:pine_sapling",
["default:acacia_tree"] = "default:acacia_sapling",
["default:jungletree"] = "default:junglesapling",
["farming:wheat_8"] = "farming:wheat_1",
["farming:cotton_8"] = "farming:cotton_1",
["farming:carrot_8"] = "farming:carrot_1",
["farming:potato_4"] = "farming:potato_1",
["farming:tomato_8"] = "farming:tomato_1",
["farming:cucumber_4"] = "farming:cucumber_1",
["farming:corn_8"] = "farming:corn_1",
["farming:coffee_5"] = "farming:coffee_1",
["farming:melon_8"] = "farming:melon_1",
["farming:pumpkin_8"] = "farming:pumpkin_1",
["farming:raspberry_4"] = "farming:raspberry_1",
["farming:blueberry_4"] = "farming:blueberry_1",
["farming:rhubarb_3"] = "farming:rhubarb_1",
["farming:beanpole_5"] = "farming:beanpole_1",
["farming:grapes_8"] = "farming:grapes_1",
["farming:barley_7"] = "farming:barley_1",
["farming:chili_8"] = "farming:chili_1",
["farming:hemp_8"] = "farming:hemp_1",
}
local function formspec(this, state)
-- some recalculations
local endless = this.endless == 1 and "true" or "false"
@ -238,7 +168,7 @@ end
-- Remove wood/leave nodes and place sapling if necessary
-- Return false if inventory is full
-- else return true
local function remove_or_replace_node(pos, inv, node)
local function remove_or_replace_node(pos, inv, node, order)
local next_pos = table.copy(pos)
next_pos.y = next_pos.y - 1
@ -248,34 +178,15 @@ local function remove_or_replace_node(pos, inv, node)
end
local next_node = minetest.get_node_or_nil(next_pos)
if next_node then
-- don't remove the last cactus block
if node.name == "default:cactus" and next_node.name ~= "default:cactus" then
return true
end
-- don't remove the last papyrus block
if node.name == "default:papyrus" and next_node.name ~= "default:papyrus" then
return true
end
minetest.remove_node(pos)
inv:add_item("main", ItemStack(ResultNodes[node.name]))
if ResultNodes[next_node.name] == nil and next_node.name ~= "air" then -- hit the ground?
if SaplingList[node.name] then
node.name = SaplingList[node.name]
minetest.set_node(pos, {name=node.name, paramtype2 = "wallmounted", param2=1})
if node.name:sub(1,8) == "farming:" then
-- farming_redo installed?
if farming.mod == "redo" then
-- nothing to do
else
inv:add_item("main", ItemStack(order.drop))
if tubelib_addons1.GroundNodes[next_node.name] ~= nil and order.plant then -- hit the ground?
minetest.set_node(pos, {name=order.plant, paramtype2 = "wallmounted", param2=1})
if order.t1 ~= nil then
-- We have to simulate "on_place" and start the timer by hand
-- because the after_place_node function checks player rights and can't therefore
-- be used.
minetest.get_node_timer(pos):start(math.random(166,288))
end
else
-- default trees
minetest.get_node_timer(pos):start(math.random(2400,4800))
end
minetest.get_node_timer(pos):start(math.random(order.t1, order.t2))
end
remove_all_sapling_items(pos)
end
@ -326,8 +237,9 @@ local function harvest_field(this, meta)
pos.y = y_pos
local node = minetest.get_node_or_nil(pos)
if node and node.name ~= "air" then
if ResultNodes[node.name] then
if not remove_or_replace_node(pos, inv, node) then
local order = tubelib_addons1.FarmingNodes[node.name]
if order then
if not remove_or_replace_node(pos, inv, node, order) then
return false
end
else

@ -8,21 +8,9 @@
LGPLv2.1+
See LICENSE.txt for more information
History:
2017-09-08 v0.01 first version
2017-09-17 v0.02 harvester added
2017-10-02 v0.03 fermenter and reformer added
2017-10-07 v0.04 Ice, now and corals added to the Quarry
2017-10-24 v0.05 Harvester reworked and optimized
2017-10-29 v0.06 Adapted to Tubelib v0.07
2017-12-29 v0.07 Support for Farming Redo added
2018-01-01 v0.08 Harvester Copter removed
2018-01-04 v0.09 Funnel added
2018-01-28 v0.10 command 'fuel' added for Quarry and Harvester
]]--
if tubelib.version >= 0.07 then
dofile(minetest.get_modpath("tubelib_addons1") .. "/nodes.lua")
dofile(minetest.get_modpath("tubelib_addons1") .. "/quarry.lua")
dofile(minetest.get_modpath("tubelib_addons1") .. "/grinder.lua")
dofile(minetest.get_modpath("tubelib_addons1") .. '/autocrafter.lua')
@ -31,6 +19,3 @@ if tubelib.version >= 0.07 then
dofile(minetest.get_modpath("tubelib_addons1") .. '/reformer.lua')
dofile(minetest.get_modpath("tubelib_addons1") .. '/funnel.lua')
dofile(minetest.get_modpath("tubelib_addons1") .. "/pusher_fast.lua")
else
print("[tubelib_addons1] Version 0.07+ of Tubelib Mod is required!")
end

215
tubelib_addons1/nodes.lua Normal file

@ -0,0 +1,215 @@
--[[
Tubelib Addons 1
================
Copyright (C) 2017,2018 Joachim Stolberg
LGPLv2.1+
See LICENSE.txt for more information
]]--
tubelib_addons1 = {}
-- table needed for Harvester
tubelib_addons1.FarmingNodes = {}
-- table needed for Grinder
tubelib_addons1.GroundNodes = {}
-- default trees which require the node timer
function tubelib_addons1.register_tree_node(name, drop, plant)
tubelib_addons1.FarmingNodes[name] = {drop = drop or name, plant = plant, t1= 166, t2 = 288}
end
-- default farming nodes which require the node timer
function tubelib_addons1.register_default_farming_node(name, drop, plant)
tubelib_addons1.FarmingNodes[name] = {drop = drop or name, plant = plant, t1 = 2400, t2 = 4800}
end
-- farming nodes with ABM
function tubelib_addons1.register_farming_node(name, drop, plant)
tubelib_addons1.FarmingNodes[name] = {drop = drop or name, plant = plant}
end
function tubelib_addons1.register_ground_node(name, drop)
tubelib_addons1.GroundNodes[name] = {drop = drop or name}
end
local tn = tubelib_addons1.register_tree_node
local dn = tubelib_addons1.register_default_farming_node
local fn = tubelib_addons1.register_farming_node
local gn = tubelib_addons1.register_ground_node
-------------------------------------------------------------------------------
-- Default Farming
-------------------------------------------------------------------------------
tn("default:tree", "default:tree", "default:sapling")
tn("default:aspen_tree", "default:aspen_tree", "default:aspen_sapling")
tn("default:pine_tree", "default:pine_tree", "default:pine_sapling")
tn("default:acacia_tree", "default:acacia_tree", "default:acacia_sapling")
tn("default:jungletree", "default:jungletree", "default:junglesapling")
fn("default:leaves")
fn("default:aspen_leaves")
fn("default:pine_needles")
fn("default:acacia_leaves")
fn("default:jungleleaves")
fn("default:bush_leaves")
fn("default:acacia_bush_leaves")
fn("default:cactus", "default:cactus", "default:cactus")
fn("default:papyrus", "default:papyrus", "default:papyrus")
fn("default:apple")
if farming.mod ~= "redo" then
dn("farming:wheat_8", "farming:wheat", "farming:wheat_1")
dn("farming:cotton_8", "farming:cotton", "farming:cotton_1")
end
-------------------------------------------------------------------------------
-- Farming Redo
----------------------------------------------- --------------------------------
if farming.mod == "redo" then
fn("farming:wheat_8", "farming:wheat", "farming:wheat_1")
fn("farming:cotton_8", "farming:cotton", "farming:cotton_1")
fn("farming:carrot_8", "farming:carrot 2", "farming:carrot_1")
fn("farming:potato_4", "farming:potato 3", "farming:potato_1")
fn("farming:tomato_8", "farming:tomato 3", "farming:tomato_1")
fn("farming:cucumber_4", "farming:cucumber 2", "farming:cucumber_1")
fn("farming:corn_8", "farming:corn 2", "farming:corn_1")
fn("farming:coffee_5", "farming:coffee_beans 2", "farming:coffee_1")
fn("farming:melon_8", "farming:melon_slice 9", "farming:melon_1")
fn("farming:pumpkin_8", "farming:pumpkin_slice 9","farming:pumpkin_1")
fn("farming:raspberry_4", "farming:raspberries", "farming:raspberry_1")
fn("farming:blueberry_4", "farming:blueberries", "farming:blueberry_1")
fn("farming:rhubarb_3", "farming:rhubarb 2", "farming:rhubarb_1")
fn("farming:beanpole_5", "farming:beans 3", "farming:beanpole_1")
fn("farming:grapes_8", "farming:grapes 3", "farming:grapes_1")
fn("farming:barley_7", "farming:barley", "farming:barley_1")
fn("farming:chili_8", "farming:chili_pepper 2", "farming:chili_1")
fn("farming:hemp_8", "farming:hemp_leaf", "farming:hemp_1")
end
-------------------------------------------------------------------------------
-- Ethereal Farming
-------------------------------------------------------------------------------
fn("ethereal:strawberry_8", "ethereal:strawberry 2", "ethereal:strawberry 1")
fn("ethereal:onion_5", "ethereal:wild_onion_plant 2", "ethereal:onion_1")
fn("ethereal:willow_trunk", "ethereal:willow_trunk", "ethereal:willow_sapling")
fn("ethereal:redwood_trunk", "ethereal:redwood_trunk", "ethereal:redwood_sapling")
fn("ethereal:frost_tree", "ethereal:frost_tree", "ethereal:frost_tree_sapling")
fn("ethereal:yellow_trunk", "ethereal:yellow_trunk", "ethereal:yellow_tree_sapling")
fn("ethereal:palm_trunk", "ethereal:palm_trunk", "ethereal:palm_sapling")
fn("ethereal:banana_trunk", "ethereal:banana_trunk", "ethereal:banana_tree_sapling")
fn("ethereal:mushroom_trunk", "ethereal:mushroom_trunk", "ethereal:mushroom_sapling")
fn("ethereal:birch_trunk", "ethereal:birch_trunk", "ethereal:birch_sapling")
fn("ethereal:bamboo", "ethereal:bamboo", "ethereal:bamboo_sprout")
fn("ethereal:willow_twig")
fn("ethereal:redwood_leaves")
fn("ethereal:orange_leaves")
fn("ethereal:bananaleaves")
fn("ethereal:yellowleaves")
fn("ethereal:palmleaves")
fn("ethereal:birch_leaves")
fn("ethereal:frost_leaves")
fn("ethereal:bamboo_leaves")
fn("ethereal:mushroom")
fn("ethereal:mushroom_pore")
fn("ethereal:bamboo_leaves")
fn("ethereal:bamboo_leaves")
fn("ethereal:banana")
fn("ethereal:orange")
fn("ethereal:coconut")
-------------------------------------------------------------------------------
-- Default Ground
-------------------------------------------------------------------------------
gn("default:cobble")
gn("default:desert_cobble")
gn("default:mossycobble")
gn("default:gravel")
gn("default:dirt")
gn("default:sand")
gn("default:desert_sand")
gn("default:silver_sand")
gn("default:ice")
gn("default:snowblock")
gn("default:snow")
gn("stairs:stair_cobble")
gn("stairs:stair_mossycobble")
gn("stairs:stair_desert_cobble")
gn("default:stone", "default:cobble")
gn("default:desert_stone", "default:desert_cobble")
gn("default:clay", "default:clay_lump")
gn("default:stone_with_coal", "default:coal_lump")
gn("default:stone_with_iron", "default:iron_lump")
gn("default:stone_with_copper", "default:copper_lump")
gn("default:stone_with_gold", "default:gold_lump")
gn("default:stone_with_tin", "default:tin_lump")
gn("default:stone_with_mese", "default:mese_crystal")
gn("default:stone_with_diamond", "default:diamond")
gn("default:dirt_with_grass", "default:dirt")
gn("default:dirt_with_grass_footsteps", "default:dirt")
gn("default:dirt_with_dry_grass", "default:dirt")
gn("default:dirt_with_snow", "default:dirt")
gn("default:dirt_with_rainforest_litter", "default:dirt")
gn("default:dirt_with_grass", "default:dirt")
gn("default:coral_skeleton", "default:coral_skeleton")
gn("default:coral_orange", "default:coral_skeleton")
gn("default:coral_brown", "default:coral_skeleton")
-------------------------------------------------------------------------------
-- Moreores Ground
-------------------------------------------------------------------------------
gn("moreores:mineral_silver", "moreores:silver_lump")
gn("moreores:mineral_mithril", "moreores:mithril_lump")
-------------------------------------------------------------------------------
-- Farming Ground
-------------------------------------------------------------------------------
gn("farming:soil", "default:dirt")
gn("farming:soil_wet", "default:dirt")
-------------------------------------------------------------------------------
-- Compost Ground
-------------------------------------------------------------------------------
gn("compost:garden_soil", "compost:garden_soil")
-------------------------------------------------------------------------------
-- Ethereal Ground
-------------------------------------------------------------------------------
gn("ethereal:dry_dirt", "default:dirt")
gn("ethereal:bamboo_dirt", "default:dirt")
gn("ethereal:jungle_dirt", "default:dirt")
gn("ethereal:grove_dirt", "default:dirt")
gn("ethereal:prairie_dirt", "default:dirt")
gn("ethereal:cold_dirt", "default:dirt")
gn("ethereal:crystal_dirt", "default:dirt")
gn("ethereal:mushroom_dirt", "default:dirt")
gn("ethereal:fiery_dirt", "default:dirt")
gn("ethereal:gray_dirt", "default:dirt")
gn("ethereal:green_dirt", "default:dirt")
gn("bakedclay:red", "bakedclay:red")
gn("bakedclay:orange", "bakedclay:orange")
gn("bakedclay:grey", "bakedclay:grey")
gn("ethereal:quicksand2", "default:sand")
gn("ethereal:illumishroom")
gn("ethereal:illumishroom2")
gn("ethereal:illumishroom3")

@ -3,7 +3,7 @@
Tubelib Addons 1
================
Copyright (C) 2017 Joachim Stolberg
Copyright (C) 2017,2018 Joachim Stolberg
LGPLv2.1+
See LICENSE.txt for more information
@ -135,45 +135,6 @@ end
local QuarrySchedule = {0,0,3,3,3,3,2,2,2,2,1,1,1,1,0,3,0,0,3,3,2,2,1,0,0}
local ResultNodes = {
["default:cobble"] = "default:cobble",
["default:stone"] = "default:cobble",
["default:mossycobble"] = "default:mossycobble",
["default:desert_stone"] = "default:desert_cobble",
["default:desert_cobble"] = "default:desert_cobble",
["default:clay"] = "default:clay_lump",
["default:stone_with_coal"] = "default:coal_lump",
["default:stone_with_iron"] = "default:iron_lump",
["default:stone_with_copper"] = "default:copper_lump",
["default:stone_with_gold"] = "default:gold_lump",
["default:gravel"] = "default:gravel",
["default:stone_with_mese"] = "default:meselamp",
["default:stone_with_tin"] = "default:tin_lump",
["default:stone_with_diamond"] = "default:diamond",
["default:dirt"] = "default:dirt",
["default:dirt_with_grass"] = "default:dirt",
["default:dirt_with_grass_footsteps"] = "default:dirt",
["default:dirt_with_dry_grass"] = "default:dirt",
["default:dirt_with_snow"] = "default:dirt",
["default:dirt_with_rainforest_litter"] = "default:dirt",
["default:sand"] = "default:sand",
["default:desert_sand"] = "default:desert_sand",
["default:silver_sand"] = "default:silver_sand",
["moreores:mineral_silver"] = "moreores:silver_lump",
["moreores:mineral_mithril"] = "moreores:mithril_lump",
["stairs:stair_cobble"] = "stairs:stair_cobble",
["stairs:stair_mossycobble"] = "stairs:stair_mossycobble",
["stairs:stair_desert_cobble"] = "stairs:stair_desert_cobble",
["default:cactus"] = "default:cactus",
["default:ice"] = "default:ice",
["default:snowblock"] = "default:snowblock",
["default:dirt_with_snow"] = "default:dirt",
["default:snow"] = "default:snow",
["default:coral_skeleton"] = "default:coral_skeleton",
["default:coral_orange"] = "default:coral_skeleton",
["default:coral_brown"] = "default:coral_skeleton",
}
local function get_next_pos(pos, facedir, dir)
facedir = (facedir + dir) % 4
@ -229,11 +190,12 @@ local function quarry_next_node(pos, meta)
end
local number = meta:get_string("number")
if ResultNodes[node.name] ~= nil then
local order = tubelib_addons1.GroundNodes[node.name]
if order ~= nil then
local inv = meta:get_inventory()
if inv:room_for_item("main", ItemStack(node.name)) then
if inv:room_for_item("main", ItemStack(order.drop)) then
minetest.remove_node(quarry_pos)
inv:add_item("main", ItemStack(ResultNodes[node.name]))
inv:add_item("main", ItemStack(order.drop))
meta:set_string("infotext", "Tubelib Quarry "..number..
": running "..idx.."/"..(curr_level-pos.y))
return true

@ -3,25 +3,13 @@
Tubelib Addons 2
================
Copyright (C) 2017 Joachim Stolberg
Copyright (C) 2017,2018 Joachim Stolberg
LGPLv2.1+
See LICENSE.txt for more information
History:
2017-10-05 v0.01 first version
2017-10-06 v0.02 Timer added
2017-10-08 v0.03 Repeater added
2017-10-08 v0.04 Mesecons Converter and Programmer Tool added
2017-10-16 v0.05 Color Lamp added
2017-10-29 v0.06 WLAN Chip + Access Lock added, recipes changed
2017-10-29 v0.07 WLAN Chip removed, recipes changed
]]--
if tubelib.version >= 0.10 then
dofile(minetest.get_modpath("tubelib_addons2") .. "/timer.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/sequencer.lua")
dofile(minetest.get_modpath("tubelib_addons2") .. "/gateblock.lua")
@ -33,6 +21,3 @@ if tubelib.version >= 0.10 then
if mesecon then
dofile(minetest.get_modpath("tubelib_addons2") .. "/mesecons_converter.lua")
end
else
print("[Tubelib] Version 0.10+ of Tubelib Mod is required!")
end