From 1711cbcbd83c7ed4d59827f24da941b4c4d42741 Mon Sep 17 00:00:00 2001
From: Jeija <norrepli@gmail.com>
Date: Wed, 19 Jun 2013 14:23:29 +0200
Subject: [PATCH] Add dispenser

---
 mesecons_dispenser/depends.txt                |   1 +
 mesecons_dispenser/init.lua                   |  57 ++++++++++++++++++
 .../textures/mesecons_dispenser_bottom.png    | Bin 0 -> 731 bytes
 .../textures/mesecons_dispenser_front.png     | Bin 0 -> 827 bytes
 .../textures/mesecons_dispenser_side.png      | Bin 0 -> 731 bytes
 .../textures/mesecons_dispenser_top.png       | Bin 0 -> 731 bytes
 6 files changed, 58 insertions(+)
 create mode 100644 mesecons_dispenser/depends.txt
 create mode 100644 mesecons_dispenser/init.lua
 create mode 100644 mesecons_textures/textures/mesecons_dispenser_bottom.png
 create mode 100644 mesecons_textures/textures/mesecons_dispenser_front.png
 create mode 100644 mesecons_textures/textures/mesecons_dispenser_side.png
 create mode 100644 mesecons_textures/textures/mesecons_dispenser_top.png

diff --git a/mesecons_dispenser/depends.txt b/mesecons_dispenser/depends.txt
new file mode 100644
index 0000000..4ad96d5
--- /dev/null
+++ b/mesecons_dispenser/depends.txt
@@ -0,0 +1 @@
+default
diff --git a/mesecons_dispenser/init.lua b/mesecons_dispenser/init.lua
new file mode 100644
index 0000000..f974b4a
--- /dev/null
+++ b/mesecons_dispenser/init.lua
@@ -0,0 +1,57 @@
+minetest.register_node("mesecons_dispenser:dispenser", {
+	description = "Dispenser",
+	tiles = {"mesecons_dispenser_top.png" , "mesecons_dispenser_bottom.png",
+		 "mesecons_dispenser_side.png", "mesecons_dispenser_side.png"   ,
+		 "mesecons_dispenser_side.png", "mesecons_dispenser_front.png"},
+	paramtype2 = "facedir",
+	groups = {cracky=2},
+	sounds = default.node_sound_stone_defaults(),
+	on_construct = function(pos)
+		local meta = minetest.env:get_meta(pos)
+		meta:set_string("formspec",
+				"size[8,7]"..
+				"list[current_name;main;2.5,0;3,3;]"..
+				"list[current_player;main;0,3;8,4;]")
+		local inv = meta:get_inventory()
+		inv:set_size("main", 3*3)
+	end,
+	mesecons = {effector={
+		action_on = function (pos, node)
+			local dir = {{x=1, y=0, z=0}}
+			for _ = 0, node.param2 do
+				dir = mesecon:rotate_rules_left(dir)
+			end
+			dir = dir[1]
+			local objpos = mesecon:addPosRule(pos, {x=dir.x/2, y=dir.y/2, z=dir.z/2})
+			--minetest.env:add_node(mesecon:addPosRule(pos, dir[1]), {name="default:wood"})
+			local inv = minetest.env:get_meta(pos):get_inventory()
+			local stacks = {}
+			for j = 1, 9 do
+				local ts = inv:get_stack("main", j)
+				if not ts:is_empty() then
+					table.insert(stacks, {stack = ts, id = j})
+				end
+			end
+			print(dump(stacks))
+			if #stacks > 0 then
+				local sn = math.random(1, #stacks)
+				local takenitem = stacks[sn].stack:take_item()
+				inv:set_stack("main", stacks[sn].id, stacks[sn].stack)
+				print(dump(takenitem:to_table()))
+				local obj = minetest.env:add_item(objpos, takenitem:to_table())
+				obj:setvelocity({	x=dir.x*5+math.random(1, 100)/50-0.5,
+							y=dir.y*5+math.random(1, 100)/50-0.5,
+							z=dir.z*5+math.random(1, 100)/50-0.5})
+			end
+		end
+	}},
+})
+
+minetest.register_craft({
+	output = 'mesecons_dispenser:dispenser',
+	recipe = {
+		{"default:cobble", "default:cobble", "default:cobble"},
+		{"default:cobble", "mesecons_materials:fiber", "default:cobble"},
+		{"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"},
+	}
+})
diff --git a/mesecons_textures/textures/mesecons_dispenser_bottom.png b/mesecons_textures/textures/mesecons_dispenser_bottom.png
new file mode 100644
index 0000000000000000000000000000000000000000..c86782a2147130bb2b12644fb767e33ad5f4b1de
GIT binary patch
literal 731
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to7J0fjhFF}oo$T8!6DrX<
z|952URa@h3L+Q;Nkt+l|6a=TL2=H?J(~f-=RNpN<{ax$}C#4mFRcb8H7BAnGwQE`4
z-Cf`J>Q&7+y1Ux4U|w<GuaCd;PbY0u=uYT$)I7T3HsgfN2|dRm*j+mc)t<Y=UT5gw
z`1basWwBSq`wO=Wj(2nzoHsr{ujWkt{{KgdcD4j<xM$qjuvLuVxoz3)Qj6yuhL=ou
zcPA<=Ka#a|(cPH9P|@1^kN3DA6ZCS-?EOAZr%7+=gkrXY?Y9%xx@Mj|`c(Dw)k#x~
zyLYAaO<a6fly$>3C8d~Lvl{|T4A(4QWgWbEQ!+I4<I~USe|~<SB|hKw+4J~1SIw>4
zXQXY*txk9R`{i)?(skJ`E&r<AWAzz242$0XVD|I#k6b&gnlZT}QK`jYbIv!Odvm`}
zxpeWXty}h-ty6*`u9)WkvwZqdo&U%CyR63|9+@Pram;qMc>m#EVte9)U%#sORaKoh
z&V26Kzw_aX7aYmDlUn!X=Py1hk<8$s`IdFdwGNJ@B42bLZp+QQJ+1wF|IL`K74Ie5
z9`ac<1aW2eIJyLQO$<tsad&CCu5Z6Ia~ea<*GHPS--^AKaXqy!=GY|@({1moi_R^X
zVsI>B?bFxc^FO~oX}NUE6P=vx(R^X6cON=x5q#bBoaGyFfBA=doi%$ealM!E(hL#2
zroO!T(lLXh9(!!x+bXggD?GC9em=v8(AJI*AO0DJhHktWvtUcwjkgvyHcMVtcX5P<
z8u|*?UVpn?U|DAnS2D+wIg#0CoB7{=d~(sfJYeqkBe(5e%Vf?wnaO|o*_=QxMJ1Uv
zd>f8!+WjtK|9+L!g)5~GiD)bpNIqi8ejsV1!m*CMlI~j1U;gS_eY>mf^DoQ#J(b>?
ttq-3))7xg@Yw=t_a9eKo*LnXLEuJ(?y!0Ypj)8%J!PC{xWt~$(695o5W61yj

literal 0
HcmV?d00001

diff --git a/mesecons_textures/textures/mesecons_dispenser_front.png b/mesecons_textures/textures/mesecons_dispenser_front.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea07ed15dc4970cbb905a9f9d32d47628ef72393
GIT binary patch
literal 827
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG
za29w(7Bet#3xhBt!>l<H3=9nHC7!;n>~~pt1z7a{B+YbZU|>4o>Eak-ak_W1cScOA
zMBDuTMgQhlo;<TeR;4gNDmib7*|tI#Pth*xSdFaKM_wYLQ_2D}Vmr9Sn^tgiMIW8Y
zeXvy_OgyQ@N!Mq?k}We$-cE3vQ8ufm`1PH0mj8doY9xuSI{&ZsUirt`M_<F^3x7XT
z^I&CMExt}+%7Wt0YR1Bkr<@X9G9_cJ<%aKZ=hm%BT&pU|;^W`5Ic}Z8?!9u)^`>QR
zl`@&_n{`!duitEoH_e-`WZy1{(rwusA#}(hrRuzebogqQYl|LRxN*3@ENXS1F7`hv
zaGi;RM%mMM4-WoL|5=&JyJqnQgX2{@o3@IrHN6$tJ@rD?_Q=TC<ihtV%lAbeJF0kf
zuCzq*j8pv=vaUsF=@cYB4qtLjMa3k`^vJ{I^GhbNBs0~-KhE|{{N@*D@zbvU`DXt6
zDPMzH^PXgw-v07C)+Sj%e(&#T-pg(F#p(%VWL(Lf6J_Tua{SNaWPRK7VO#ssdHO}3
z1s-$XQ}}1a=NK0i8@>3br>pbp9+k<|zD;eJU@={x#pSz|td*II*5Ut(Z%PX}Soqo<
z!nd#Xm^i_rGw7E+>$Nr&KZRE1LZ-hr4l-+GzKot9S36sO|G$UZnwGMEyZFvEColJ5
zi&M>~gSXGM)%uC+Cmpsc?|u5?$7TJ0qF=T=`{>O7aC!Meg~~?(jb-{yHs8+#>v1{P
z*egu-6|QJ%ooS;lSN~k>;Pdx$7wo9({dOQp*;}H_b3%u5`~1?GIZ_kun3tL#{j7TC
zf&jbt^B@0?8>hItOMdyyp>j&vN&0Ytfr4jJPRhjH#g-~U{+ed%;*MuDJ3abmliZ?Y
zI!Ddi%*||e>i<6~j#{ljTnj~v`jTyuXY5t?-+YxpwW6Z1?Q(kE!noUP=`+vtZwlUf
zEZ^E(W1hC5`PAbQ|NG-VOi8LbFCjg9`!@b`BOX>p&q)h<{j)62emKE#&dO+J;J5SA
e=cb$elx<&Uxb*hhlwJk~1_n=8KbLh*2~7Z+9d2s?

literal 0
HcmV?d00001

diff --git a/mesecons_textures/textures/mesecons_dispenser_side.png b/mesecons_textures/textures/mesecons_dispenser_side.png
new file mode 100644
index 0000000000000000000000000000000000000000..c86782a2147130bb2b12644fb767e33ad5f4b1de
GIT binary patch
literal 731
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to7J0fjhFF}oo$T8!6DrX<
z|952URa@h3L+Q;Nkt+l|6a=TL2=H?J(~f-=RNpN<{ax$}C#4mFRcb8H7BAnGwQE`4
z-Cf`J>Q&7+y1Ux4U|w<GuaCd;PbY0u=uYT$)I7T3HsgfN2|dRm*j+mc)t<Y=UT5gw
z`1basWwBSq`wO=Wj(2nzoHsr{ujWkt{{KgdcD4j<xM$qjuvLuVxoz3)Qj6yuhL=ou
zcPA<=Ka#a|(cPH9P|@1^kN3DA6ZCS-?EOAZr%7+=gkrXY?Y9%xx@Mj|`c(Dw)k#x~
zyLYAaO<a6fly$>3C8d~Lvl{|T4A(4QWgWbEQ!+I4<I~USe|~<SB|hKw+4J~1SIw>4
zXQXY*txk9R`{i)?(skJ`E&r<AWAzz242$0XVD|I#k6b&gnlZT}QK`jYbIv!Odvm`}
zxpeWXty}h-ty6*`u9)WkvwZqdo&U%CyR63|9+@Pram;qMc>m#EVte9)U%#sORaKoh
z&V26Kzw_aX7aYmDlUn!X=Py1hk<8$s`IdFdwGNJ@B42bLZp+QQJ+1wF|IL`K74Ie5
z9`ac<1aW2eIJyLQO$<tsad&CCu5Z6Ia~ea<*GHPS--^AKaXqy!=GY|@({1moi_R^X
zVsI>B?bFxc^FO~oX}NUE6P=vx(R^X6cON=x5q#bBoaGyFfBA=doi%$ealM!E(hL#2
zroO!T(lLXh9(!!x+bXggD?GC9em=v8(AJI*AO0DJhHktWvtUcwjkgvyHcMVtcX5P<
z8u|*?UVpn?U|DAnS2D+wIg#0CoB7{=d~(sfJYeqkBe(5e%Vf?wnaO|o*_=QxMJ1Uv
zd>f8!+WjtK|9+L!g)5~GiD)bpNIqi8ejsV1!m*CMlI~j1U;gS_eY>mf^DoQ#J(b>?
ttq-3))7xg@Yw=t_a9eKo*LnXLEuJ(?y!0Ypj)8%J!PC{xWt~$(695o5W61yj

literal 0
HcmV?d00001

diff --git a/mesecons_textures/textures/mesecons_dispenser_top.png b/mesecons_textures/textures/mesecons_dispenser_top.png
new file mode 100644
index 0000000000000000000000000000000000000000..c86782a2147130bb2b12644fb767e33ad5f4b1de
GIT binary patch
literal 731
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to7J0fjhFF}oo$T8!6DrX<
z|952URa@h3L+Q;Nkt+l|6a=TL2=H?J(~f-=RNpN<{ax$}C#4mFRcb8H7BAnGwQE`4
z-Cf`J>Q&7+y1Ux4U|w<GuaCd;PbY0u=uYT$)I7T3HsgfN2|dRm*j+mc)t<Y=UT5gw
z`1basWwBSq`wO=Wj(2nzoHsr{ujWkt{{KgdcD4j<xM$qjuvLuVxoz3)Qj6yuhL=ou
zcPA<=Ka#a|(cPH9P|@1^kN3DA6ZCS-?EOAZr%7+=gkrXY?Y9%xx@Mj|`c(Dw)k#x~
zyLYAaO<a6fly$>3C8d~Lvl{|T4A(4QWgWbEQ!+I4<I~USe|~<SB|hKw+4J~1SIw>4
zXQXY*txk9R`{i)?(skJ`E&r<AWAzz242$0XVD|I#k6b&gnlZT}QK`jYbIv!Odvm`}
zxpeWXty}h-ty6*`u9)WkvwZqdo&U%CyR63|9+@Pram;qMc>m#EVte9)U%#sORaKoh
z&V26Kzw_aX7aYmDlUn!X=Py1hk<8$s`IdFdwGNJ@B42bLZp+QQJ+1wF|IL`K74Ie5
z9`ac<1aW2eIJyLQO$<tsad&CCu5Z6Ia~ea<*GHPS--^AKaXqy!=GY|@({1moi_R^X
zVsI>B?bFxc^FO~oX}NUE6P=vx(R^X6cON=x5q#bBoaGyFfBA=doi%$ealM!E(hL#2
zroO!T(lLXh9(!!x+bXggD?GC9em=v8(AJI*AO0DJhHktWvtUcwjkgvyHcMVtcX5P<
z8u|*?UVpn?U|DAnS2D+wIg#0CoB7{=d~(sfJYeqkBe(5e%Vf?wnaO|o*_=QxMJ1Uv
zd>f8!+WjtK|9+L!g)5~GiD)bpNIqi8ejsV1!m*CMlI~j1U;gS_eY>mf^DoQ#J(b>?
ttq-3))7xg@Yw=t_a9eKo*LnXLEuJ(?y!0Ypj)8%J!PC{xWt~$(695o5W61yj

literal 0
HcmV?d00001

-- 
GitLab