forked from MTSR/techage_modpack
179 lines
4.0 KiB
Lua
179 lines
4.0 KiB
Lua
|
--[[
|
||
|
|
||
|
TechAge
|
||
|
=======
|
||
|
|
||
|
Copyright (C) 2021 Joachim Stolberg
|
||
|
|
||
|
AGPL v3
|
||
|
See LICENSE.txt for more information
|
||
|
|
||
|
TA1 Mill
|
||
|
|
||
|
]]--
|
||
|
|
||
|
local M = minetest.get_meta
|
||
|
local S = techage.S
|
||
|
|
||
|
local function start_mill(pos)
|
||
|
local obj = minetest.add_entity(pos, "techage:ta1_mill_entity")
|
||
|
minetest.remove_node(pos)
|
||
|
end
|
||
|
|
||
|
local function stop_mill(pos, self)
|
||
|
minetest.swap_node(pos, {name = "techage:ta1_mill", param2 = 0})
|
||
|
minetest.get_node_timer(pos):start(2)
|
||
|
self.object:remove()
|
||
|
end
|
||
|
|
||
|
local function has_power(pos, y_offs)
|
||
|
local pos1 = {x = pos.x, y = pos.y + y_offs, z = pos.z}
|
||
|
local nvm = techage.get_nvm(pos1)
|
||
|
nvm.watermill_trigger = (nvm.watermill_trigger or 1) - 1
|
||
|
return nvm.watermill_trigger > 0
|
||
|
end
|
||
|
|
||
|
techage.ta1_mill_has_power = has_power
|
||
|
|
||
|
minetest.register_node("techage:ta1_mill_gear", {
|
||
|
description = S("TA1 Mill Gear"),
|
||
|
tiles = {
|
||
|
"default_wood.png^techage_axle_bearing.png^[transformR90",
|
||
|
"default_wood.png^techage_axle_bearing.png",
|
||
|
},
|
||
|
drawtype = "nodebox",
|
||
|
node_box = {
|
||
|
type = "fixed",
|
||
|
fixed = {
|
||
|
{-1/2, -1/2, -1/2, 1/2, -1/8, 1/2},
|
||
|
{-1/8, -1/8, -1/2, 1/8, 1/8, 1/2},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
after_place_node = function(pos, placer)
|
||
|
techage.TA1Axle:after_place_node(pos)
|
||
|
end,
|
||
|
|
||
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||
|
techage.TA1Axle:after_dig_node(pos)
|
||
|
end,
|
||
|
|
||
|
paramtype2 = "facedir",
|
||
|
paramtype = "light",
|
||
|
use_texture_alpha = techage.CLIP,
|
||
|
sunlight_propagates = true,
|
||
|
is_ground_content = false,
|
||
|
groups = {cracky = 2, crumbly = 2, choppy = 2},
|
||
|
})
|
||
|
|
||
|
techage.register_node({"techage:ta1_mill_gear"}, {
|
||
|
on_transfer = function(pos, in_dir, topic, payload)
|
||
|
local nvm = techage.get_nvm(pos)
|
||
|
if topic == "trigger" then
|
||
|
nvm.watermill_trigger = 4
|
||
|
return true
|
||
|
end
|
||
|
end,
|
||
|
})
|
||
|
|
||
|
minetest.register_node("techage:ta1_mill", {
|
||
|
description = S("TA1 Mill"),
|
||
|
tiles = {
|
||
|
-- up, down, right, left, back, front
|
||
|
"techage_mill_side.png",
|
||
|
"techage_mill_side.png",
|
||
|
"techage_mill_side.png",
|
||
|
"techage_mill_side.png",
|
||
|
"techage_mill_front.png",
|
||
|
"techage_mill_front.png",
|
||
|
},
|
||
|
drawtype = "nodebox",
|
||
|
node_box = {
|
||
|
type = "fixed",
|
||
|
fixed = {
|
||
|
{-1/8, -1/8, -1/8, 1/8, 4/8, 1/8},
|
||
|
{-3/8, -3/8, -4/8, -1/8, 3/8, 4/8},
|
||
|
{-3/8, -4/8, -3/8, -1/8, 4/8, 3/8},
|
||
|
{ 1/8, -3/8, -4/8, 3/8, 3/8, 4/8},
|
||
|
{ 1/8, -4/8, -3/8, 3/8, 4/8, 3/8},
|
||
|
},
|
||
|
},
|
||
|
|
||
|
after_place_node = function(pos, placer)
|
||
|
minetest.get_node_timer(pos):start(2)
|
||
|
end,
|
||
|
|
||
|
on_rightclick = function(pos, node, clicker)
|
||
|
start_mill(pos)
|
||
|
end,
|
||
|
|
||
|
on_timer = function(pos, elapsed)
|
||
|
if has_power(pos, 1) then
|
||
|
start_mill(pos)
|
||
|
end
|
||
|
return true
|
||
|
end,
|
||
|
|
||
|
paramtype2 = "facedir",
|
||
|
paramtype = "light",
|
||
|
use_texture_alpha = techage.CLIP,
|
||
|
sunlight_propagates = true,
|
||
|
is_ground_content = false,
|
||
|
groups = {cracky = 2, crumbly = 2, choppy = 2},
|
||
|
})
|
||
|
|
||
|
minetest.register_entity("techage:ta1_mill_entity", {
|
||
|
initial_properties = {
|
||
|
physical = true,
|
||
|
visual = "wielditem",
|
||
|
wield_item = "techage:ta1_mill",
|
||
|
visual_size = {x=0.67, y=0.67, z=0.67},
|
||
|
static_save = true,
|
||
|
automatic_rotate = -math.pi * 0.2,
|
||
|
pointable = false,
|
||
|
},
|
||
|
|
||
|
on_step = function(self, dtime)
|
||
|
self.dtime = (self.dtime or 0) + dtime
|
||
|
|
||
|
if self.dtime > 2 then
|
||
|
local pos = vector.round(self.object:get_pos())
|
||
|
if not has_power(pos, 1) then
|
||
|
stop_mill(pos, self)
|
||
|
end
|
||
|
self.dtime = 0
|
||
|
minetest.sound_play("techage_mill", {gain = 0.3, pos = pos,
|
||
|
max_hear_distance = 10}, true)
|
||
|
end
|
||
|
end,
|
||
|
|
||
|
on_rightclick = function(self, clicker)
|
||
|
local pos = vector.round(self.object:get_pos())
|
||
|
stop_mill(pos, self)
|
||
|
end,
|
||
|
})
|
||
|
|
||
|
techage.register_node({"techage:ta1_mill"}, {
|
||
|
on_node_load = function(pos, node)
|
||
|
minetest.get_node_timer(pos):start(2)
|
||
|
end,
|
||
|
})
|
||
|
|
||
|
minetest.register_craft({
|
||
|
output = "techage:ta1_mill_gear",
|
||
|
recipe = {
|
||
|
{"default:wood", "", "default:wood"},
|
||
|
{"techage:ta1_axle", "default:wood", "techage:ta1_axle"},
|
||
|
{"default:wood", "techage:ta1_axle", "default:wood"},
|
||
|
},
|
||
|
})
|
||
|
|
||
|
minetest.register_craft({
|
||
|
output = "techage:ta1_mill",
|
||
|
recipe = {
|
||
|
{"", "techage:iron_ingot", ""},
|
||
|
{"stairs:slab_stone", "techage:iron_ingot", "stairs:slab_stone"},
|
||
|
{"", "", ""},
|
||
|
},
|
||
|
})
|