From 5fa28cc36a5a959fc3f74b303763486a97a946b6 Mon Sep 17 00:00:00 2001 From: NathanSalapat Date: Wed, 1 Jul 2020 08:15:45 -0500 Subject: [PATCH] Added printing presses. --- mods/caverealms_lite/init.lua | 2 +- mods/hbhunger/hunger.lua | 6 +- mods/pkarcs/init.lua | 1 + mods/smartshop/init.lua | 1210 ++++++++--------- mods/spawn/news.lua | 3 + mods/stations/init.lua | 1 + .../models/stations_printing_press.obj | 576 ++++++++ mods/stations/station_printing.lua | 119 ++ mods/stations/station_sewing.lua | 10 +- .../textures/stations_printing_press.png | Bin 0 -> 36100 bytes 10 files changed, 1315 insertions(+), 613 deletions(-) create mode 100644 mods/stations/models/stations_printing_press.obj create mode 100644 mods/stations/station_printing.lua create mode 100644 mods/stations/textures/stations_printing_press.png diff --git a/mods/caverealms_lite/init.lua b/mods/caverealms_lite/init.lua index c139eb3..5996f40 100644 --- a/mods/caverealms_lite/init.lua +++ b/mods/caverealms_lite/init.lua @@ -9,7 +9,7 @@ dofile(modpath.."/crafting.lua") --crafting recipes dofile(modpath.."/nodes.lua") --node definitions dofile(modpath.."/functions.lua") --function definitions dofile(modpath.."/plants.lua") ---dofile(modpath.."/abms.lua") +dofile(modpath.."/abms.lua") -- Parameters diff --git a/mods/hbhunger/hunger.lua b/mods/hbhunger/hunger.lua index 05f3564..01cb27f 100644 --- a/mods/hbhunger/hunger.lua +++ b/mods/hbhunger/hunger.lua @@ -67,7 +67,7 @@ local function poisenp(tick, time, time_left, player) if player:get_hp()-1 > 0 then player:set_hp(player:get_hp()-1) end - + end function hbhunger.item_eat(hunger_change, replace_with_item, poisen, heal, sound) @@ -146,7 +146,7 @@ if minetest.get_modpath("mobs") ~= nil then hbhunger.register_food("mobs:chicken_cooked", 6) hbhunger.register_food("mobs:chicken_raw", 2, "", 3) hbhunger.register_food("mobs:chicken_egg_fried", 2) - if minetest.get_modpath("bucket") then + if minetest.get_modpath("bucket") then hbhunger.register_food("mobs:bucket_milk", 3, "bucket:bucket_empty") end else @@ -361,7 +361,7 @@ if minetest.get_modpath("farming") and farming.mod == "redo" then hbhunger.register_food("farming:cucumber", 4) hbhunger.register_food("farming:tomato", 4) hbhunger.register_food("farming:carrot", 3) - hbhunger.register_food("farming:carrot_gold", 6, "", nil, 8) + hbhunger.register_food("farming:carrot_gold", 20, "", nil, 8) hbhunger.register_food("farming:corn", 3) hbhunger.register_food("farming:corn_cob", 5) hbhunger.register_food("farming:melon_slice", 2) diff --git a/mods/pkarcs/init.lua b/mods/pkarcs/init.lua index a496419..c71e419 100644 --- a/mods/pkarcs/init.lua +++ b/mods/pkarcs/init.lua @@ -206,6 +206,7 @@ pkarcs.register_node("default:obsidianbrick") pkarcs.register_node("default:obsidian_block") function pkarcs.register_craft(station, mod, node) + pkarcs.register_node(mod..':'..node) stations.dual_register_recipe(station, { input = { diff --git a/mods/smartshop/init.lua b/mods/smartshop/init.lua index 8815125..2d3a7c7 100644 --- a/mods/smartshop/init.lua +++ b/mods/smartshop/init.lua @@ -9,687 +9,687 @@ dpos={ } minetest.register_craft({ - output = "smartshop:shop", - recipe = { - {"default:chest_locked", "default:chest_locked", "default:chest_locked"}, - {"default:sign_wall_wood", "default:chest_locked", "default:sign_wall_wood"}, - {"default:sign_wall_wood", "default:torch", "default:sign_wall_wood"}, - } + output = "smartshop:shop", + recipe = { + {"default:chest_locked", "default:chest_locked", "default:chest_locked"}, + {"default:sign_wall_wood", "default:chest_locked", "default:sign_wall_wood"}, + {"default:sign_wall_wood", "default:torch", "default:sign_wall_wood"}, + } }) minetest.register_craft({ - output = "smartshop:wifistorage", - recipe = { - {"default:mese_crystal_fragment", "default:chest_locked", "default:mese_crystal_fragment"}, - {"default:mese_crystal_fragment", "default:chest_locked", "default:mese_crystal_fragment"}, - {"default:steel_ingot", "default:copper_ingot", "default:steel_ingot"}, - } + output = "smartshop:wifistorage", + recipe = { + {"default:mese_crystal_fragment", "default:chest_locked", "default:mese_crystal_fragment"}, + {"default:mese_crystal_fragment", "default:chest_locked", "default:mese_crystal_fragment"}, + {"default:steel_ingot", "default:copper_ingot", "default:steel_ingot"}, + } }) smartshop.strpos=function(str,spl) - if str==nil then return "" end - if spl then - local c="," - if string.find(str," ") then c=" " end - local s=str.split(str,c) - if s[3]==nil then - return nil - else - local p={x=tonumber(s[1]),y=tonumber(s[2]),z=tonumber(s[3])} - if not (p and p.x and p.y and p.z) then return nil end - return p - end - else if str and str.x and str.y and str.z then - return str.x .."," .. str.y .."," .. str.z - else - return nil - end - end + if str==nil then return "" end + if spl then + local c="," + if string.find(str," ") then c=" " end + local s=str.split(str,c) + if s[3]==nil then + return nil + else + local p={x=tonumber(s[1]),y=tonumber(s[2]),z=tonumber(s[3])} + if not (p and p.x and p.y and p.z) then return nil end + return p + end + else if str and str.x and str.y and str.z then + return str.x .."," .. str.y .."," .. str.z + else + return nil + end + end end smartshop.send_mesecon=function(pos) - if smartshop.mesecon then - mesecon.receptor_on(pos) - minetest.get_node_timer(pos):start(1) - end + if smartshop.mesecon then + mesecon.receptor_on(pos) + minetest.get_node_timer(pos):start(1) + end end smartshop.use_offer=function(pos,player,n) - local pressed={} - pressed["buy" .. n]=true - smartshop.user[player:get_player_name()]=pos - smartshop.receive_fields(player,pressed) - smartshop.user[player:get_player_name()]=nil - smartshop.update(pos) + local pressed={} + pressed["buy" .. n]=true + smartshop.user[player:get_player_name()]=pos + smartshop.receive_fields(player,pressed) + smartshop.user[player:get_player_name()]=nil + smartshop.update(pos) end smartshop.get_offer=function(pos) - if not pos or not minetest.get_node(pos) then return end - if minetest.get_node(pos).name~="smartshop:shop" then return end - local meta=minetest.get_meta(pos) - local inv=meta:get_inventory() - local offer={} - for i=1,4,1 do - offer[i]={ - give=inv:get_stack("give" .. i,1):get_name(), - give_count=inv:get_stack("give" .. i,1):get_count(), - pay=inv:get_stack("pay" .. i,1):get_name(), - pay_count=inv:get_stack("pay" .. i,1):get_count(), - } - end - return offer + if not pos or not minetest.get_node(pos) then return end + if minetest.get_node(pos).name~="smartshop:shop" then return end + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + local offer={} + for i=1,4,1 do + offer[i]={ + give=inv:get_stack("give" .. i,1):get_name(), + give_count=inv:get_stack("give" .. i,1):get_count(), + pay=inv:get_stack("pay" .. i,1):get_name(), + pay_count=inv:get_stack("pay" .. i,1):get_count(), + } + end + return offer end smartshop.receive_fields=function(player,pressed) - local pname=player:get_player_name() - local pos=smartshop.user[pname] - if not pos then - return - elseif pressed.tsend then - smartshop.add_storage[pname]={send=true,pos=pos} - minetest.after(30, function(pname) - if smartshop.add_storage[pname] then - minetest.chat_send_player(pname, "Time expired (30s)") - smartshop.add_storage[pname]=nil - end - end, pname) - minetest.chat_send_player(pname, "Open a storage owned by you") - return - elseif pressed.trefill then - smartshop.add_storage[pname]={refill=true,pos=pos} - minetest.after(30, function(pname) - if smartshop.add_storage[pname] then - minetest.chat_send_player(pname, "Time expired (30s)") - smartshop.add_storage[pname]=nil - end - end, pname) - minetest.chat_send_player(pname, "Open a storage owned by you") - return - elseif pressed.customer then - return smartshop.showform(pos,player,true) - elseif pressed.sellall then - local meta=minetest.get_meta(pos) - local pname=player:get_player_name() - if meta:get_int("sellall")==0 then - meta:set_int("sellall",1) - minetest.chat_send_player(pname, "Sell your stock and give line") - else - meta:set_int("sellall",0) - minetest.chat_send_player(pname, "Sell your stock only") - end - elseif pressed.toogleee then - local meta=minetest.get_meta(pos) - local pname=player:get_player_name() - if meta:get_int("type")==0 then - meta:set_int("type",1) - minetest.chat_send_player(pname, "Your stock is limited") - else - meta:set_int("type",0) - minetest.chat_send_player(pname, "Your stock is unlimited") - end - elseif not pressed.quit then - local n=1 - for i=1,4,1 do - n=i - if pressed["buy" .. i] then break end - end - local meta=minetest.get_meta(pos) - local type=meta:get_int("type") - local sellall=meta:get_int("sellall") - local inv=meta:get_inventory() - local pinv=player:get_inventory() - local pname=player:get_player_name() - local check_storage - if pressed["buy" .. n] then - local name=inv:get_stack("give" .. n,1):get_name() - local stack=name .." ".. inv:get_stack("give" .. n,1):get_count() - local pay=inv:get_stack("pay" .. n,1):get_name() .." ".. inv:get_stack("pay" .. n,1):get_count() - local stack_to_use="main" - if name~="" then + local pname=player:get_player_name() + local pos=smartshop.user[pname] + if not pos then + return + elseif pressed.tsend then + smartshop.add_storage[pname]={send=true,pos=pos} + minetest.after(30, function(pname) + if smartshop.add_storage[pname] then + minetest.chat_send_player(pname, "Time expired (30s)") + smartshop.add_storage[pname]=nil + end + end, pname) + minetest.chat_send_player(pname, "Open a storage owned by you") + return + elseif pressed.trefill then + smartshop.add_storage[pname]={refill=true,pos=pos} + minetest.after(30, function(pname) + if smartshop.add_storage[pname] then + minetest.chat_send_player(pname, "Time expired (30s)") + smartshop.add_storage[pname]=nil + end + end, pname) + minetest.chat_send_player(pname, "Open a storage owned by you") + return + elseif pressed.customer then + return smartshop.showform(pos,player,true) + elseif pressed.sellall then + local meta=minetest.get_meta(pos) + local pname=player:get_player_name() + if meta:get_int("sellall")==0 then + meta:set_int("sellall",1) + minetest.chat_send_player(pname, "Sell your stock and give line") + else + meta:set_int("sellall",0) + minetest.chat_send_player(pname, "Sell your stock only") + end + elseif pressed.toogleee then + local meta=minetest.get_meta(pos) + local pname=player:get_player_name() + if meta:get_int("type")==0 then + meta:set_int("type",1) + minetest.chat_send_player(pname, "Your stock is limited") + else + meta:set_int("type",0) + minetest.chat_send_player(pname, "Your stock is unlimited") + end + elseif not pressed.quit then + local n=1 + for i=1,4,1 do + n=i + if pressed["buy" .. i] then break end + end + local meta=minetest.get_meta(pos) + local type=meta:get_int("type") + local sellall=meta:get_int("sellall") + local inv=meta:get_inventory() + local pinv=player:get_inventory() + local pname=player:get_player_name() + local check_storage + if pressed["buy" .. n] then + local name=inv:get_stack("give" .. n,1):get_name() + local stack=name .." ".. inv:get_stack("give" .. n,1):get_count() + local pay=inv:get_stack("pay" .. n,1):get_name() .." ".. inv:get_stack("pay" .. n,1):get_count() + local stack_to_use="main" + if name~="" then --fast checks - if not pinv:room_for_item("main", stack) then - minetest.chat_send_player(pname, "Error: Your inventory is full, exchange aborted.") - return - elseif not pinv:contains_item("main", pay) then - minetest.chat_send_player(pname, "Error: You dont have enough in your inventory to buy this, exchange aborted.") - return - elseif type==1 and inv:room_for_item("main", pay)==false then - minetest.chat_send_player(pname, "Error: The owners stock is full, cant receive, exchange aborted.") - else - if inv:contains_item("main", stack) then - elseif sellall==1 and inv:contains_item("give" .. n, stack) then - stack_to_use="give" .. n - else - minetest.chat_send_player(pname, "Error: The owners stock is end.") - check_storage=1 - end - if not check_storage then - for i=0,32,1 do - if pinv:get_stack("main", i):get_name()==inv:get_stack("pay" .. n,1):get_name() and pinv:get_stack("main",i):get_wear()>0 then - minetest.chat_send_player(pname, "Error: your item is used") - return - end - end - local rastack=inv:remove_item(stack_to_use, stack) - pinv:remove_item("main", pay) - pinv:add_item("main",rastack) - if type==1 then inv:add_item("main",pay) end - if type==0 then inv:add_item("main", rastack) end - end - end + if not pinv:room_for_item("main", stack) then + minetest.chat_send_player(pname, "Error: Your inventory is full, exchange aborted.") + return + elseif not pinv:contains_item("main", pay) then + minetest.chat_send_player(pname, "Error: You dont have enough in your inventory to buy this, exchange aborted.") + return + elseif type==1 and inv:room_for_item("main", pay)==false then + minetest.chat_send_player(pname, "Error: The owners stock is full, cant receive, exchange aborted.") + else + if inv:contains_item("main", stack) then + elseif sellall==1 and inv:contains_item("give" .. n, stack) then + stack_to_use="give" .. n + else + minetest.chat_send_player(pname, "Error: The owners stock is end.") + check_storage=1 + end + if not check_storage then + for i=0,32,1 do + if pinv:get_stack("main", i):get_name()==inv:get_stack("pay" .. n,1):get_name() and pinv:get_stack("main",i):get_wear()>0 then + minetest.chat_send_player(pname, "Error: your item is used") + return + end + end + local rastack=inv:remove_item(stack_to_use, stack) + pinv:remove_item("main", pay) + pinv:add_item("main",rastack) + if type==1 then inv:add_item("main",pay) end + if type==0 then inv:add_item("main", rastack) end + end + end -- send to / refill from wifi storage - if type==1 then - local tsend=smartshop.strpos(meta:get_string("item_send"),1) - local trefill=smartshop.strpos(meta:get_string("item_refill"),1) - if tsend then - local m=minetest.get_meta(tsend) - local inv2=m:get_inventory() - local mes=m:get_int("mesein") - for i=1,10,1 do - if inv2:room_for_item("main", pay) and inv:contains_item("main", pay) then - inv2:add_item("main",pay) - inv:remove_item("main", pay) - if mes==1 or mes==3 then - smartshop.send_mesecon(tsend) - end - else - break - end - end - end - if trefill then - local m=minetest.get_meta(trefill) - local inv2=m:get_inventory() - local mes=m:get_int("mesein") + if type==1 then + local tsend=smartshop.strpos(meta:get_string("item_send"),1) + local trefill=smartshop.strpos(meta:get_string("item_refill"),1) + if tsend then + local m=minetest.get_meta(tsend) + local inv2=m:get_inventory() + local mes=m:get_int("mesein") + for i=1,10,1 do + if inv2:room_for_item("main", pay) and inv:contains_item("main", pay) then + inv2:add_item("main",pay) + inv:remove_item("main", pay) + if mes==1 or mes==3 then + smartshop.send_mesecon(tsend) + end + else + break + end + end + end + if trefill then + local m=minetest.get_meta(trefill) + local inv2=m:get_inventory() + local mes=m:get_int("mesein") - local space=0 + local space=0 --check if its room for other items, else the shop will stuck - for i=1,32,1 do - if inv:get_stack("main",i):get_count()==0 then - space=space+1 - end - end - for i=1,space,1 do - if ismartshop.max_wifi_distance then - minetest.chat_send_player(uname, "Too far, max distance " .. smartshop.max_wifi_distance) - end - local meta=minetest.get_meta(a.pos) - local p=smartshop.strpos(pos) - if a.send and p then - meta:set_string("item_send",p) - elseif a.refill and p then - meta:set_string("item_refill",p) - end - minetest.chat_send_player(uname, "smartshop connected") - smartshop.add_storage[uname]=nil - end + local a=smartshop.add_storage[uname] + if a then + if not a.pos then return end + if vector.distance(a.pos, pos)>smartshop.max_wifi_distance then + minetest.chat_send_player(uname, "Too far, max distance " .. smartshop.max_wifi_distance) + end + local meta=minetest.get_meta(a.pos) + local p=smartshop.strpos(pos) + if a.send and p then + meta:set_string("item_send",p) + elseif a.refill and p then + meta:set_string("item_refill",p) + end + minetest.chat_send_player(uname, "smartshop connected") + smartshop.add_storage[uname]=nil + end end minetest.register_node("smartshop:wifistorage", { - description = "Wifi storage", - tiles = {"default_chest_top.png^[colorize:#ffffff77^default_obsidian_glass.png"}, - groups = {choppy = 2, oddly_breakable_by_hand = 1,tubedevice = 1, tubedevice_receiver = 1,mesecon=2}, - paramtype = "light", - sunlight_propagates = true, - light_source = 10, - on_timer = function (pos, elapsed) - if smartshop.mesecon then - mesecon.receptor_off(pos) - end - return false - end, - tube = {insert_object = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local added = inv:add_item("main", stack) - return added - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:room_for_item("main", stack) - end, - input_inventory = "main", - connect_sides = {left = 1, right = 1, front = 1, back = 1, top = 1, bottom = 1}}, + description = "Wifi storage", + tiles = {"default_chest_top.png^[colorize:#ffffff77^default_obsidian_glass.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1,tubedevice = 1, tubedevice_receiver = 1,mesecon=2}, + paramtype = "light", + sunlight_propagates = true, + light_source = 10, + on_timer = function (pos, elapsed) + if smartshop.mesecon then + mesecon.receptor_off(pos) + end + return false + end, + tube = {insert_object = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local added = inv:add_item("main", stack) + return added + end, + can_insert = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:room_for_item("main", stack) + end, + input_inventory = "main", + connect_sides = {left = 1, right = 1, front = 1, back = 1, top = 1, bottom = 1}}, after_place_node = function(pos, placer) - local meta=minetest.get_meta(pos) - local name=placer:get_player_name() - meta:set_string("owner",name) - meta:set_string("infotext", "Wifi storage by: " .. name) - end, + local meta=minetest.get_meta(pos) + local name=placer:get_player_name() + meta:set_string("owner",name) + meta:set_string("infotext", "Wifi storage by: " .. name) + end, on_construct = function(pos) - local meta=minetest.get_meta(pos) - meta:get_inventory():set_size("main", 60) - meta:set_int("mesein",0) - meta:set_string("title","wifi" .. math.random(1,999)) - end, + local meta=minetest.get_meta(pos) + meta:get_inventory():set_size("main", 60) + meta:set_int("mesein",0) + meta:set_string("title","wifi" .. math.random(1,999)) + end, on_rightclick = function(pos, node, player, itemstack, pointed_thing) - smartshop.showform2(pos,player) - end, + smartshop.showform2(pos,player) + end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if stack:get_wear()==0 and (minetest.get_meta(pos):get_string("owner")==player:get_player_name() or minetest.check_player_privs(player:get_player_name(), {protection_bypass=true})) then - return stack:get_count() - end - return 0 - end, + if stack:get_wear()==0 and (minetest.get_meta(pos):get_string("owner")==player:get_player_name() or minetest.check_player_privs(player:get_player_name(), {protection_bypass=true})) then + return stack:get_count() + end + return 0 + end, allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if minetest.get_meta(pos):get_string("owner")==player:get_player_name() or minetest.check_player_privs(player:get_player_name(), {protection_bypass=true}) then - return stack:get_count() - end - return 0 - end, + if minetest.get_meta(pos):get_string("owner")==player:get_player_name() or minetest.check_player_privs(player:get_player_name(), {protection_bypass=true}) then + return stack:get_count() + end + return 0 + end, can_dig = function(pos, player) - local meta=minetest.get_meta(pos) - local inv=meta:get_inventory() - local p=player:get_player_name() - if (meta:get_string("owner")==p or minetest.check_player_privs(p, {protection_bypass=true})) and inv:is_empty("main") or meta:get_string("owner")=="" then - return true - end - end, + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + local p=player:get_player_name() + if (meta:get_string("owner")==p or minetest.check_player_privs(p, {protection_bypass=true})) and inv:is_empty("main") or meta:get_string("owner")=="" then + return true + end + end, }) diff --git a/mods/spawn/news.lua b/mods/spawn/news.lua index d28f2d7..636f4b1 100644 --- a/mods/spawn/news.lua +++ b/mods/spawn/news.lua @@ -1,4 +1,7 @@ local news = { + '6/30/20', + 'Wooden pkarcs can now be crafted.', + '', '6/28/20', 'Updated mobs_redo', 'Connected curtains will open and close in a group. (right-click the rightmost curtain.)', diff --git a/mods/stations/init.lua b/mods/stations/init.lua index aaa94c5..6c38d00 100644 --- a/mods/stations/init.lua +++ b/mods/stations/init.lua @@ -38,6 +38,7 @@ dofile(minetest.get_modpath('stations')..'/station_crystals.lua') dofile(minetest.get_modpath('stations')..'/station_dying.lua') dofile(minetest.get_modpath('stations')..'/station_fuel_pucks.lua') dofile(minetest.get_modpath('stations')..'/station_mortar.lua') +dofile(minetest.get_modpath('stations')..'/station_printing.lua') dofile(minetest.get_modpath('stations')..'/station_glazier.lua') dofile(minetest.get_modpath('stations')..'/station_spinning_wheel.lua') dofile(minetest.get_modpath('stations')..'/station_sewing.lua') diff --git a/mods/stations/models/stations_printing_press.obj b/mods/stations/models/stations_printing_press.obj new file mode 100644 index 0000000..eb2b004 --- /dev/null +++ b/mods/stations/models/stations_printing_press.obj @@ -0,0 +1,576 @@ +# Blender v2.82 (sub 7) OBJ File: 'stations.blend' +# www.blender.org +o Printing_press_Cube.010 +v 0.125000 -0.375000 0.437500 +v 0.125000 0.875000 0.437500 +v 0.125000 -0.375000 0.312500 +v 0.125000 0.875000 0.312500 +v 0.375000 -0.375000 0.437500 +v 0.375000 0.875000 0.437500 +v 0.375000 -0.375000 0.312500 +v 0.375000 0.875000 0.312500 +v -1.000000 0.125000 0.312500 +v -1.000000 0.250000 0.312500 +v -1.000000 0.125000 -0.312500 +v -1.000000 0.250000 -0.312500 +v 0.437500 0.125000 0.312500 +v 0.437500 0.250000 0.312500 +v 0.437500 0.125000 -0.312500 +v 0.437500 0.250000 -0.312500 +v -0.937500 -0.500000 0.250000 +v -0.937500 0.125000 0.250000 +v -0.937500 -0.500000 0.125000 +v -0.937500 0.125000 0.125000 +v -0.812500 -0.500000 0.250000 +v -0.812500 0.125000 0.250000 +v -0.812500 -0.500000 0.125000 +v -0.812500 0.125000 0.125000 +v 0.125000 -0.375000 -0.437500 +v 0.375000 -0.375000 -0.437500 +v 0.375000 0.875000 -0.437500 +v 0.062500 0.875000 0.500000 +v 0.062500 1.000000 0.500000 +v 0.062500 0.875000 -0.500000 +v 0.062500 1.000000 -0.500000 +v 0.437500 0.875000 0.500000 +v 0.437500 1.000000 0.500000 +v 0.437500 0.875000 -0.500000 +v 0.437500 1.000000 -0.500000 +v 0.062500 -0.500000 0.500000 +v 0.062500 -0.375000 0.500000 +v 0.062500 -0.500000 -0.500000 +v 0.062500 -0.375000 -0.500000 +v 0.437500 -0.500000 0.500000 +v 0.437500 -0.375000 0.500000 +v 0.437500 -0.500000 -0.500000 +v 0.437500 -0.375000 -0.500000 +v 0.125000 -0.375000 0.312500 +v 0.125000 0.125000 0.312500 +v 0.125000 -0.375000 0.187500 +v 0.125000 0.125000 0.187500 +v 0.375000 -0.375000 0.312500 +v 0.375000 0.125000 0.312500 +v 0.375000 -0.375000 0.187500 +v 0.375000 0.125000 0.187500 +v 0.375000 -0.375000 -0.312500 +v 0.375000 0.125000 -0.312500 +v 0.375000 -0.375000 -0.187500 +v 0.375000 0.125000 -0.187500 +v 0.125000 -0.375000 -0.312500 +v 0.125000 0.125000 -0.312500 +v 0.125000 -0.375000 -0.187500 +v 0.125000 0.125000 -0.187500 +v 0.125000 0.625000 0.312500 +v 0.125000 0.750000 0.312500 +v 0.125000 0.625000 -0.312500 +v 0.125000 0.750000 -0.312500 +v 0.375000 0.625000 0.312500 +v 0.375000 0.750000 0.312500 +v 0.375000 0.625000 -0.312500 +v 0.375000 0.750000 -0.312500 +v 0.187500 -0.125000 0.500000 +v 0.187500 -0.062500 0.500000 +v 0.187500 -0.125000 0.437500 +v 0.187500 -0.062500 0.437500 +v 0.312500 -0.125000 0.500000 +v 0.312500 -0.062500 0.500000 +v 0.312500 -0.125000 0.437500 +v 0.312500 -0.062500 0.437500 +v 0.187500 0.625000 0.500000 +v 0.187500 0.687500 0.500000 +v 0.187500 0.625000 0.437500 +v 0.187500 0.687500 0.437500 +v 0.312500 0.625000 0.500000 +v 0.312500 0.687500 0.500000 +v 0.312500 0.625000 0.437500 +v 0.312500 0.687500 0.437500 +v 0.312500 -0.125000 -0.500000 +v 0.312500 -0.062500 -0.500000 +v 0.312500 -0.125000 -0.437500 +v 0.312500 -0.062500 -0.437500 +v 0.187500 -0.125000 -0.500000 +v 0.187500 -0.062500 -0.500000 +v 0.187500 -0.125000 -0.437500 +v 0.187500 -0.062500 -0.437500 +v 0.312500 0.625000 -0.500000 +v 0.312500 0.687500 -0.500000 +v 0.312500 0.625000 -0.437500 +v 0.312500 0.687500 -0.437500 +v 0.187500 0.625000 -0.500000 +v 0.187500 0.687500 -0.500000 +v 0.187500 0.625000 -0.437500 +v 0.187500 0.687500 -0.437500 +v -0.937500 -0.500000 -0.125000 +v -0.937500 0.125000 -0.125000 +v -0.937500 -0.500000 -0.250000 +v -0.937500 0.125000 -0.250000 +v -0.812500 -0.500000 -0.125000 +v -0.812500 0.125000 -0.125000 +v -0.812500 -0.500000 -0.250000 +v -0.812500 0.125000 -0.250000 +v -0.937500 -0.125000 0.125000 +v -0.937500 -0.125000 -0.125000 +v -0.937500 -0.250000 0.125000 +v -0.937500 -0.250000 -0.125000 +v -0.812500 -0.125000 0.125000 +v -0.812500 -0.125000 -0.125000 +v -0.812500 -0.250000 0.125000 +v -0.812500 -0.250000 -0.125000 +v -0.687500 0.250000 0.250000 +v -0.687500 0.375000 0.250000 +v -0.687500 0.250000 -0.250000 +v -0.687500 0.375000 -0.250000 +v 0.000000 0.250000 0.250000 +v 0.000000 0.375000 0.250000 +v 0.000000 0.250000 -0.250000 +v 0.000000 0.375000 -0.250000 +v 0.000000 0.531250 0.031250 +v 0.000000 0.468750 0.031250 +v 0.297835 0.437500 -0.115485 +v 0.297835 0.562500 -0.115485 +v 0.365485 0.437500 -0.047835 +v 0.365485 0.562500 -0.047835 +v 0.365485 0.437500 0.047835 +v 0.365485 0.562500 0.047835 +v 0.297835 0.437500 0.115485 +v 0.297835 0.562500 0.115485 +v 0.202165 0.437500 0.115485 +v 0.202165 0.562500 0.115485 +v 0.134515 0.437500 0.047835 +v 0.134515 0.562500 0.047835 +v 0.134515 0.437500 -0.047835 +v 0.134515 0.562500 -0.047835 +v 0.202165 0.437500 -0.115485 +v 0.202165 0.562500 -0.115485 +v 0.000000 0.468750 -0.031250 +v 0.000000 0.531250 -0.031250 +v 0.500000 0.468750 0.031250 +v 0.500000 0.531250 0.031250 +v 0.500000 0.468750 -0.031250 +v 0.500000 0.531250 -0.031250 +v 0.281250 0.937500 0.031250 +v 0.218750 0.937500 0.031250 +v 0.218750 0.937500 -0.031250 +v 0.281250 0.937500 -0.031250 +v 0.218750 0.500000 0.031250 +v 0.281250 0.500000 0.031250 +v 0.218750 0.500000 -0.031250 +v 0.281250 0.500000 -0.031250 +v 0.125000 -0.375000 -0.312500 +v 0.125000 0.875000 -0.312500 +v 0.125000 0.875000 -0.437500 +v 0.375000 -0.375000 -0.312500 +v 0.375000 0.875000 -0.312500 +v 0.062500 -0.500000 0.500000 +v 0.062500 -0.375000 0.500000 +v 0.062500 -0.500000 -0.500000 +v 0.062500 -0.375000 -0.500000 +v 0.437500 -0.500000 0.500000 +v 0.437500 -0.375000 0.500000 +v 0.437500 -0.500000 -0.500000 +v 0.437500 -0.375000 -0.500000 +v -1.000000 0.125000 -0.250000 +v -1.000000 0.250000 -0.250000 +v 0.437500 0.125000 -0.250000 +v 0.437500 0.250000 -0.250000 +v -1.000000 0.125000 0.250000 +v 0.437500 0.250000 0.250000 +v -1.000000 0.250000 0.250000 +v 0.437500 0.125000 0.250000 +v 0.437500 0.312500 0.250000 +v 0.437500 0.312500 0.312500 +v -1.000000 0.312500 0.312500 +v -1.000000 0.312500 0.250000 +v -1.000000 0.312500 -0.250000 +v -1.000000 0.312500 -0.312500 +v 0.437500 0.312500 -0.312500 +v 0.437500 0.312500 -0.250000 +vt 0.312500 0.031250 +vt 0.000000 0.031250 +vt 0.000000 0.000000 +vt 0.312500 0.000000 +vt 0.312500 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.312500 0.125000 +vt 0.000000 0.093750 +vt 0.312500 0.093750 +vt 0.718750 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.906250 +vt 0.718750 0.906250 +vt 0.273438 0.859375 +vt 0.242188 0.859375 +vt 0.242188 0.843750 +vt 0.273438 0.843750 +vt 0.273438 0.812500 +vt 0.632812 0.812500 +vt 0.632812 0.843750 +vt 0.632812 0.984375 +vt 0.664062 0.984375 +vt 0.664062 1.000000 +vt 0.632812 1.000000 +vt 0.632812 0.562500 +vt 0.632812 0.593750 +vt 0.273438 0.593750 +vt 0.273438 0.562500 +vt 0.273438 0.984375 +vt 0.273438 1.000000 +vt 0.679688 0.984375 +vt 0.679688 1.000000 +vt 1.000000 0.492188 +vt 0.843750 0.492188 +vt 0.843750 0.460938 +vt 1.000000 0.460938 +vt 0.843750 0.429688 +vt 1.000000 0.429688 +vt 1.000000 0.562500 +vt 0.843750 0.562500 +vt 0.843750 0.531250 +vt 1.000000 0.531250 +vt 0.828125 0.468750 +vt 0.765625 0.468750 +vt 0.765625 0.437500 +vt 0.828125 0.437500 +vt 0.828125 0.531250 +vt 0.765625 0.531250 +vt 0.765625 0.500000 +vt 0.828125 0.500000 +vt 0.312500 0.203125 +vt 0.000000 0.203125 +vt 0.000000 0.234375 +vt 0.312500 0.234375 +vt 0.000000 0.296875 +vt 0.312500 0.296875 +vt 0.000000 0.328125 +vt 0.312500 0.328125 +vt 0.000000 0.390625 +vt 0.312500 0.390625 +vt 0.968750 0.750000 +vt 0.968750 0.781250 +vt 0.718750 0.781250 +vt 0.718750 0.750000 +vt 0.718750 0.875000 +vt 0.968750 0.875000 +vt 0.968750 0.906250 +vt 1.000000 0.906250 +vt 1.000000 1.000000 +vt 0.968750 1.000000 +vt 1.000000 0.703125 +vt 0.968750 0.703125 +vt 0.968750 0.609375 +vt 1.000000 0.609375 +vt 0.718750 0.734375 +vt 0.718750 0.703125 +vt 0.968750 0.734375 +vt 0.968750 0.578125 +vt 0.718750 0.609375 +vt 0.718750 0.578125 +vt 0.687500 0.609375 +vt 0.687500 0.703125 +vt 0.257812 0.804688 +vt 0.132812 0.804688 +vt 0.132812 0.773438 +vt 0.257812 0.773438 +vt 0.132812 0.710938 +vt 0.257812 0.710938 +vt 0.132812 0.679688 +vt 0.257812 0.679688 +vt 0.000000 0.679688 +vt 0.125000 0.679688 +vt 0.125000 0.710938 +vt 0.000000 0.710938 +vt 0.125000 0.773438 +vt 0.000000 0.773438 +vt 0.125000 0.804688 +vt 0.000000 0.804688 +vt 0.000000 1.000000 +vt 0.000000 0.968750 +vt 0.156250 0.968750 +vt 0.156250 1.000000 +vt 0.156250 0.875000 +vt 0.156250 0.906250 +vt 0.000000 0.906250 +vt 0.000000 0.875000 +vt 0.156250 0.812500 +vt 0.000000 0.812500 +vt 0.281250 0.500000 +vt 0.265625 0.500000 +vt 0.265625 0.484375 +vt 0.281250 0.484375 +vt 0.343750 0.500000 +vt 0.328125 0.500000 +vt 0.328125 0.484375 +vt 0.343750 0.484375 +vt 0.281250 0.546875 +vt 0.265625 0.546875 +vt 0.265625 0.531250 +vt 0.281250 0.531250 +vt 0.296875 0.500000 +vt 0.296875 0.531250 +vt 0.250000 0.531250 +vt 0.250000 0.500000 +vt 0.343750 0.546875 +vt 0.328125 0.546875 +vt 0.328125 0.531250 +vt 0.343750 0.531250 +vt 0.359375 0.500000 +vt 0.359375 0.531250 +vt 0.312500 0.531250 +vt 0.312500 0.500000 +vt 0.406250 0.500000 +vt 0.390625 0.500000 +vt 0.390625 0.484375 +vt 0.406250 0.484375 +vt 0.453125 0.531250 +vt 0.468750 0.531250 +vt 0.468750 0.546875 +vt 0.453125 0.546875 +vt 0.406250 0.546875 +vt 0.390625 0.546875 +vt 0.390625 0.531250 +vt 0.406250 0.531250 +vt 0.421875 0.500000 +vt 0.421875 0.531250 +vt 0.375000 0.531250 +vt 0.375000 0.500000 +vt 0.453125 0.484375 +vt 0.468750 0.484375 +vt 0.468750 0.500000 +vt 0.453125 0.500000 +vt 0.437500 0.531250 +vt 0.437500 0.500000 +vt 0.484375 0.500000 +vt 0.484375 0.531250 +vt 1.000000 0.382812 +vt 0.843750 0.382812 +vt 0.843750 0.351562 +vt 1.000000 0.351562 +vt 0.843750 0.320312 +vt 1.000000 0.320312 +vt 0.843750 0.289062 +vt 1.000000 0.289062 +vt 1.000000 0.414062 +vt 0.843750 0.414062 +vt 0.828125 0.562500 +vt 0.765625 0.562500 +vt 0.000000 0.515625 +vt 0.031250 0.515625 +vt 0.031250 0.640625 +vt 0.000000 0.640625 +vt 0.031250 0.671875 +vt 0.203125 0.640625 +vt 0.203125 0.671875 +vt 0.234375 0.640625 +vt 0.203125 0.515625 +vt 0.234375 0.515625 +vt 0.203125 0.484375 +vt 0.031250 0.484375 +vt 0.179688 0.421875 +vt 0.289062 0.421875 +vt 0.289062 0.437500 +vt 0.179688 0.437500 +vt 0.937500 0.093750 +vt 0.906250 0.093750 +vt 0.906250 0.070312 +vt 0.937500 0.070312 +vt 0.015625 0.437500 +vt 0.148438 0.437500 +vt 0.148438 0.453125 +vt 0.015625 0.453125 +vt 0.906250 0.046875 +vt 0.937500 0.046875 +vt 0.148438 0.421875 +vt 0.015625 0.421875 +vt 0.015625 0.406250 +vt 0.148438 0.406250 +vt 0.906250 0.023438 +vt 0.937500 0.023438 +vt 0.289062 0.406250 +vt 0.179688 0.406250 +vt 0.015625 0.468750 +vt 0.148438 0.468750 +vt 0.906250 0.000000 +vt 0.937500 0.000000 +vt 0.000000 0.421875 +vt 0.000000 0.406250 +vt 0.937500 0.187500 +vt 0.906250 0.187500 +vt 0.906250 0.164062 +vt 0.937500 0.164062 +vt 0.179688 0.453125 +vt 0.289062 0.453125 +vt 0.906250 0.140625 +vt 0.937500 0.140625 +vt 0.960110 0.056413 +vt 0.943587 0.039890 +vt 0.943587 0.016523 +vt 0.960110 0.000000 +vt 0.983477 0.000000 +vt 1.000000 0.016523 +vt 1.000000 0.039890 +vt 0.983477 0.056413 +vt 0.164062 0.406250 +vt 0.164062 0.421875 +vt 0.906250 0.117188 +vt 0.937500 0.117188 +vt 0.289062 0.468750 +vt 0.179688 0.468750 +vt 1.000000 0.039890 +vt 0.983477 0.056413 +vt 0.960110 0.056413 +vt 0.943587 0.039890 +vt 0.943587 0.016523 +vt 0.960110 0.000000 +vt 0.983477 0.000000 +vt 1.000000 0.016523 +vt 0.664062 0.859375 +vt 0.664062 0.843750 +vt 0.679688 0.843750 +vt 0.679688 0.859375 +vt 0.632812 0.859375 +vt 0.242188 0.984375 +vt 0.242188 1.000000 +vt 0.632812 0.765625 +vt 0.273438 0.765625 +vt 0.273438 0.640625 +vt 0.632812 0.640625 +vt 0.632812 0.625000 +vt 0.273438 0.625000 +vt 0.273438 0.609375 +vt 0.632812 0.609375 +vt 0.226562 1.000000 +vt 0.226562 0.984375 +vt 0.632812 0.796875 +vt 0.273438 0.796875 +vt 0.273438 0.781250 +vt 0.632812 0.781250 +vt 0.226562 0.859375 +vt 0.226562 0.843750 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/5/2 4/6/2 8/7/2 7/8/2 +f 7/8/3 8/7/3 6/9/3 5/10/3 +f 5/10/4 6/9/4 2/2/4 1/1/4 +f 30/11/2 31/12/2 35/13/2 34/14/2 +f 169/15/1 170/16/1 12/17/1 11/18/1 +f 11/18/2 12/19/2 16/20/2 15/21/2 +f 176/22/3 174/23/3 14/24/3 13/25/3 +f 13/26/4 14/27/4 10/28/4 9/29/4 +f 173/30/5 176/22/5 13/25/5 9/31/5 +f 14/24/3 174/23/3 177/32/3 178/33/3 +f 17/34/1 18/35/1 20/36/1 19/37/1 +f 19/37/2 20/36/2 24/38/2 23/39/2 +f 23/40/3 24/41/3 22/42/3 21/43/3 +f 21/43/4 22/42/4 18/35/4 17/34/4 +f 110/44/5 111/45/5 115/46/5 114/47/5 +f 112/48/6 113/49/6 109/50/6 108/51/6 +f 156/52/1 157/53/1 158/54/1 25/55/1 +f 25/55/2 158/54/2 27/56/2 26/57/2 +f 26/57/3 27/56/3 160/58/3 159/59/3 +f 159/59/4 160/58/4 157/60/4 156/61/4 +f 28/62/1 29/63/1 31/64/1 30/65/1 +f 34/14/3 35/66/3 33/67/3 32/68/3 +f 32/68/4 33/69/4 29/70/4 28/71/4 +f 30/11/5 34/14/5 32/68/5 28/71/5 +f 35/66/6 31/64/6 29/63/6 33/67/6 +f 38/72/2 39/73/2 43/74/2 42/75/2 +f 36/76/1 37/77/1 39/73/1 38/78/1 +f 42/79/3 43/74/3 41/80/3 40/81/3 +f 40/82/4 41/80/4 37/77/4 36/83/4 +f 44/84/1 45/85/1 47/86/1 46/87/1 +f 43/74/6 39/73/6 37/77/6 41/80/6 +f 46/87/2 47/86/2 51/88/2 50/89/2 +f 50/89/3 51/88/3 49/90/3 48/91/3 +f 52/92/3 53/93/3 55/94/3 54/95/3 +f 54/95/4 55/94/4 59/96/4 58/97/4 +f 58/97/1 59/96/1 57/98/1 56/99/1 +f 60/100/1 61/101/1 63/102/1 62/103/1 +f 66/104/3 67/105/3 65/106/3 64/107/3 +f 62/108/5 66/104/5 64/107/5 60/109/5 +f 67/105/6 63/102/6 61/101/6 65/106/6 +f 68/110/1 69/111/1 71/112/1 70/113/1 +f 76/114/1 77/115/1 79/116/1 78/117/1 +f 74/118/3 75/119/3 73/120/3 72/121/3 +f 72/121/4 73/120/4 69/111/4 68/110/4 +f 70/122/5 74/123/5 72/121/5 68/110/5 +f 75/124/6 71/125/6 69/111/6 73/120/6 +f 82/126/3 83/127/3 81/128/3 80/129/3 +f 80/129/4 81/128/4 77/115/4 76/114/4 +f 78/130/5 82/131/5 80/129/5 76/114/5 +f 83/132/6 79/133/6 77/115/6 81/128/6 +f 84/134/3 85/135/3 87/136/3 86/137/3 +f 92/138/3 93/139/3 95/140/3 94/141/3 +f 90/142/1 91/143/1 89/144/1 88/145/1 +f 88/145/2 89/144/2 85/135/2 84/134/2 +f 86/146/5 90/147/5 88/145/5 84/134/5 +f 91/148/6 87/149/6 85/135/6 89/144/6 +f 98/150/1 99/151/1 97/152/1 96/153/1 +f 96/153/2 97/152/2 93/139/2 92/138/2 +f 94/154/5 98/155/5 96/153/5 92/138/5 +f 99/156/6 95/157/6 93/139/6 97/152/6 +f 100/158/1 101/159/1 103/160/1 102/161/1 +f 102/161/2 103/160/2 107/162/2 106/163/2 +f 106/163/3 107/162/3 105/164/3 104/165/3 +f 104/166/4 105/167/4 101/159/4 100/158/4 +f 108/51/1 109/50/1 111/45/1 110/44/1 +f 114/168/3 115/169/3 113/49/3 112/48/3 +f 116/170/1 117/171/1 119/172/1 118/173/1 +f 118/174/2 119/172/2 123/175/2 122/176/2 +f 122/177/3 123/175/3 121/178/3 120/179/3 +f 120/180/4 121/178/4 117/171/4 116/181/4 +f 123/175/6 119/172/6 117/171/6 121/178/6 +f 155/182/3 151/183/3 148/184/3 153/185/3 +f 126/186/7 127/187/7 129/188/7 128/189/7 +f 147/190/6 143/191/6 124/192/6 145/193/6 +f 128/189/3 129/188/3 131/194/3 130/195/3 +f 142/196/5 146/197/5 144/198/5 125/199/5 +f 130/195/8 131/194/8 133/200/8 132/201/8 +f 150/202/2 151/183/2 155/182/2 154/203/2 +f 144/204/4 145/193/4 124/192/4 125/205/4 +f 132/201/4 133/200/4 135/206/4 134/207/4 +f 146/197/3 147/208/3 145/209/3 144/198/3 +f 134/210/9 135/211/9 137/212/9 136/213/9 +f 152/214/4 153/185/4 148/184/4 149/215/4 +f 142/196/2 143/191/2 147/190/2 146/197/2 +f 136/213/1 137/212/1 139/216/1 138/217/1 +f 129/218/6 127/219/6 141/220/6 139/221/6 137/222/6 135/223/6 133/224/6 131/225/6 +f 125/199/1 124/226/1 143/227/1 142/196/1 +f 138/217/10 139/216/10 141/228/10 140/229/10 +f 150/230/1 154/231/1 152/214/1 149/215/1 +f 140/229/2 141/228/2 127/187/2 126/186/2 +f 126/232/5 128/233/5 130/234/5 132/235/5 134/236/5 136/237/5 138/238/5 140/239/5 +f 172/240/3 16/241/3 183/242/3 184/243/3 +f 11/18/5 15/21/5 171/244/5 169/15/5 +f 15/21/3 16/241/3 172/240/3 171/244/3 +f 173/30/1 175/245/1 170/16/1 169/15/1 +f 9/31/1 10/246/1 175/245/1 173/30/1 +f 172/247/6 170/248/6 175/249/6 174/250/6 +f 169/15/5 171/244/5 176/22/5 173/30/5 +f 171/244/3 172/240/3 174/23/3 176/22/3 +f 177/251/6 180/252/6 179/253/6 178/254/6 +f 10/28/4 14/27/4 178/254/4 179/253/4 +f 175/245/1 10/246/1 179/255/1 180/256/1 +f 174/250/2 175/249/2 180/252/2 177/251/2 +f 183/257/6 182/258/6 181/259/6 184/260/6 +f 12/17/1 170/16/1 181/261/1 182/262/1 +f 16/20/2 12/19/2 182/258/2 183/257/2 +f 170/248/4 172/247/4 184/260/4 181/259/4 +l 168 43 +l 42 167 +l 166 41 +l 40 165 +l 163 38 +l 39 164 +l 161 36 +l 37 162 diff --git a/mods/stations/station_printing.lua b/mods/stations/station_printing.lua new file mode 100644 index 0000000..5ef03f6 --- /dev/null +++ b/mods/stations/station_printing.lua @@ -0,0 +1,119 @@ +minetest.register_node('stations:printing_press', { + description = 'Printing Press', + drawtype = 'mesh', + mesh = 'stations_printing_press.obj', + tiles = {'stations_printing_press.png'}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = 'facedir', + paramtype = 'light', + selection_box = { + type = 'fixed', + fixed = { + {-.5, .4, -.5, 0, 1, .5}, --Upright + {-.5, -.5, -.5, 1, .4, .5}, --base + } + }, + collision_box = { + type = 'fixed', + fixed = {-.5, -.5, -.5, 1, .4, .5}, --base + }, + groups = {not_in_creative_inventory=1, oddly_breakable_by_hand=3, choppy=1}, + after_place_node = function(pos, placer) + if not epic.space_to_side(pos) then + minetest.remove_node(pos) + return itemstack + else + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size('master', 1) + inv:set_size('input', 1) + inv:set_size('output', 1) + meta:set_string('infotext', 'printing press') + meta:set_string('owner' , placer:get_player_name()) + end + end, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + epic.remove_side_node(pos, oldnode) + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if listname == 'output' then + return 0 + elseif listname == 'master' then + local meta = minetest.get_meta(pos) + local name = player:get_player_name() + local owner = meta:get_string('owner') + if name == owner then + if stack:get_name() == ('default:book_written') then + return 1 + else + return 0 + end + else + return 0 + end + elseif listname == 'input' then + if stack:get_name() == ('default:book') then + return 1 + else + return 0 + end + end + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + return 0 + end, + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + local meta=minetest.get_meta(pos) + local name = player:get_player_name() + local owner = meta:get_string('owner') + local spos = pos.x..','..pos.y..','..pos.z + local gui = 'size[8,7;]'.. + 'label[5,0.25;Master Copy:]'.. + 'list[nodemeta:'..spos..';master;4,0;1,1]'.. + 'label[1.5,1.25;Empty Book.]'.. + 'list[nodemeta:'..spos..';input;.5,1;1,1;]'.. + 'label[1.5,2.25;Printed Copy.]'.. + 'list[nodemeta:'..spos..';output;.5,2;1,1;]'.. + 'button[4.5,1.5;2,1;copy;Print a copy!]'.. + 'list[current_player;main;0,3;8,4;]' + meta:set_string('formspec', gui) + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + if fields ['copy'] then + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local master_stack = inv:get_stack('master', 1) + local input_stack = inv:get_stack('input', 1) + local master_book = master_stack:get_name() + local empty_book = input_stack:get_name() + if master_book == 'default:book_written' then + if empty_book == 'default:book' then + inv:add_item('output', 'default:book_written') + input_stack:take_item(1) + local output = inv:get_stack('output', 1) + local copymeta = master_stack:get_meta():to_table() + output:get_meta():from_table(copymeta) + inv:set_stack('output', 1, output) + inv:set_stack('input', 1, input_stack) + end + end + end + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local name = player:get_player_name() + local owner = meta:get_string('owner') + if listname == 'master' then + if name == owner then + return 1 + else + return 0 + end + elseif listname == 'input' then + return 1 + elseif listname == 'output' then + return 1 + end + end, +}) diff --git a/mods/stations/station_sewing.lua b/mods/stations/station_sewing.lua index 4ff818c..5336937 100644 --- a/mods/stations/station_sewing.lua +++ b/mods/stations/station_sewing.lua @@ -24,9 +24,10 @@ local sewing_table_def = { if not epic.space_to_side(pos) then minetest.remove_node(pos) return itemstack + else + local meta = minetest.get_meta(pos) + meta:set_string('infotext', 'Sewing Station') end - local meta = minetest.get_meta(pos) - meta:set_string('infotext', 'Sewing Station') end, after_dig_node = function(pos, oldnode, oldmetadata, digger) epic.remove_side_node(pos, oldnode) @@ -68,9 +69,10 @@ local sewing_locked_def = { if not epic.space_to_side(pos) then minetest.remove_node(pos) return itemstack + else + local meta = minetest.get_meta(pos) + meta:set_string('infotext', 'Sewing Station (locked)') end - local meta = minetest.get_meta(pos) - meta:set_string('infotext', 'Sewing Station (locked)') end, after_dig_node = function(pos, oldnode, oldmetadata, digger) epic.remove_side_node(pos, oldnode) diff --git a/mods/stations/textures/stations_printing_press.png b/mods/stations/textures/stations_printing_press.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6cb6b5b342438b6b5fdabed3c13002f5290da7 GIT binary patch literal 36100 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 literal 0 HcmV?d00001