--[[ tempsurvive.register_clothe(name,{ texture="", -- required description="", -- optional part="", -- optional (arm/leg, chested/head, head, body) layer=1, -- optional (texture layer) warming=1, -- optional cooling=1, -- optional }) tempsurvive.register_cloth("name","hexcolor",craft-count-output,craft) --]] tempsurvive.register_cloth("white","ffffff",4,{{"wool:white"}}) tempsurvive.register_cloth("gray","777777",4,{{"wool:grey"}}) tempsurvive.register_cloth("darkgrey","333333",4,{{"wool:dark_grey"}}) tempsurvive.register_cloth("black","000000",4,{{"wool:black"}}) tempsurvive.register_cloth("lightgreen","00ff00",4,{{"wool:green"}}) tempsurvive.register_cloth("green","008800",4,{{"wool:dark_green"}}) tempsurvive.register_cloth("darkgreen","005500",8,{{"wool:dark_green","wool:black"}}) tempsurvive.register_cloth("yellow","ffff00",4,{{"wool:yellow"}}) tempsurvive.register_cloth("red","ff0000",4,{{"wool:red"}}) tempsurvive.register_cloth("darkred","770000",8,{{"wool:red","wool:black"}}) tempsurvive.register_cloth("brown","251700",4,{{"wool:brown"}}) tempsurvive.register_cloth("orange","ff4500",4,{{"wool:orange"}}) tempsurvive.register_cloth("pruple","9300ff",4,{{"wool:violet"}}) tempsurvive.register_cloth("pink","ff65b8",4,{{"wool:pink"}}) tempsurvive.register_cloth("cyan","00ffff",4,{{"wool:cyan"}}) tempsurvive.register_cloth("blue","0000ff",4,{{"wool:blue"}}) tempsurvive.register_cloth("lightblue","0081ff",8,{{"wool:blue","wool:white"}}) tempsurvive.register_cloth("darkblue","000044",4,{{"wool:blue","wool:black"}}) minetest.register_node("tempsurvive:fire", { tiles = { { name="fire_basic_flame_animated.png", animation={ type="vertical_frames", aspect_w=16, aspect_h=16, length=1, } } }, groups = {not_in_creative_inventory=1}, drawtype="firelike", paramtype="light", light_source=13, sunlight_propagetes=true, drop="", }) minetest.register_node("tempsurvive:cold_fire", { tiles = { { name="fire_basic_flame_animated.png^[colorize:#000055aa", animation={ type="vertical_frames", aspect_w=16, aspect_h=16, length=1, } } }, groups = {not_in_creative_inventory=1}, drawtype="firelike", paramtype="light", light_source=13, sunlight_propagetes=true, drop="", }) minetest.register_craft({ output = "tempsurvive:stove", recipe = { {"default:stone_block","default:stone_block","default:stone_block"}, {"","default:glass","default:stone_block"}, {"default:stone_block","default:stone_block","default:stone_block"}, } }) minetest.register_node("tempsurvive:stove", { description = "stove", groups = {cracky=3,tempsurvive_temp_by_meta=1,tempsurvive_rad=15,tempsurvive=1}, tiles={"tempsurvive_stove.png"}, drawtype="mesh", mesh="tempsurvive_stove.obj", paramtype="light", paramtype2="facedir", paramtype2="facedir", selection_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5}, } }, collision_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5}, } }, on_timer = function (pos, elapsed) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local slot=meta:get_int("slot") local stack=inv:get_stack("burning",slot) local ind=slot if inv:get_stack("burning",slot):get_name()=="" then local slots={1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9} for i=slot,slot+9 do ind=i slot=slots[i] stack=inv:get_stack("burning",slot) if stack:get_count()>0 then break end end end local time=minetest.get_craft_result({method="fuel", width=1, items={stack:get_name()}}).time if time==0 then time=minetest.get_item_group(stack:get_name(),"flammable") end if time==0 then time=minetest.get_item_group(stack:get_name(),"igniter") end if time==0 then time=minetest.get_item_group(stack:get_name(),"tempsurvive_add") end meta:set_int("power",meta:get_int("power")+time) stack:set_count(stack:get_count()-1) inv:set_stack("burning",slot,stack) if time==0 then minetest.remove_node({x=pos.x,y=pos.y+1,z=pos.z}) meta:set_int("temp",0) meta:set_int("power",0) return elseif math.abs(meta:get_int("temp"))0 then minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="tempsurvive:fire"}) else minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="tempsurvive:cold_fire"}) end slot=slot+1 if slot>9 or ind>=9 then slot=1 meta:set_int("temp",meta:get_int("power")) meta:set_int("power",0) end meta:set_int("slot",slot) minetest.get_node_timer(pos):start(math.abs(time)) end, on_construct=function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() meta:set_int("power", 0) meta:set_int("temp", 0) meta:set_int("slot", 1) inv:set_size("burning", 9) meta:set_string("formspec", "size[8,8]" .."list[current_name;burning;2.5,0;3,3;]" .."list[current_player;main;0,4;8,32;]" .."listring[current_player;main]" .."listring[current_name;burning]" ) end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) local item=stack:get_name() local time=minetest.get_craft_result({method="fuel", width=1, items={item}}).time + minetest.get_item_group(item,"flammable") + minetest.get_item_group(item,"igniter") + minetest.get_item_group(stack:get_name(),"tempsurvive_add") if time==0 then return 0 end if not minetest.get_node_timer(pos):is_started() then minetest.get_node_timer(pos):start(0.2) end return stack:get_count() end, allow_metadata_inventory_take = function(pos, listname, index, stack, player) return 0 end, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) return 0 end, on_destruct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() minetest.remove_node({x=pos.x,y=pos.y+1,z=pos.z}) for i=1,9 do minetest.add_item(pos, inv:get_stack("burning",i)) end end, on_place = function(itemstack, placer, pointed_thing) if pointed_thing.type=="node" then local pos=pointed_thing.above pos={x=pos.x,y=pos.y+1,z=pos.z} local n=minetest.registered_nodes[minetest.get_node(pos).name] if minetest.is_protected(pos,placer:get_player_name())==false and n and n.buildable_to then minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z},{name="tempsurvive:stove"}) itemstack:take_item() end end return itemstack end, }) minetest.register_craftitem("tempsurvive:plank_with_stick", { description = "Plank with stick", inventory_image = "tempsurvive_plank_with_stick.png", groups = {wood=1,flammable=4}, on_place = function(itemstack, user, pointed_thing) if pointed_thing.type=="node" and not minetest.is_protected(pointed_thing.above,user:get_player_name()) then itemstack:take_item() minetest.set_node(pointed_thing.above,{name="tempsurvive:keepable_fire"}) end return itemstack end }) minetest.register_craft({ output = "tempsurvive:plank_with_stick 2", recipe = { {"group:wood","",""}, {"","",""}, {"","","group:stick"}, } }) minetest.register_node("tempsurvive:keepable_fire", { description = "Keepable fire", tiles = { { name="fire_basic_flame_animated.png", animation={ type="vertical_frames", aspect_w=16, aspect_h=16, length=1, } } }, groups = {dig_immediate=3,igniter=2,not_in_creative_inventory=1,tempsurvive_temp_by_meta=1,tempsurvive_rad=15,tempsurvive=1}, drawtype="firelike", paramtype="light", light_source=12, walkable=false, sunlight_propagetes=true, damage_per_secound=5, floodable=true, drop="", on_timer = function (pos, elapsed) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local slot=meta:get_int("slot") local stack=inv:get_stack("burning",slot) local ind=slot if inv:get_stack("burning",slot):get_name()=="" then local slots={1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9} for i=slot,slot+9 do ind=i slot=slots[i] stack=inv:get_stack("burning",slot) if stack:get_count()>0 then break end end end local time=minetest.get_craft_result({method="fuel", width=1, items={stack:get_name()}}).time if time==0 then time=minetest.get_item_group(stack:get_name(),"flammable") end if time==0 then time=minetest.get_item_group(stack:get_name(),"igniter") end if time==0 and stack:get_count()>0 and meta:get_int("temp")>15 then time=1 meta:set_int("power",meta:get_int("power")/10) end meta:set_int("power",meta:get_int("power")+time) stack:set_count(stack:get_count()-1) inv:set_stack("burning",slot,stack) if time==0 then minetest.remove_node(pos) return elseif meta:get_int("temp")9 or ind>=9 then slot=1 meta:set_int("temp",meta:get_int("power")) meta:set_int("power",0) end meta:set_int("slot",slot) minetest.get_node_timer(pos):start(time) end, on_construct=function(pos) minetest.get_node_timer(pos):start(math.random(5,10)) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() meta:set_int("power", 0) meta:set_int("temp", 0) meta:set_int("slot", 1) inv:set_size("burning", 9) meta:set_string("formspec", "size[8,8]" .."list[current_name;burning;2.5,0;3,3;]" .."list[current_player;main;0,4;8,32;]" .."listring[current_player;main]" .."listring[current_name;burning]" ) end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) return stack:get_count() end, allow_metadata_inventory_take = function(pos, listname, index, stack, player) return 0 end, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) return 0 end, on_destruct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() for i=1,9 do minetest.add_item(pos, inv:get_stack("burning",i)) end end, }) minetest.register_node("tempsurvive:clothes_bag", { description = "Clothes bag", tiles = {"tempsurvive_bag.png"}, groups = {dig_immediate=3}, drawtype="nodebox", paramtype="light", paramtype2="facedir", node_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.3125, 0.5, 0.0625, 0.375}, {-0.5, 0.0625, -0.25, 0.5, 0.125, 0.3125} } }, on_use=function(itemstack, user, pointed_thing) local w,c=0,0 local inv=user:get_inventory() for i=1,9,1 do local name=inv:get_stack("clothes",i):get_name() local a=tempsurvive.clothes[name] if a then c=c+a.cooling w=w+a.warming end end local gui="size[8,8]" .."list[current_player;clothes;2.5,0;3,3;]" .."list[current_player;main;0,4;8,32;]" .."listring[current_player;main]" .."listring[current_player;clothes]" .."label[0,0;Warming: " .. w .."\nCooling: " .. c .."]" minetest.after(0.1, function(gui) return minetest.show_formspec(user:get_player_name(), "tempsurvive.bag",gui) end, gui) end, on_rightclick = function(pos, node, player, itemstack, pointed_thing) minetest.registered_nodes["tempsurvive:clothes_bag"].on_use(1,player) end, }) minetest.register_craft({ output = "tempsurvive:clothes_bag", recipe = { {"group:wool","group:tempsurvive_cloths","group:wool"}, } }) minetest.register_craft({ type = "fuel", recipe = "tempsurvive:clothes_bag", burntime = 4 }) minetest.register_node("tempsurvive:thermometer", { description = "Thermometer", tiles = {"tempsurvive_thermometer.png"}, inventory_image="tempsurvive_thermometer_item.png", wield_image="tempsurvive_thermometer_item.png", liquids_pointable=true, groups = {dig_immediate=3}, drawtype="nodebox", paramtype="light", paramtype2="facedir", walkable=false, node_box = { type = "fixed", fixed = { {-0.1, -0.25, 0.43, 0.1, 0.25, 0.5} } }, on_use=function(itemstack, user, pointed_thing) local pos=pointed_thing.above or user:get_pos() local temp=tempsurvive.get_bio_temperature(pos) temp=tempsurvive.get_artificial_temperature(pos,temp) minetest.chat_send_player(user:get_player_name(), math.floor(temp*10)*0.1) end, on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string("infotext", math.floor(tempsurvive.get_bio_temperature(pos)*10)*0.1) minetest.get_node_timer(pos):start(2) end, on_timer = function (pos, elapsed) local meta=minetest.get_meta(pos) local temp=tempsurvive.get_bio_temperature(pos) temp=tempsurvive.get_artificial_temperature(pos,temp) meta:set_string("infotext", math.floor(temp*10)*0.1) return true end, }) minetest.register_craft({ output = "tempsurvive:thermometer", recipe = { {"","default:bronze_ingot",""}, {"","default:wood",""}, {"","default:glass",""}, } }) tempsurvive.register_clothe("leather_gloves",{ description="Leather Gloves", texture="tempsurvive_gloves.png", part="arm", layer=9, craft={ {"tempsurvive:cloth_brown","","tempsurvive:cloth_brown"}, {"tempsurvive:cloth_brown","","tempsurvive:cloth_brown"}, {"","",""}, }, }) tempsurvive.register_clothe("leather_shoes",{ description="Leather Shoes", texture="tempsurvive_shoes.png", part="leg", layer=9, craft={ {"","",""}, {"tempsurvive:cloth_brown","","tempsurvive:cloth_brown"}, {"tempsurvive:cloth_brown","","tempsurvive:cloth_brown"}, }, }) tempsurvive.register_clothe("shirt",{ description="Red Shirt", texture="tempsurvive_shirt.png", part="chested", layer=1, warming=1, craft={ {"tempsurvive:cloth_red","tempsurvive:cloth_red","tempsurvive:cloth_red"}, {"","",""}, {"","",""}, }, }) tempsurvive.register_clothe("sweatshirt",{ description="Orange Sweatshirt", texture="tempsurvive_sweatshirt.png", part="chested", layer=2, craft={ {"tempsurvive:cloth_orange","tempsurvive:cloth_orange","tempsurvive:cloth_orange"}, {"","tempsurvive:cloth_orange",""}, {"","tempsurvive:cloth_orange",""}, } }) tempsurvive.register_clothe("brown_woolhat",{ description="Brown Woolhat", texture="tempsurvive_brownwollhat.png", part="head", layer=2, craft={ {"tempsurvive:cloth_brown","tempsurvive:cloth_brown","tempsurvive:cloth_brown"}, {"tempsurvive:cloth_brown","","tempsurvive:cloth_brown"}, } }) tempsurvive.register_clothe("lightblue_overall",{ description="Lightblue Overall", texture="tempsurvive_lightblueoverall.png", part="body", warming=10, layer=8, craft={ {"tempsurvive:cloth_lightblue","tempsurvive:cloth_lightblue","tempsurvive:cloth_lightblue"}, {"tempsurvive:cloth_lightblue","tempsurvive:cloth_darkblue","tempsurvive:cloth_lightblue"}, {"tempsurvive:cloth_lightblue","wool:blue","tempsurvive:cloth_lightblue"}, } })