2024-10-15 16:28:59 +02:00
|
|
|
-- IndustrialTest
|
|
|
|
-- Copyright (C) 2024 mrkubax10
|
|
|
|
|
|
|
|
-- This program is free software: you can redistribute it and/or modify
|
|
|
|
-- it under the terms of the GNU General Public License as published by
|
|
|
|
-- the Free Software Foundation, either version 3 of the License, or
|
|
|
|
-- (at your option) any later version.
|
|
|
|
|
|
|
|
-- This program is distributed in the hope that it will be useful,
|
|
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
-- GNU General Public License for more details.
|
|
|
|
|
|
|
|
-- You should have received a copy of the GNU General Public License
|
|
|
|
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
industrialtest.Machine={}
|
|
|
|
|
|
|
|
function industrialtest.Machine.onConstruct(self,pos)
|
2024-10-24 16:32:57 +02:00
|
|
|
local meta=minetest.get_meta(pos)
|
2024-10-15 16:28:59 +02:00
|
|
|
meta:set_string("formspec",self:getFormspec(pos))
|
|
|
|
minetest.get_node_timer(pos):start(industrialtest.updateDelay)
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.onDestruct(self)
|
|
|
|
-- dummy function
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.getFormspec(self,pos)
|
|
|
|
local formspec
|
|
|
|
if industrialtest.mtgAvailable then
|
|
|
|
formspec={
|
|
|
|
"formspec_version[4]",
|
|
|
|
"size[10.8,12]",
|
|
|
|
"label[0.5,0.5;"..self.description.."]",
|
|
|
|
"list[current_player;main;0.5,6.25;8,1]",
|
|
|
|
"list[current_player;main;0.5,7.5;8,3;8]",
|
|
|
|
"listring[current_player;main]"
|
|
|
|
}
|
|
|
|
elseif industrialtest.mclAvailable then
|
|
|
|
formspec={
|
|
|
|
"size[10.04,12]",
|
|
|
|
"label[0.25,0.25;"..self.description.."]",
|
|
|
|
"list[current_player;main;0.5,7;9,3;9]",
|
|
|
|
mcl_formspec.get_itemslot_bg(0.5,7,9,3),
|
|
|
|
"list[current_player;main;0.5,10.24;9,1]",
|
|
|
|
mcl_formspec.get_itemslot_bg(0.5,10.24,9,1),
|
|
|
|
"listring[current_player;main]"
|
|
|
|
}
|
|
|
|
end
|
|
|
|
return table.concat(formspec,"")
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.updateFormspec(self,pos)
|
|
|
|
if self.withoutFormspec then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
local meta=minetest.get_meta(pos)
|
|
|
|
meta:set_string("formspec",self:getFormspec(pos))
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.onTimer(self,pos,elapsed)
|
|
|
|
local meta=minetest.get_meta(pos)
|
|
|
|
local inv=meta:get_inventory()
|
|
|
|
local shouldRerunTimer=false
|
|
|
|
local shouldUpdateFormspec=false
|
|
|
|
|
|
|
|
if self.update then
|
|
|
|
shouldRerunTimer,shouldUpdateFormspec=self:update(pos,elapsed,meta,inv)
|
|
|
|
end
|
|
|
|
|
|
|
|
if shouldUpdateFormspec then
|
|
|
|
self:updateFormspec(pos)
|
|
|
|
end
|
|
|
|
|
|
|
|
return shouldRerunTimer
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.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,1)
|
|
|
|
|
|
|
|
if toList=="upgrades" then
|
|
|
|
return self.allowMoveToUpgradeSlot(pos,toIndex,movedItemStack)
|
|
|
|
end
|
|
|
|
|
|
|
|
return count
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.allowMetadataInventoryPut(self,pos,listname,index,stack,player)
|
|
|
|
if listname=="upgrades" then
|
|
|
|
return self.allowMoveToUpgradeSlot(pos,index,stack)
|
|
|
|
end
|
|
|
|
|
|
|
|
return stack:get_count()
|
|
|
|
end
|
|
|
|
|
2024-10-24 16:32:57 +02:00
|
|
|
function industrialtest.Machine.allowMetadataInventoryTake(self,pos,listname,index,stack,player)
|
|
|
|
return stack:get_count()
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.onMetadataInventoryMove(self,pos,fromList,fromIndex,toList,toIndex,count)
|
|
|
|
if toList=="upgrades" then
|
|
|
|
local meta=minetest.get_meta(pos)
|
|
|
|
local inv=meta:get_inventory()
|
|
|
|
local stack=inv:get_stack(fromList,fromIndex)
|
|
|
|
industrialtest.internal.applyUpgrade(pos,meta,stack)
|
|
|
|
elseif fromList=="upgrades" then
|
|
|
|
local meta=minetest.get_meta(pos)
|
|
|
|
local inv=meta:get_inventory()
|
|
|
|
local stack=inv:get_stack(fromList,fromIndex)
|
|
|
|
industrialtest.internal.removeUpgrade(pos,meta,stack)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.onMetadataInventoryPut(self,pos,listname,index,stack)
|
|
|
|
if listname=="upgrades" then
|
|
|
|
local meta=minetest.get_meta(pos)
|
|
|
|
industrialtest.internal.applyUpgrade(pos,meta,stack)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.onMetadataInventoryTake(self,pos,listname,index,stack)
|
|
|
|
if listname=="upgrades" then
|
|
|
|
local meta=minetest.get_meta(pos)
|
|
|
|
industrialtest.internal.removeUpgrade(pos,meta,stack)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2024-10-15 16:28:59 +02:00
|
|
|
function industrialtest.Machine.createDefinitionTable(self)
|
|
|
|
local def={
|
|
|
|
description=self.description,
|
2024-10-24 16:32:57 +02:00
|
|
|
tiles=self.tiles,
|
2024-10-15 16:28:59 +02:00
|
|
|
on_construct=function(pos)
|
|
|
|
self:onConstruct(pos)
|
|
|
|
end,
|
|
|
|
on_destruct=function(pos)
|
|
|
|
self:onDestruct(pos)
|
|
|
|
end,
|
|
|
|
on_timer=function(pos,elapsed)
|
|
|
|
return self:onTimer(pos,elapsed)
|
|
|
|
end,
|
|
|
|
allow_metadata_inventory_move=function(pos,fromList,fromIndex,toList,toIndex,count)
|
|
|
|
return self:allowMetadataInventoryMove(pos,fromList,fromIndex,toList,toIndex,count)
|
|
|
|
end,
|
|
|
|
allow_metadata_inventory_put=function(pos,listname,index,stack,player)
|
|
|
|
return self:allowMetadataInventoryPut(pos,listname,index,stack,player)
|
|
|
|
end,
|
|
|
|
allow_metadata_inventory_take=function(pos,listname,index,stack,player)
|
|
|
|
return self:allowMetadataInventoryTake(pos,listname,index,stack,player)
|
|
|
|
end,
|
|
|
|
on_metadata_inventory_put=function(pos,listname,index,stack,player)
|
|
|
|
self:onMetadataInventoryPut(pos,listname,index,stack)
|
|
|
|
end,
|
|
|
|
on_metadata_inventory_move=function(pos,fromList,fromIndex,toList,toIndex,count)
|
|
|
|
self:onMetadataInventoryMove(pos,fromList,fromIndex,toList,toIndex)
|
|
|
|
end,
|
|
|
|
on_metadata_inventory_take=function(pos,listname,index,stack,player)
|
|
|
|
self:onMetadataInventoryTake(pos,listname,index,stack)
|
|
|
|
end,
|
|
|
|
_industrialtest_self=self
|
|
|
|
}
|
|
|
|
|
|
|
|
if industrialtest.mtgAvailable then
|
|
|
|
def.groups={cracky=2}
|
|
|
|
if self.sounds=="metal" then
|
|
|
|
def.sounds=default.node_sound_metal_defaults()
|
|
|
|
end
|
|
|
|
def.can_dig=function(pos)
|
|
|
|
local meta=minetest.get_meta(pos)
|
|
|
|
local inv=meta:get_inventory()
|
2024-10-25 12:42:42 +02:00
|
|
|
for _,value in ipairs(self.storageLists) do
|
2024-10-15 16:28:59 +02:00
|
|
|
if inv:get_stack(value,1):get_count()>0 then
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
elseif industrialtest.mclAvailable then
|
|
|
|
def.after_dig_node=function(pos,oldnode,oldmeta)
|
2024-10-25 12:42:42 +02:00
|
|
|
industrialtest.internal.mclAfterDigNode(pos,oldmeta,self.storageLists)
|
2024-10-15 16:28:59 +02:00
|
|
|
end
|
2024-10-25 12:42:42 +02:00
|
|
|
if self.sounds=="metal" then
|
|
|
|
def.sounds=mcl_sounds.node_sound_metal_defaults()
|
2024-10-15 16:28:59 +02:00
|
|
|
end
|
|
|
|
def.groups={
|
|
|
|
pickaxey=1,
|
|
|
|
container=2
|
|
|
|
}
|
|
|
|
def._mcl_blast_resistance=3.5
|
|
|
|
def._mcl_hardness=3.9
|
|
|
|
def._mcl_hoppers_on_try_pull=function(pos, hop_pos, hop_inv, hop_list)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
local stack = inv:get_stack("dst", 1)
|
|
|
|
if not stack:is_empty() and hop_inv:room_for_item(hop_list, stack) then
|
|
|
|
return inv, "dst", 1
|
|
|
|
end
|
|
|
|
return nil, nil, nil
|
|
|
|
end
|
|
|
|
def._mcl_hoppers_on_try_push=function(pos, hop_pos, hop_inv, hop_list)
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
local inv = meta:get_inventory()
|
|
|
|
return inv, "src", mcl_util.select_stack(hop_inv, hop_list, inv, "src")
|
|
|
|
end
|
|
|
|
def._mcl_hoppers_on_after_push=function(pos)
|
|
|
|
minetest.get_node_timer(pos):start(industrialtest.updateDelay)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def.groups._industrialtest_wrenchUnmountable=1
|
|
|
|
if self.requiresWrench then
|
|
|
|
def.drop="industrialtest:machine_block"
|
|
|
|
end
|
|
|
|
|
2024-10-24 16:32:57 +02:00
|
|
|
if self.facedir then
|
|
|
|
def.paramtype2="facedir"
|
|
|
|
def.legacy_facedir_simple=true
|
|
|
|
end
|
|
|
|
|
2024-10-15 16:28:59 +02:00
|
|
|
return def
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.register(self)
|
|
|
|
local def=self:createDefinitionTable()
|
|
|
|
minetest.register_node(self.name,def)
|
|
|
|
industrialtest.api.addTag(self.name,"usesTimer")
|
|
|
|
end
|
|
|
|
|
|
|
|
function industrialtest.Machine.allowMoveToUpgradeSlot(pos,toIndex,stack)
|
|
|
|
local def=minetest.registered_items[stack:get_name()]
|
|
|
|
if not def or not def.groups or not def.groups._industrialtest_machineUpgrade then
|
|
|
|
return 0
|
|
|
|
end
|
|
|
|
local meta=minetest.get_meta(pos)
|
|
|
|
local inv=meta:get_inventory()
|
|
|
|
local targetSlot=inv:get_stack("upgrades",toIndex)
|
|
|
|
if not targetSlot:is_empty() then
|
|
|
|
return 0
|
|
|
|
end
|
|
|
|
return stack:get_count()
|
|
|
|
end
|