From 67c953579bd02916dfa46f91a2541d4bdc64230f Mon Sep 17 00:00:00 2001 From: Jeija Date: Sat, 7 Jan 2012 21:51:19 +0100 Subject: [PATCH] Upload V 0.41 Dev --- README | 9 + jeija/VERSION | 1 + jeija/depends.txt | 2 + jeija/init.lua | 1842 +++++++++++++++++ jeija/mesecon_data | 0 jeija/movestone.lua | 295 +++ jeija/temperest.lua | 182 ++ jeija/textures/jeija_blinky_plant_off.png | Bin 0 -> 496 bytes jeija/textures/jeija_blinky_plant_on.png | Bin 0 -> 569 bytes jeija/textures/jeija_glue.png | Bin 0 -> 298 bytes jeija/textures/jeija_hydro_turbine_off.png | Bin 0 -> 312 bytes jeija/textures/jeija_hydro_turbine_on.png | Bin 0 -> 304 bytes jeija/textures/jeija_ic.png | Bin 0 -> 245 bytes jeija/textures/jeija_mesecon_crossing_off.png | Bin 0 -> 163 bytes jeija/textures/jeija_mesecon_crossing_on.png | Bin 0 -> 163 bytes jeija/textures/jeija_mesecon_curved_off.png | Bin 0 -> 130 bytes jeija/textures/jeija_mesecon_curved_on.png | Bin 0 -> 130 bytes jeija/textures/jeija_mesecon_inverter_off.png | Bin 0 -> 261 bytes jeija/textures/jeija_mesecon_inverter_on.png | Bin 0 -> 265 bytes jeija/textures/jeija_mesecon_off.png | Bin 0 -> 145 bytes jeija/textures/jeija_mesecon_on.png | Bin 0 -> 146 bytes jeija/textures/jeija_mesecon_plug.png | Bin 0 -> 257 bytes jeija/textures/jeija_mesecon_socket_off.png | Bin 0 -> 250 bytes jeija/textures/jeija_mesecon_socket_on.png | Bin 0 -> 258 bytes jeija/textures/jeija_mesecon_switch_off.png | Bin 0 -> 715 bytes jeija/textures/jeija_mesecon_switch_on.png | Bin 0 -> 721 bytes jeija/textures/jeija_mesecon_switch_side.png | Bin 0 -> 806 bytes .../textures/jeija_mesecon_t_junction_off.png | Bin 0 -> 167 bytes .../textures/jeija_mesecon_t_junction_on.png | Bin 0 -> 167 bytes jeija/textures/jeija_meselamp_off.png | Bin 0 -> 158 bytes jeija/textures/jeija_meselamp_on.png | Bin 0 -> 158 bytes .../jeija_meselamp_on_ceiling_off.png | Bin 0 -> 163 bytes .../textures/jeija_meselamp_on_ceiling_on.png | Bin 0 -> 163 bytes .../textures/jeija_meselamp_on_floor_off.png | Bin 0 -> 155 bytes jeija/textures/jeija_meselamp_on_floor_on.png | Bin 0 -> 155 bytes jeija/textures/jeija_movestone_arrows.png | Bin 0 -> 762 bytes jeija/textures/jeija_movestone_side.png | Bin 0 -> 806 bytes jeija/textures/jeija_object_detector_off.png | Bin 0 -> 302 bytes jeija/textures/jeija_object_detector_on.png | Bin 0 -> 326 bytes jeija/textures/jeija_piston_pusher_normal.png | Bin 0 -> 716 bytes jeija/textures/jeija_piston_pusher_sticky.png | Bin 0 -> 729 bytes jeija/textures/jeija_piston_side.png | Bin 0 -> 716 bytes jeija/textures/jeija_piston_sticky_side.png | Bin 0 -> 729 bytes jeija/textures/jeija_piston_tb.png | Bin 0 -> 797 bytes jeija/textures/jeija_power_plant.png | Bin 0 -> 639 bytes .../jeija_pressure_plate_stone_off.png | Bin 0 -> 814 bytes .../jeija_pressure_plate_stone_on.png | Bin 0 -> 799 bytes .../jeija_pressure_plate_wood_off.png | Bin 0 -> 704 bytes .../textures/jeija_pressure_plate_wood_on.png | Bin 0 -> 696 bytes jeija/textures/jeija_removestone.png | Bin 0 -> 830 bytes jeija/textures/jeija_removestone_inv.png | Bin 0 -> 923 bytes jeija/textures/jeija_silicon.png | Bin 0 -> 309 bytes jeija/textures/jeija_solar_panel.png | Bin 0 -> 182 bytes jeija/textures/jeija_sticky_movestone.png | Bin 0 -> 807 bytes jeija/textures/jeija_torches_off.png | Bin 0 -> 198 bytes jeija/textures/jeija_torches_off_ceiling.png | Bin 0 -> 186 bytes jeija/textures/jeija_torches_off_side.png | Bin 0 -> 190 bytes jeija/textures/jeija_torches_on.png | Bin 0 -> 199 bytes jeija/textures/jeija_torches_on_ceiling.png | Bin 0 -> 186 bytes jeija/textures/jeija_torches_on_side.png | Bin 0 -> 190 bytes .../textures/jeija_wireless_inverter_off.png | Bin 0 -> 298 bytes jeija/textures/jeija_wireless_inverter_on.png | Bin 0 -> 292 bytes jeija/textures/jeija_wireless_inverter_tb.png | Bin 0 -> 179 bytes .../textures/jeija_wireless_receiver_off.png | Bin 0 -> 225 bytes jeija/textures/jeija_wireless_receiver_on.png | Bin 0 -> 208 bytes .../jeija_wireless_receiver_tb_off.png | Bin 0 -> 197 bytes .../jeija_wireless_receiver_tb_on.png | Bin 0 -> 197 bytes .../jeija_wireless_transmitter_off.png | Bin 0 -> 227 bytes .../jeija_wireless_transmitter_on.png | Bin 0 -> 228 bytes .../jeija_wireless_transmitter_tb.png | Bin 0 -> 197 bytes 70 files changed, 2331 insertions(+) create mode 100644 README create mode 100644 jeija/VERSION create mode 100644 jeija/depends.txt create mode 100644 jeija/init.lua create mode 100644 jeija/mesecon_data create mode 100644 jeija/movestone.lua create mode 100644 jeija/temperest.lua create mode 100644 jeija/textures/jeija_blinky_plant_off.png create mode 100644 jeija/textures/jeija_blinky_plant_on.png create mode 100644 jeija/textures/jeija_glue.png create mode 100644 jeija/textures/jeija_hydro_turbine_off.png create mode 100644 jeija/textures/jeija_hydro_turbine_on.png create mode 100644 jeija/textures/jeija_ic.png create mode 100644 jeija/textures/jeija_mesecon_crossing_off.png create mode 100644 jeija/textures/jeija_mesecon_crossing_on.png create mode 100644 jeija/textures/jeija_mesecon_curved_off.png create mode 100644 jeija/textures/jeija_mesecon_curved_on.png create mode 100644 jeija/textures/jeija_mesecon_inverter_off.png create mode 100644 jeija/textures/jeija_mesecon_inverter_on.png create mode 100644 jeija/textures/jeija_mesecon_off.png create mode 100644 jeija/textures/jeija_mesecon_on.png create mode 100644 jeija/textures/jeija_mesecon_plug.png create mode 100644 jeija/textures/jeija_mesecon_socket_off.png create mode 100644 jeija/textures/jeija_mesecon_socket_on.png create mode 100644 jeija/textures/jeija_mesecon_switch_off.png create mode 100644 jeija/textures/jeija_mesecon_switch_on.png create mode 100644 jeija/textures/jeija_mesecon_switch_side.png create mode 100644 jeija/textures/jeija_mesecon_t_junction_off.png create mode 100644 jeija/textures/jeija_mesecon_t_junction_on.png create mode 100644 jeija/textures/jeija_meselamp_off.png create mode 100644 jeija/textures/jeija_meselamp_on.png create mode 100644 jeija/textures/jeija_meselamp_on_ceiling_off.png create mode 100644 jeija/textures/jeija_meselamp_on_ceiling_on.png create mode 100644 jeija/textures/jeija_meselamp_on_floor_off.png create mode 100644 jeija/textures/jeija_meselamp_on_floor_on.png create mode 100644 jeija/textures/jeija_movestone_arrows.png create mode 100644 jeija/textures/jeija_movestone_side.png create mode 100644 jeija/textures/jeija_object_detector_off.png create mode 100644 jeija/textures/jeija_object_detector_on.png create mode 100644 jeija/textures/jeija_piston_pusher_normal.png create mode 100644 jeija/textures/jeija_piston_pusher_sticky.png create mode 100644 jeija/textures/jeija_piston_side.png create mode 100644 jeija/textures/jeija_piston_sticky_side.png create mode 100644 jeija/textures/jeija_piston_tb.png create mode 100644 jeija/textures/jeija_power_plant.png create mode 100644 jeija/textures/jeija_pressure_plate_stone_off.png create mode 100644 jeija/textures/jeija_pressure_plate_stone_on.png create mode 100644 jeija/textures/jeija_pressure_plate_wood_off.png create mode 100644 jeija/textures/jeija_pressure_plate_wood_on.png create mode 100644 jeija/textures/jeija_removestone.png create mode 100644 jeija/textures/jeija_removestone_inv.png create mode 100644 jeija/textures/jeija_silicon.png create mode 100644 jeija/textures/jeija_solar_panel.png create mode 100644 jeija/textures/jeija_sticky_movestone.png create mode 100644 jeija/textures/jeija_torches_off.png create mode 100644 jeija/textures/jeija_torches_off_ceiling.png create mode 100644 jeija/textures/jeija_torches_off_side.png create mode 100644 jeija/textures/jeija_torches_on.png create mode 100644 jeija/textures/jeija_torches_on_ceiling.png create mode 100644 jeija/textures/jeija_torches_on_side.png create mode 100644 jeija/textures/jeija_wireless_inverter_off.png create mode 100644 jeija/textures/jeija_wireless_inverter_on.png create mode 100644 jeija/textures/jeija_wireless_inverter_tb.png create mode 100644 jeija/textures/jeija_wireless_receiver_off.png create mode 100644 jeija/textures/jeija_wireless_receiver_on.png create mode 100644 jeija/textures/jeija_wireless_receiver_tb_off.png create mode 100644 jeija/textures/jeija_wireless_receiver_tb_on.png create mode 100644 jeija/textures/jeija_wireless_transmitter_off.png create mode 100644 jeija/textures/jeija_wireless_transmitter_on.png create mode 100644 jeija/textures/jeija_wireless_transmitter_tb.png diff --git a/README b/README new file mode 100644 index 0000000..c06e066 --- /dev/null +++ b/README @@ -0,0 +1,9 @@ +-- |\ /| ____ ____ ____ _____ ____ _____ +-- | \ / | | | | | | | |\ | | +-- | \/ | |___ ____ |___ | | | | \ | |____ +-- | | | | | | | | | \ | | +-- | | |___ ____| |___ |____ |____| | \| ____| +-- by Jeija and Minerd247 + +This is a mod for minetest. +Paste the "jeija" directory into minetest/data/mods/ to install it. diff --git a/jeija/VERSION b/jeija/VERSION new file mode 100644 index 0000000..75b9e03 --- /dev/null +++ b/jeija/VERSION @@ -0,0 +1 @@ +0.41 DEV diff --git a/jeija/depends.txt b/jeija/depends.txt new file mode 100644 index 0000000..4d77aa1 --- /dev/null +++ b/jeija/depends.txt @@ -0,0 +1,2 @@ +default +experimental diff --git a/jeija/init.lua b/jeija/init.lua new file mode 100644 index 0000000..f71609a --- /dev/null +++ b/jeija/init.lua @@ -0,0 +1,1842 @@ +-- |\ /| ____ ____ ____ _____ ____ _____ +-- | \ / | | | | | | | |\ | | +-- | \/ | |___ ____ |___ | | | | \ | |____ +-- | | | | | | | | | \ | | +-- | | |___ ____| |___ |____ |____| | \| ____| +-- by Jeija and Minerd247 +-- +-- +-- +-- This mod adds mesecons[=minecraft redstone] and different receptors/effectors to minetest. +-- +-- See the documentation on the forum for additional information, especially about crafting +-- +--Quick Developer documentation for the mesecon API +--================================================= +-- +--RECEPTORS +-- +--A receptor is a node that emits power, e.g. a solar panel, a switch or a power plant. +--Usually you create two blocks per receptor that have to be switched when switching the on/off state: +-- # An off-state node (e.g. jeija:mesecon_switch_off" +-- # An on-state node (e.g. jeija:mesecon_switch_on" +--The on-state and off-state nodes should be registered in the mesecon api, +--so that the Mesecon circuit can be recalculated. This can be done using +-- +--mesecon:add_receptor_node(nodename) -- for on-state node +--mesecon:add_receptor_node_off(nodename) -- for off-state node +--example: mesecon:add_receptor_node("jeija:mesecon_switch_on") +-- +--Turning receptors on and off +--Usually the receptor has to turn on and off. For this, you have to +-- # Remove the node and replace it with the node in the other state (e.g. replace on by off) +-- # Send the event to the mesecon circuit by using the api functions +-- mesecon:receptor_on (pos, rules) } These functions take the position of your receptor +-- mesecon:receptor_off(pos, rules) } as their parameter. +-- +--You can specify the rules using the rules parameter. If you don't want special rules, just leave it out +-- +--!! If a receptor node is removed, the circuit should be recalculated. This means you have to +--send an mesecon:receptor_off signal to the api when the function in minetest.register_on_dignode +--is called. +-- +--EFFECTORS +-- +--A receptor is a node that uses power and transfers the signal to a mechanical, optical whatever +--event. e.g. the meselamp, the movestone or the removestone. +-- +--There are two callback functions for receptors. +-- # function mesecon:register_on_signal_on (action) +-- # function mesecon:register_on_signal_off(action) +-- +--These functions will be called for each block next to a mesecon conductor. +-- +--Example: The removestone +--The removestone only uses one callback: The mesecon:register_on_signal_on function +-- +--mesecon:register_on_signal_on(function(pos, node) -- As the action prameter you have to use a function +-- if node.name=="jeija:removestone" then -- Check if it really is removestone. If you wouldn't use this, every node next to mesecons would be removed +-- minetest.env:remove_node(pos) -- The action: The removestone is removed +-- end -- end of if +--end) -- end of the function, )=end of the parameters of mesecon:register_on_signal_on + +-- SETTINGS +ENABLE_TEMPEREST=0 +ENABLE_PISTON_ANIMATION=0 +BLINKY_PLANT_INTERVAL=3 + +-- PUBLIC VARIABLES +mesecon={} -- contains all functions and all global variables +mesecon.actions_on={} -- Saves registered function callbacks for mesecon on +mesecon.actions_off={} -- Saves registered function callbacks for mesecon off +mesecon.pwr_srcs={} -- this is public for now +mesecon.pwr_srcs_off={} -- this is public for now +mesecon.wireless_receivers={} +mesecon.mvps_stoppers={} + + +-- MESECONS + +minetest.register_node("jeija:mesecon_off", { + drawtype = "raillike", + tile_images = {"jeija_mesecon_off.png", "jeija_mesecon_curved_off.png", "jeija_mesecon_t_junction_off.png", "jeija_mesecon_crossing_off.png"}, + inventory_image = "jeija_mesecon_off.png", + paramtype = "light", + is_ground_content = true, + walkable = false, + selection_box = { + type = "fixed", + }, + material = minetest.digprop_constanttime(0.1), +}) + +minetest.register_node("jeija:mesecon_on", { + drawtype = "raillike", + tile_images = {"jeija_mesecon_on.png", "jeija_mesecon_curved_on.png", "jeija_mesecon_t_junction_on.png", "jeija_mesecon_crossing_on.png"}, + inventory_image = "jeija_mesecon_on.png", + paramtype = "light", + is_ground_content = true, + walkable = false, + selection_box = { + type = "fixed", + }, + material = minetest.digprop_constanttime(0.1), + dug_item = 'node "jeija:mesecon_off" 1', + light_source = LIGHT_MAX-11, +}) + +minetest.register_craft({ + output = 'node "jeija:mesecon_off" 16', + recipe = { + {'node "default:mese"'}, + } +}) + +function mesecon:is_power_on(p, x, y, z) + local lpos = {} + lpos.x=p.x+x + lpos.y=p.y+y + lpos.z=p.z+z + local node = minetest.env:get_node(lpos) + if node.name == "jeija:mesecon_on" or mesecon:is_receptor_node(node.name) then + return 1 + end + return 0 +end + +function mesecon:is_power_off(p, x, y, z) + local lpos = {} + lpos.x=p.x+x + lpos.y=p.y+y + lpos.z=p.z+z + local node = minetest.env:get_node(lpos) + if node.name == "jeija:mesecon_off" or mesecon:is_receptor_node_off(node.name) then + return 1 + end + return 0 +end + +function mesecon:turnon(p, x, y, z, firstcall, rules) + print (dump(rules)) + if rules==nil then + rules="default" + end + local lpos = {} + lpos.x=p.x+x + lpos.y=p.y+y + lpos.z=p.z+z + + mesecon:activate(lpos) + + local node = minetest.env:get_node(lpos) + if node.name == "jeija:mesecon_off" then + --minetest.env:remove_node(lpos) + minetest.env:add_node(lpos, {name="jeija:mesecon_on"}) + nodeupdate(lpos) + end + if node.name == "jeija:mesecon_off" or firstcall then + local rules=mesecon:get_rules(rules) + local i=1 + while rules[i]~=nil do + mesecon:turnon(lpos, rules[i].x, rules[i].y, rules[i].z, false, "default") + i=i+1 + end + end +end + +function mesecon:turnoff(pos, x, y, z, firstcall, rules) + if rules==nil then + rules="default" + end + local lpos = {} + lpos.x=pos.x+x + lpos.y=pos.y+y + lpos.z=pos.z+z + + local node = minetest.env:get_node(lpos) + local connected = 0 + local checked = {} + + if not mesecon:check_if_turnon(lpos) then + mesecon:deactivate(lpos) + end + + if not(firstcall) and connected==0 then + connected=mesecon:connected_to_pw_src(lpos, 0, 0, 0, checked) + end + + if connected == 0 and node.name == "jeija:mesecon_on" then + --minetest.env:remove_node(lpos) + minetest.env:add_node(lpos, {name="jeija:mesecon_off"}) + nodeupdate(lpos) + end + + + if node.name == "jeija:mesecon_on" or firstcall then + if connected == 0 then + local rules=mesecon:get_rules(rules) + local i=1 + while rules[i]~=nil do + mesecon:turnoff(lpos, rules[i].x, rules[i].y, rules[i].z, false, "default") + i=i+1 + end + end + end +end + + +function mesecon:connected_to_pw_src(pos, x, y, z, checked, firstcall) + local i=1 + local lpos = {} + + lpos.x=pos.x+x + lpos.y=pos.y+y + lpos.z=pos.z+z + + + local node = minetest.env:get_node_or_nil(lpos) + + if not(node==nil) then + repeat + i=i+1 + if checked[i]==nil then checked[i]={} break end + if checked[i].x==lpos.x and checked[i].y==lpos.y and checked[i].z==lpos.z then + return 0 + end + until false + + checked[i].x=lpos.x + checked[i].y=lpos.y + checked[i].z=lpos.z + + if mesecon:is_receptor_node(node.name) == true then -- receptor nodes (power sources) can be added using mesecon:add_receptor_node + return 1 + end + + if node.name=="jeija:mesecon_on" or firstcall then -- add other conductors here + local pw_source_found=0 + local rules=mesecon:get_rules("default") + local i=1 + while rules[i]~=nil do + pw_source_found=pw_source_found+mesecon:connected_to_pw_src(lpos, rules[i].x, rules[i].y, rules[i].z, checked, false) + i=i+1 + end + if pw_source_found > 0 then + return 1 + end + end + end + return 0 +end + +function mesecon:check_if_turnon(pos) + local getactivated=0 + local rules=mesecon:get_rules("default") + local i=1 + while rules[i]~=nil do + getactivated=getactivated+mesecon:is_power_on(pos, rules[i].x, rules[i].y, rules[i].z) + i=i+1 + end + if getactivated > 0 then + return true + end + return false +end + +minetest.register_on_placenode(function(pos, newnode, placer) + if mesecon:check_if_turnon(pos) then + if newnode.name == "jeija:mesecon_off" then + mesecon:turnon(pos, 0, 0, 0) + else + mesecon:activate(pos) + end + end +end) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "jeija:mesecon_on" then + mesecon:turnoff(pos, 0, 0, 0, true) + end + end +) + +-- API API API API API API API API API API API API API API API API API API + +function mesecon:add_receptor_node(nodename) + local i=1 + repeat + i=i+1 + if mesecon.pwr_srcs[i]==nil then break end + until false + mesecon.pwr_srcs[i]=nodename +end + +function mesecon:add_receptor_node_off(nodename) + local i=1 + repeat + i=i+1 + if mesecon.pwr_srcs_off[i]==nil then break end + until false + mesecon.pwr_srcs_off[i]=nodename +end + +function mesecon:receptor_on(pos, rules) + mesecon:turnon(pos, 0, 0, 0, true, rules) +end + +function mesecon:receptor_off(pos, rules) + mesecon:turnoff(pos, 0, 0, 0, true, rules) +end + +function mesecon:register_on_signal_on(action) + local i = 1 + repeat + i=i+1 + if mesecon.actions_on[i]==nil then break end + until false + mesecon.actions_on[i]=action +end + +function mesecon:register_on_signal_off(action) + local i = 1 + repeat + i=i+1 + if mesecon.actions_off[i]==nil then break end + until false + mesecon.actions_off[i]=action +end + + + +-- INTERNAL API + + +function mesecon:is_receptor_node(nodename) + local i=1 + repeat + i=i+1 + if mesecon.pwr_srcs[i]==nodename then return true end + until mesecon.pwr_srcs[i]==nil + return false +end + +function mesecon:is_receptor_node_off(nodename) + local i=1 + repeat + i=i+1 + if mesecon.pwr_srcs_off[i]==nodename then return true end + until mesecon.pwr_srcs_off[i]==nil + return false +end + + +function mesecon:activate(pos) + local node = minetest.env:get_node(pos) + local i = 1 + repeat + i=i+1 + if mesecon.actions_on[i]~=nil then mesecon.actions_on[i](pos, node) + else break + end + until false +end + +function mesecon:deactivate(pos) + local node = minetest.env:get_node(pos) + local i = 1 + local checked={} + repeat + i=i+1 + if mesecon.actions_off[i]~=nil then mesecon.actions_off[i](pos, node) + else break + end + until false +end + + +mesecon:register_on_signal_on(function(pos, node) + if node.name=="jeija:meselamp_off" then + --minetest.env:remove_node(pos) + minetest.env:add_node(pos, {name="jeija:meselamp_on"}) + nodeupdate(pos) + end +end) + +mesecon:register_on_signal_off(function(pos, node) + if node.name=="jeija:meselamp_on" then + --minetest.env:remove_node(pos) + minetest.env:add_node(pos, {name="jeija:meselamp_off"}) + nodeupdate(pos) + end +end) + +-- mesecon rules +function mesecon:get_rules(name) + local rules={} + rules[0]="dummy" + if name=="default" then + table.insert(rules, {x=0, y=0, z=-1}) + table.insert(rules, {x=1, y=0, z=0}) + table.insert(rules, {x=-1, y=0, z=0}) + table.insert(rules, {x=0, y=0, z=1}) + table.insert(rules, {x=1, y=1, z=0}) + table.insert(rules, {x=1, y=-1, z=0}) + table.insert(rules, {x=-1, y=1, z=0}) + table.insert(rules, {x=-1, y=-1, z=0}) + table.insert(rules, {x=0, y=1, z=1}) + table.insert(rules, {x=0, y=-1, z=1}) + table.insert(rules, {x=0, y=1, z=-1}) + table.insert(rules, {x=0, y=-1, z=-1}) + end + if name=="movestone" then + table.insert(rules, {x=0, y=1, z=-1}) + table.insert(rules, {x=0, y=0, z=-1}) + table.insert(rules, {x=0, y=-1, z=-1}) + table.insert(rules, {x=0, y=1, z=1}) + table.insert(rules, {x=0, y=-1, z=1}) + table.insert(rules, {x=0, y=0, z=1}) + table.insert(rules, {x=1, y=0, z=0}) + table.insert(rules, {x=1, y=1, z=0}) + table.insert(rules, {x=1, y=-1, z=0}) + table.insert(rules, {x=-1, y=1, z=0}) + table.insert(rules, {x=-1, y=-1, z=0}) + table.insert(rules, {x=-1, y=0, z=0}) + end + if name=="piston" then + table.insert(rules, {x=0, y=1, z=0}) + table.insert(rules, {x=0, y=-1, z=0}) + table.insert(rules, {x=0, y=1, z=-1}) + table.insert(rules, {x=0, y=0, z=-1}) + table.insert(rules, {x=0, y=-1, z=-1}) + table.insert(rules, {x=0, y=1, z=1}) + table.insert(rules, {x=0, y=-1, z=1}) + table.insert(rules, {x=0, y=0, z=1}) + table.insert(rules, {x=1, y=0, z=0}) + table.insert(rules, {x=1, y=1, z=0}) + table.insert(rules, {x=1, y=-1, z=0}) + table.insert(rules, {x=-1, y=1, z=0}) + table.insert(rules, {x=-1, y=-1, z=0}) + table.insert(rules, {x=-1, y=0, z=0}) + end + if name=="pressureplate" then + table.insert(rules, {x=0, y=1, z=-1}) + table.insert(rules, {x=0, y=0, z=-1}) + table.insert(rules, {x=0, y=-1, z=-1}) + table.insert(rules, {x=0, y=1, z=1}) + table.insert(rules, {x=0, y=-1, z=1}) + table.insert(rules, {x=0, y=0, z=1}) + table.insert(rules, {x=1, y=0, z=0}) + table.insert(rules, {x=1, y=1, z=0}) + table.insert(rules, {x=1, y=-1, z=0}) + table.insert(rules, {x=-1, y=1, z=0}) + table.insert(rules, {x=-1, y=-1, z=0}) + table.insert(rules, {x=-1, y=0, z=0}) + table.insert(rules, {x=0, y=-1, z=0}) + table.insert(rules, {x=0, y=1, z=0}) + end + if name=="mesecontorch_x+" then + table.insert(rules, {x=1, y=1, z=0}) + table.insert(rules, {x=1, y=0, z=0}) + table.insert(rules, {x=1, y=-1, z=0}) + end + if name=="mesecontorch_x-" then + table.insert(rules, {x=-1, y=1, z=0}) + table.insert(rules, {x=-1, y=0, z=0}) + table.insert(rules, {x=-1, y=-1, z=0}) + end + if name=="mesecontorch_z+" then + table.insert(rules, {x=0, y=1, z=1}) + table.insert(rules, {x=0, y=0, z=1}) + table.insert(rules, {x=0, y=-1, z=1}) + end + if name=="mesecontorch_z-" then + table.insert(rules, {x=0, y=1, z=-1}) + table.insert(rules, {x=0, y=0, z=-1}) + table.insert(rules, {x=0, y=-1, z=-1}) + end + if name=="mesecontorch_y+" then + table.insert(rules, {x=-1, y=1, z=0}) + table.insert(rules, {x=-1, y=1, z=1}) + table.insert(rules, {x=-1, y=1, z=-1}) + + table.insert(rules, {x=1, y=1, z=0}) + table.insert(rules, {x=1, y=1, z=1}) + table.insert(rules, {x=1, y=1, z=-1}) + + table.insert(rules, {x=0, y=1, z=0}) + table.insert(rules, {x=0, y=1, z=1}) + table.insert(rules, {x=0, y=1, z=-1}) + end + if name=="mesecontorch_y-" then + table.insert(rules, {x=-1, y=-1, z=0}) + table.insert(rules, {x=-1, y=-1, z=1}) + table.insert(rules, {x=-1, y=-1, z=-1}) + + table.insert(rules, {x=1, y=-1, z=0}) + table.insert(rules, {x=1, y=-1, z=1}) + table.insert(rules, {x=1, y=-1, z=-1}) + + table.insert(rules, {x=0, y=-1, z=0}) + table.insert(rules, {x=0, y=-1, z=1}) + table.insert(rules, {x=0, y=-1, z=-1}) + print ("Y++++++++++") + end + return rules +end + + + + + + +-- The POWER_PLANT + +minetest.register_node("jeija:power_plant", { + drawtype = "plantlike", + visual_scale = 1, + tile_images = {"jeija_power_plant.png"}, + inventory_image = "jeija_power_plant.png", + paramtype = "light", + walkable = false, + material = minetest.digprop_leaveslike(0.2), + light_source = LIGHT_MAX-9, +}) + +minetest.register_craft({ + output = 'node "jeija:power_plant" 1', + recipe = { + {'node "jeija:mesecon_off"'}, + {'node "jeija:mesecon_off"'}, + {'node "default:junglegrass"'}, + } +}) + +minetest.register_on_placenode(function(pos, newnode, placer) + if newnode.name == "jeija:power_plant" then + mesecon:receptor_on(pos) + end +end) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "jeija:power_plant" then + mesecon:receptor_off(pos) + end + end +) + +mesecon:add_receptor_node("jeija:power_plant") + + +-- The BLINKY_PLANT + +minetest.register_node("jeija:blinky_plant_off", { + drawtype = "plantlike", + visual_scale = 1, + tile_images = {"jeija_blinky_plant_off.png"}, + inventory_image = "jeija_blinky_plant_off.png", + paramtype = "light", + walkable = false, + material = minetest.digprop_leaveslike(0.2), +}) + +minetest.register_node("jeija:blinky_plant_on", { + drawtype = "plantlike", + visual_scale = 1, + tile_images = {"jeija_blinky_plant_on.png"}, + inventory_image = "jeija_blinky_plant_off.png", + paramtype = "light", + walkable = false, + material = minetest.digprop_leaveslike(0.2), + dug_item='node "jeija:blinky_plant_off" 1', + light_source = LIGHT_MAX-7, +}) + +minetest.register_craft({ + output = 'node "jeija:blinky_plant_off" 1', + recipe = { + {'','node "jeija:mesecon_off"',''}, + {'','node "jeija:mesecon_off"',''}, + {'node "default:junglegrass"','node "default:junglegrass"','node "default:junglegrass"'}, + } +}) + +minetest.register_abm( + {nodenames = {"jeija:blinky_plant_off"}, + interval = BLINKY_PLANT_INTERVAL, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + --minetest.env:remove_node(pos) + minetest.env:add_node(pos, {name="jeija:blinky_plant_on"}) + nodeupdate(pos) + mesecon:receptor_on(pos) + end, +}) + +minetest.register_abm({ + nodenames = {"jeija:blinky_plant_on"}, + interval = BLINKY_PLANT_INTERVAL, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + --minetest.env:remove_node(pos) + minetest.env:add_node(pos, {name="jeija:blinky_plant_off"}) + nodeupdate(pos) + mesecon:receptor_off(pos) + end, +}) + +mesecon:add_receptor_node("jeija:blinky_plant_on") +mesecon:add_receptor_node_off("jeija:blinky_plant_off") + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "jeija:blinky_plant_on" then + mesecon:receptor_off(pos) + end + end +) + + +-- Solar Panel + +minetest.register_craftitem("jeija:silicon", { + image = "jeija_silicon.png", + on_place_on_ground = minetest.craftitem_place_item, +}) + + +minetest.register_node("jeija:solar_panel", { + drawtype = "raillike", + tile_images = {"jeija_solar_panel.png"}, + inventory_image = "jeija_solar_panel.png", + paramtype = "light", + walkable = false, + is_ground_content = true, + selection_box = { + type = "fixed", + }, + furnace_burntime = 5, + material = minetest.digprop_dirtlike(0.1), +}) + +minetest.register_craft({ + output = 'craft "jeija:silicon" 4', + recipe = { + {'node "default:sand"', 'node "default:sand"'}, + {'node "default:sand"', 'craft "default:steel_ingot"'}, + } +}) + +minetest.register_craft({ + output = 'node "jeija:solar_panel" 1', + recipe = { + {'craft "jeija:silicon"', 'craft "jeija:silicon"'}, + {'craft "jeija:silicon"', 'craft "jeija:silicon"'}, + } +}) + +minetest.register_abm( + {nodenames = {"jeija:solar_panel"}, + interval = 0.1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local light = minetest.env:get_node_light(pos, nil) + if light == nil then light = 0 end + if light >= 13 then + mesecon:receptor_on(pos) + else + mesecon:receptor_off(pos) + end + end, +}) + + +-- MESELAMPS +minetest.register_node("jeija:meselamp_on", { + drawtype = "torchlike", + tile_images = {"jeija_meselamp_on_floor_on.png", "jeija_meselamp_on_ceiling_on.png", "jeija_meselamp_on.png"}, + inventory_image = "jeija_meselamp_on_floor_on.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + wall_mounted = false, + light_source = LIGHT_MAX, + selection_box = { + type = "fixed", + fixed = {-0.38, -0.5, -0.1, 0.38, -0.2, 0.1}, + }, + material = minetest.digprop_constanttime(0.1), + dug_item='node "jeija:meselamp_off" 1', +}) + +minetest.register_node("jeija:meselamp_off", { + drawtype = "torchlike", + tile_images = {"jeija_meselamp_on_floor_off.png", "jeija_meselamp_on_ceiling_off.png", "jeija_meselamp_off.png"}, + inventory_image = "jeija_meselamp_on_floor_off.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + wall_mounted = false, + selection_box = { + type = "fixed", + fixed = {-0.38, -0.5, -0.1, 0.38, -0.2, 0.1}, + }, + material = minetest.digprop_constanttime(0.1), +}) + +minetest.register_craft({ + output = 'node "jeija:meselamp_off" 1', + recipe = { + {'', 'node "default:glass"', ''}, + {'node "jeija:mesecon_off"', 'craft "default:steel_ingot"', 'node "jeija:mesecon_off"'}, + {'', 'node "default:glass"', ''}, + } +}) + + +--PISTONS +--registration normal one: +minetest.register_node("jeija:piston_normal", { + tile_images = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_side.png", "jeija_piston_side.png", "jeija_piston_side.png", "jeija_piston_side.png"}, + inventory_image = minetest.inventorycube("jeija_piston_tb.png", "jeija_piston_side.png", "jeija_piston_side.png"), + material = minetest.digprop_stonelike(0.5), +}) + +minetest.register_craft({ + output = 'node "jeija:piston_normal" 2', + recipe = { + {'node "default:wood"', 'node "default:wood"', 'node "default:wood"'}, + {'node "default:cobble"', 'craft "default:steel_ingot"', 'node "default:cobble"'}, + {'node "default:cobble"', 'node "jeija:mesecon_off"', 'node "default:cobble"'}, + } +}) + +--registration sticky one: +minetest.register_node("jeija:piston_sticky", { + tile_images = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_sticky_side.png", "jeija_piston_sticky_side.png", "jeija_piston_sticky_side.png", "jeija_piston_sticky_side.png"}, + inventory_image = minetest.inventorycube("jeija_piston_tb.png", "jeija_piston_sticky_side.png", "jeija_piston_sticky_side.png"), + material = minetest.digprop_stonelike(0.5), +}) + +minetest.register_craft({ + output = 'node "jeija:piston_sticky" 1', + recipe = { + {'craft "jeija:glue"'}, + {'node "jeija:piston_normal"'}, + } +}) + +-- get push direction normal +function mesecon:piston_get_direction(pos) + getactivated=0 + local direction = {x=0, y=0, z=0} + local lpos={x=pos.x, y=pos.y, z=pos.z} + local getactivated=0 + local rules=mesecon:get_rules("piston") + + getactivated=getactivated+mesecon:is_power_on(pos, rules[1].x, rules[1].y, rules[1].z) + if getactivated>0 then direction.y=-1 return direction end + getactivated=getactivated+mesecon:is_power_on(pos, rules[2].x, rules[2].y, rules[2].z) + if getactivated>0 then direction.y=1 return direction end + + for k=3, 5 do + getactivated=getactivated+mesecon:is_power_on(pos, rules[k].x, rules[k].y, rules[k].z) + end + if getactivated>0 then direction.z=1 return direction end + + for n=6, 8 do + getactivated=getactivated+mesecon:is_power_on(pos, rules[n].x, rules[n].y, rules[n].z) + end + + if getactivated>0 then direction.z=-1 return direction end + + for j=9, 11 do + getactivated=getactivated+mesecon:is_power_on(pos, rules[j].x, rules[j].y, rules[j].z) + end + + if getactivated>0 then direction.x=-1 return direction end + + for l=12, 14 do + getactivated=getactivated+mesecon:is_power_on(pos, rules[l].x, rules[l].y, rules[l].z) + end + if getactivated>0 then direction.x=1 return direction end + return direction +end + +-- get pull/push direction sticky +function mesecon:sticky_piston_get_direction(pos) + getactivated=0 + local direction = {x=0, y=0, z=0} + local lpos={x=pos.x, y=pos.y, z=pos.z} + local getactivated=0 + local rules=mesecon:get_rules("piston") + + getactivated=getactivated+mesecon:is_power_off(pos, rules[1].x, rules[1].y, rules[1].z) + if getactivated>0 then direction.y=-1 return direction end + getactivated=getactivated+mesecon:is_power_off(pos, rules[2].x, rules[2].y, rules[2].z) + if getactivated>0 then direction.y=1 return direction end + + for k=3, 5 do + getactivated=getactivated+mesecon:is_power_off(pos, rules[k].x, rules[k].y, rules[k].z) + end + if getactivated>0 then direction.z=1 return direction end + + for n=6, 8 do + getactivated=getactivated+mesecon:is_power_off(pos, rules[n].x, rules[n].y, rules[n].z) + end + + if getactivated>0 then direction.z=-1 return direction end + + for j=9, 11 do + getactivated=getactivated+mesecon:is_power_off(pos, rules[j].x, rules[j].y, rules[j].z) + end + + if getactivated>0 then direction.x=-1 return direction end + + for l=12, 14 do + getactivated=getactivated+mesecon:is_power_off(pos, rules[l].x, rules[l].y, rules[l].z) + end + if getactivated>0 then direction.x=1 return direction end + return direction +end + +-- Push action +mesecon:register_on_signal_on(function (pos, node) + if (node.name=="jeija:piston_normal" or node.name=="jeija:piston_sticky") then + local direction=mesecon:piston_get_direction(pos) + + local checknode={} + local checkpos={x=pos.x, y=pos.y, z=pos.z} + repeat -- Check if it collides with a stopper + checkpos={x=checkpos.x+direction.x, y=checkpos.y+direction.y, z=checkpos.z+direction.z} + checknode=minetest.env:get_node(checkpos) + if mesecon:is_mvps_stopper(checknode.name) then + return + end + until checknode.name=="air" + or checknode.name=="ignore" + or checknode.name=="default:water" + or checknode.name=="default:water_flowing" + + local obj={} + if node.name=="jeija:piston_normal" then + obj=minetest.env:add_entity(pos, "jeija:piston_pusher_normal") + elseif node.name=="jeija:piston_sticky" then + obj=minetest.env:add_entity(pos, "jeija:piston_pusher_sticky") + end + + if ENABLE_PISTON_ANIMATION==1 then + obj:setvelocity({x=direction.x*4, y=direction.y*4, z=direction.z*4}) + else + obj:moveto({x=pos.x+direction.x, y=pos.y+direction.y, z=pos.z+direction.z}, false) + end + + local np = {x=pos.x+direction.x, y=pos.y+direction.y, z=pos.z+direction.z} + local coln = minetest.env:get_node(np) + + or checknode.name=="ignore" + or checknode.name=="default:water" + or checknode.name=="default:water_flowing" + + if coln.name ~= "air" and coln.name ~="water" then + local thisp= {x=np.x, y=np.y, z=np.z} + local thisnode=minetest.env:get_node(thisp) + local nextnode={} + minetest.env:remove_node(thisp) + repeat + thisp.x=thisp.x+direction.x + thisp.y=thisp.y+direction.y + thisp.z=thisp.z+direction.z + nextnode=minetest.env:get_node(thisp) + minetest.env:add_node(thisp, {name=thisnode.name}) + nodeupdate(thisp) + thisnode=nextnode + until thisnode.name=="air" + or thisnode.name=="ignore" + or thisnode.name=="default:water" + or thisnode.name=="default:water_flowing" + end + end +end) + +--Pull action (sticky only) +mesecon:register_on_signal_off(function (pos, node) + if node.name=="jeija:piston_sticky" or node.name=="jeija:piston_normal" then + local objs = minetest.env:get_objects_inside_radius(pos, 2) + for k, obj in pairs(objs) do + obj:remove() + end + + if node.name=="jeija:piston_sticky" then + local direction=mesecon:sticky_piston_get_direction(pos) + local np = {x=pos.x+direction.x, y=pos.y+direction.y, z=pos.z+direction.z} + local coln = minetest.env:get_node(np) + if coln.name == "air" or coln.name =="water" then + local thisp= {x=np.x+direction.x, y=np.y+direction.y, z=np.z+direction.z} + local thisnode=minetest.env:get_node(thisp) + if thisnode.name~="air" and thisnode.name~="water" and not mesecon:is_mvps_stopper(thisnode.name) then + local newpos={} + local oldpos={} + minetest.env:add_node(np, {name=thisnode.name}) + minetest.env:remove_node(thisp) + end + end + end + end +end) + +--Piston Animation +local PISTON_PUSHER_NORMAL={ + physical = false, + visual = "sprite", + textures = {"default_wood.png", "default_wood.png", "jeija_piston_pusher_normal.png", "jeija_piston_pusher_normal.png", "jeija_piston_pusher_normal.png", "jeija_piston_pusher_normal.png"}, + collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, + visual = "cube", + timer=0, +} + +function PISTON_PUSHER_NORMAL:on_step(dtime) + self.timer=self.timer+dtime + if self.timer>=0.24 then + self.object:setvelocity({x=0, y=0, z=0}) + end +end + +local PISTON_PUSHER_STICKY={ + physical = false, + visual = "sprite", + textures = {"default_wood.png", "default_wood.png", "jeija_piston_pusher_sticky.png", "jeija_piston_pusher_sticky.png", "jeija_piston_pusher_sticky.png", "jeija_piston_pusher_sticky.png"}, + collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, + visual = "cube", + timer=0, +} + +function PISTON_PUSHER_STICKY:on_step(dtime) + self.timer=self.timer+dtime + if self.timer>=0.24 then + self.object:setvelocity({x=0, y=0, z=0}) + end +end + +minetest.register_entity("jeija:piston_pusher_normal", PISTON_PUSHER_NORMAL) +minetest.register_entity("jeija:piston_pusher_sticky", PISTON_PUSHER_STICKY) + +minetest.register_on_dignode(function(pos, node) + if node.name=="jeija:piston_normal" or node.name=="jeija:piston_sticky" then + local objs = minetest.env:get_objects_inside_radius(pos, 2) + for k, obj in pairs(objs) do + obj:remove() + end + end +end) + +--GLUE +minetest.register_craftitem("jeija:glue", { + image = "jeija_glue.png", + on_place_on_ground = minetest.craftitem_place_item, +}) + +minetest.register_craft({ + output = 'craft "jeija:glue" 2', + recipe = { + {'node "default:junglegrass"', 'node "default:junglegrass"'}, + {'node "default:junglegrass"', 'node "default:junglegrass"'}, + } +}) + + +-- HYDRO_TURBINE + +minetest.register_node("jeija:hydro_turbine_off", { + tile_images = {"jeija_hydro_turbine_off.png", "jeija_hydro_turbine_off.png", "jeija_hydro_turbine_off.png", "jeija_hydro_turbine_off.png", "jeija_hydro_turbine_off.png", "jeija_hydro_turbine_off.png"}, + inventory_image = minetest.inventorycube("jeija_hydro_turbine_off.png", "jeija_hydro_turbine_off.png", "jeija_hydro_turbine_off.png"), + material = minetest.digprop_constanttime(0.5), +}) + +minetest.register_node("jeija:hydro_turbine_on", { + tile_images = {"jeija_hydro_turbine_on.png", "jeija_hydro_turbine_on.png", "jeija_hydro_turbine_on.png", "jeija_hydro_turbine_on.png", "jeija_hydro_turbine_on.png", "jeija_hydro_turbine_on.png"}, + inventory_image = minetest.inventorycube("jeija_hydro_turbine_on.png", "jeija_hydro_turbine_on.png", "jeija_hydro_turbine_on.png"), + dug_item = 'node "jeija:hydro_turbine_off" 1', + material = minetest.digprop_constanttime(0.5), +}) + + +minetest.register_abm({ +nodenames = {"jeija:hydro_turbine_off"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local waterpos={x=pos.x, y=pos.y+1, z=pos.z} + if minetest.env:get_node(waterpos).name=="default:water_flowing" then + --minetest.env:remove_node(pos) + minetest.env:add_node(pos, {name="jeija:hydro_turbine_on"}) + nodeupdate(pos) + mesecon:receptor_on(pos) + end + end, +}) + +minetest.register_abm({ +nodenames = {"jeija:hydro_turbine_on"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local waterpos={x=pos.x, y=pos.y+1, z=pos.z} + if minetest.env:get_node(waterpos).name~="default:water_flowing" then + --minetest.env:remove_node(pos) + minetest.env:add_node(pos, {name="jeija:hydro_turbine_off"}) + nodeupdate(pos) + mesecon:receptor_off(pos) + end + end, +}) + +mesecon:add_receptor_node("jeija:hydro_turbine_on") +mesecon:add_receptor_node_off("jeija:hydro_turbine_off") + +minetest.register_craft({ + output = 'node "jeija:hydro_turbine_off" 2', + recipe = { + {'','craft "default:stick"', ''}, + {'craft "default:stick"', 'craft "default:steel_ingot"', 'craft "default:stick"'}, + {'','craft "default:stick"', ''}, + } +}) + + +-- MESECON_SWITCH + +minetest.register_node("jeija:mesecon_switch_off", { + tile_images = {"jeija_mesecon_switch_side.png", "jeija_mesecon_switch_side.png", "jeija_mesecon_switch_side.png", "jeija_mesecon_switch_side.png", "jeija_mesecon_switch_side.png", "jeija_mesecon_switch_off.png"}, + inventory_image = minetest.inventorycube("jeija_mesecon_switch_side.png", "jeija_mesecon_switch_side.png", "jeija_mesecon_switch_off.png"), + paramtype = "facedir_simple", + material = minetest.digprop_constanttime(0.5), +}) + +minetest.register_node("jeija:mesecon_switch_on", { + tile_images = {"jeija_mesecon_switch_side.png", "jeija_mesecon_switch_side.png", "jeija_mesecon_switch_side.png", "jeija_mesecon_switch_side.png", "jeija_mesecon_switch_side.png", "jeija_mesecon_switch_on.png"}, + inventory_image = minetest.inventorycube("jeija_mesecon_switch_side.png", "jeija_mesecon_switch_side.png", "jeija_mesecon_switch_on.png"), + paramtype = "facedir_simple", + material = minetest.digprop_constanttime(0.5), + dug_item='node "jeija:mesecon_switch_off" 1', +}) + +mesecon:add_receptor_node("jeija:mesecon_switch_on") +mesecon:add_receptor_node_off("jeija:mesecon_switch_off") + +minetest.register_on_punchnode(function(pos, node, puncher) + if node.name == "jeija:mesecon_switch_on" then + --local param2=minetest.env:get_node(pos).param2 + --print (param2) + --minetest.env:remove_node(pos) + minetest.env:add_node(pos, {name="jeija:mesecon_switch_off"}) + nodeupdate(pos) + mesecon:receptor_off(pos) + end + if node.name == "jeija:mesecon_switch_off" then + --local param2=minetest.env:get_node(pos).param2 + --print (param2) + --minetest.env:remove_node(pos) + minetest.env:add_node(pos, {name="jeija:mesecon_switch_on"}) + nodeupdate(pos) + mesecon:receptor_on(pos) + end +end) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "jeija:mesecon_switch_on" then + mesecon:receptor_off(pos) + end + end +) + +minetest.register_craft({ + output = 'node "jeija:mesecon_switch_off" 2', + recipe = { + {'craft "default:steel_ingot"', 'node "default:cobble"', 'craft "default:steel_ingot"'}, + {'node "jeija:mesecon_off"','', 'node "jeija:mesecon_off"'}, + } +}) + +--Launch TNT + +mesecon:register_on_signal_on(function(pos, node) + if node.name=="experimental:tnt" then + minetest.env:remove_node(pos) + minetest.env:add_entity(pos, "experimental:tnt") + nodeupdate(pos) + end +end) + +-- REMOVE_STONE + +minetest.register_node("jeija:removestone", { + tile_images = {"jeija_removestone.png"}, + inventory_image = minetest.inventorycube("jeija_removestone_inv.png"), + material = minetest.digprop_stonelike(1.0), +}) + +minetest.register_craft({ + output = 'node "jeija:removestone" 4', + recipe = { + {'', 'node "default:cobble"',''}, + {'node "default:cobble"', 'node "jeija:mesecon_off"', 'node "default:cobble"'}, + {'', 'node "default:cobble"',''}, + } +}) + +mesecon:register_on_signal_on(function(pos, node) + if node.name=="jeija:removestone" then + minetest.env:remove_node(pos) + end +end) + +-- IC +minetest.register_craftitem("jeija:ic", { + image = "jeija_ic.png", + on_place_on_ground = minetest.craftitem_place_item, +}) + +minetest.register_craft({ + output = 'craft "jeija:ic" 2', + recipe = { + {'craft "jeija:silicon"', 'craft "jeija:silicon"', 'node "jeija:mesecon_off"'}, + {'craft "jeija:silicon"', 'craft "jeija:silicon"', 'node "jeija:mesecon_off"'}, + {'node "jeija:mesecon_off"', 'node "jeija:mesecon_off"', ''}, + } +}) + +--COMMON WIRELESS FUNCTIONS + +function mesecon:read_wlre_from_file() + print "[MESEcons] Reading Mesecon Data..." + mesecon_file=io.open(minetest.get_modpath("jeija").."/mesecon_data", "r") + if mesecon_file==nil then return end + local row=mesecon_file:read() + local i=1 + while row~=nil do + mesecon.wireless_receivers[i]={} + mesecon.wireless_receivers[i].pos={} + mesecon.wireless_receivers[i].pos.x=tonumber(mesecon_file:read()) + mesecon.wireless_receivers[i].pos.y=tonumber(mesecon_file:read()) + mesecon.wireless_receivers[i].pos.z=tonumber(mesecon_file:read()) + mesecon.wireless_receivers[i].channel=mesecon_file:read() + mesecon.wireless_receivers[i].requested_state=tonumber(mesecon_file:read()) + mesecon.wireless_receivers[i].inverting=tonumber(mesecon_file:read()) + i=i+1 + row=mesecon_file:read() + end + mesecon_file:close() + print "[MESEcons] Finished Reading Mesecon Data..." +end + + +function mesecon:register_wireless_receiver(pos, inverting) + local i = 1 + repeat + if mesecon.wireless_receivers[i]==nil then break end + i=i+1 + until false + + + local node_under_pos={} + node_under_pos.x=pos.x + node_under_pos.y=pos.y + node_under_pos.z=pos.z + + node_under_pos.y=node_under_pos.y-1 + local node_under=minetest.env:get_node(node_under_pos) + mesecon.wireless_receivers[i]={} + mesecon.wireless_receivers[i].pos={} + mesecon.wireless_receivers[i].pos.x=pos.x + mesecon.wireless_receivers[i].pos.y=pos.y + mesecon.wireless_receivers[i].pos.z=pos.z + mesecon.wireless_receivers[i].channel=node_under.name + mesecon.wireless_receivers[i].requested_state=0 + mesecon.wireless_receivers[i].inverting=inverting +end + +function mesecon:remove_wireless_receiver(pos) + local i = 1 + while mesecon.wireless_receivers[i]~=nil do + if mesecon.wireless_receivers[i].pos.x==pos.x and + mesecon.wireless_receivers[i].pos.y==pos.y and + mesecon.wireless_receivers[i].pos.z==pos.z then + mesecon.wireless_receivers[i]=nil + break + end + i=i+1 + end +end + +function mesecon:set_wlre_channel(pos, channel) + --local i = 1 + --while mesecon.wireless_receivers[i]~=nil do + -- if tonumber(mesecon.wireless_receivers[i].pos.x)==tonumber(pos.x) and + -- tonumber(mesecon.wireless_receivers[i].pos.y)==tonumber(pos.y) and + -- tonumber(mesecon.wireless_receivers[i].pos.z)==tonumber(pos.z) then + -- mesecon.wireless_receivers[i].channel=channel + -- break + -- end + -- i=i+1 + --end + local wlre=mesecon:get_wlre(pos) + if wlre~=nil then + wlre.channel=channel + end +end + +function mesecon:get_wlre(pos) + local i=1 + while mesecon.wireless_receivers[i]~=nil do + if mesecon.wireless_receivers[i].pos.x==pos.x and + mesecon.wireless_receivers[i].pos.y==pos.y and + mesecon.wireless_receivers[i].pos.z==pos.z then + return mesecon.wireless_receivers[i] + end + i=i+1 + end +end + +minetest.register_on_placenode(function(pos, newnode, placer) + pos.y=pos.y+1 + if minetest.env:get_node(pos).name == "jeija:wireless_receiver_off" or + minetest.env:get_node(pos).name == "jeija:wireless_receiver_on" or + minetest.env:get_node(pos).name == "jeija:wireless_inverter_off" or + minetest.env:get_node(pos).name == "jeija:wireless_inverter_on" then + mesecon:set_wlre_channel(pos, newnode.name) + end +end) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + local channel + pos.y=pos.y+1 + if minetest.env:get_node(pos).name == "jeija:wireless_receiver_on" or + minetest.env:get_node(pos).name == "jeija:wireless_receiver_off" or + minetest.env:get_node(pos).name == "jeija:wireless_inverter_on" or + minetest.env:get_node(pos).name == "jeija:wireless_inverter_off" then + mesecon:set_wlre_channel(pos, "air") + end + end +) + +minetest.register_abm( + {nodenames = {"jeija:wireless_receiver_on", "jeija:wireless_receiver_off", + "jeija:wireless_inverter_on", "jeija:wireless_inverter_off"}, + interval = 1.0, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local wlre=mesecon:get_wlre(pos) + if (wlre==nil) then return end + + if node.name=="jeija:wireless_receiver_on" and wlre.requested_state==0 then + minetest.env:add_node(pos, {name="jeija:wireless_receiver_off"}) + mesecon:receptor_off(pos) + end + if node.name=="jeija:wireless_receiver_off" and wlre.requested_state==1 then + minetest.env:add_node(pos, {name="jeija:wireless_receiver_on"}) + mesecon:receptor_on(pos) + end + if node.name=="jeija:wireless_inverter_off" and wlre.requested_state==0 and wlre.inverting==1 then + minetest.env:add_node(pos, {name="jeija:wireless_inverter_on"}) + mesecon:receptor_on(pos) + end + if node.name=="jeija:wireless_inverter_on" and wlre.requested_state==1 and wlre.inverting==1 then + minetest.env:add_node(pos, {name="jeija:wireless_inverter_off"}) + mesecon:receptor_off(pos) + end + end, +}) + +--WIRELESS RECEIVER + +minetest.register_node("jeija:wireless_receiver_off", { + tile_images = {"jeija_wireless_receiver_tb_off.png", "jeija_wireless_receiver_tb_off.png", "jeija_wireless_receiver_off.png", "jeija_wireless_receiver_off.png", "jeija_wireless_receiver_off.png", "jeija_wireless_receiver_off.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_receiver_off.png"), + material = minetest.digprop_constanttime(0.8), +}) + +minetest.register_node("jeija:wireless_receiver_on", { + tile_images = {"jeija_wireless_receiver_tb_on.png", "jeija_wireless_receiver_tb_on.png", "jeija_wireless_receiver_on.png", "jeija_wireless_receiver_on.png", "jeija_wireless_receiver_on.png", "jeija_wireless_receiver_on.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_receiver_on.png"), + material = minetest.digprop_constanttime(0.8), + dug_item = 'node "jeija:wireless_receiver_off" 1' +}) + +minetest.register_craft({ + output = 'node "jeija:wireless_receiver_off" 2', + recipe = { + {'', 'node "jeija:mesecon_off"', ''}, + {'', 'node "jeija:mesecon_off"', ''}, + {'', 'craft "jeija:ic"', ''}, + } +}) + +minetest.register_on_placenode(function(pos, newnode, placer) + if newnode.name == "jeija:wireless_receiver_off" then + mesecon:register_wireless_receiver(pos, 0) + end +end) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "jeija:wireless_receiver_on" then + mesecon:remove_wireless_receiver(pos) + mesecon:receptor_off(pos) + end + if oldnode.name == "jeija:wireless_receiver_off" then + mesecon:remove_wireless_receiver(pos) + end + end +) + +minetest.register_abm( -- SAVE WIRELESS RECEIVERS TO FILE + {nodenames = {"jeija:wireless_receiver_off", "jeija:wireless_receiver_on", "jeija:wireless_inverter_on", "jeija:wireless_inverter_off"}, + interval = 10, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local mesecon_file = io.open(minetest.get_modpath("jeija").."/mesecon_data", "w") + local i=1 + while mesecon.wireless_receivers[i]~=nil do + mesecon_file:write("NEXT\n") + mesecon_file:write(mesecon.wireless_receivers[i].pos.x.."\n") + mesecon_file:write(mesecon.wireless_receivers[i].pos.y.."\n") + mesecon_file:write(mesecon.wireless_receivers[i].pos.z.."\n") + mesecon_file:write(mesecon.wireless_receivers[i].channel.."\n") + mesecon_file:write(mesecon.wireless_receivers[i].requested_state.."\n") + mesecon_file:write(mesecon.wireless_receivers[i].inverting.."\n") + i=i+1 + end + mesecon_file:close() + end, +}) + +mesecon:add_receptor_node("jeija:wireless_receiver_on") +mesecon:add_receptor_node_off("jeija:wireless_receiver_off") + +-- WIRELESS INVERTER OFF/ON BELONGS TO THE OUTPUT STATE (ON=INPUT OFF) + +minetest.register_node("jeija:wireless_inverter_off", { + tile_images = {"jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_off.png", "jeija_wireless_inverter_off.png", "jeija_wireless_inverter_off.png", "jeija_wireless_inverter_off.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_inverter_off.png"), + material = minetest.digprop_constanttime(0.8), + dug_item = 'node "jeija:wireless_inverter_on" 1' +}) + +minetest.register_node("jeija:wireless_inverter_on", { + tile_images = {"jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_tb.png", "jeija_wireless_inverter_on.png", "jeija_wireless_inverter_on.png", "jeija_wireless_inverter_on.png", "jeija_wireless_inverter_on.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_inverter_on.png"), + material = minetest.digprop_constanttime(0.8), +}) + +minetest.register_craft({ + output = 'node "jeija:wireless_inverter_off" 2', + recipe = { + {'', 'craft "default:steel_ingot"', ''}, + {'craft "jeija:ic"', 'node "jeija:mesecon_off"', 'craft "jeija:ic"'}, + {'', 'node "jeija:mesecon_off"', ''}, + } +}) + +minetest.register_on_placenode(function(pos, newnode, placer) + if newnode.name == "jeija:wireless_inverter_on" then + mesecon:register_wireless_receiver(pos, 1) + mesecon:receptor_on(pos) + end +end) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "jeija:wireless_inverter_on" then + mesecon:remove_wireless_receiver(pos) + mesecon:receptor_off(pos) + end + if oldnode.name == "jeija:wireless_inverter_off" then + mesecon:remove_wireless_receiver(pos) + end + end +) + +mesecon:add_receptor_node("jeija:wireless_inverter_on") +mesecon:add_receptor_node_off("jeija:wireless_inverter_off") + +-- WIRELESS TRANSMITTER + +function mesecon:wireless_transmit(channel, senderstate) + local i = 1 + while mesecon.wireless_receivers[i]~=nil do + if mesecon.wireless_receivers[i].channel==channel then + if senderstate==1 then + mesecon.wireless_receivers[i].requested_state=1 + elseif senderstate==0 then + mesecon.wireless_receivers[i].requested_state=0 + end + end + i=i+1 + end +end + +minetest.register_node("jeija:wireless_transmitter_on", { + tile_images = {"jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_on.png", "jeija_wireless_transmitter_on.png", "jeija_wireless_transmitter_on.png", "jeija_wireless_transmitter_on.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_transmitter_on.png"), + material = minetest.digprop_constanttime(0.8), + dug_item = 'node "jeija:wireless_transmitter_off" 1', +}) + +minetest.register_node("jeija:wireless_transmitter_off", { + tile_images = {"jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_tb.png", "jeija_wireless_transmitter_off.png", "jeija_wireless_transmitter_off.png", "jeija_wireless_transmitter_off.png", "jeija_wireless_transmitter_off.png"}, + inventory_image = minetest.inventorycube("jeija_wireless_transmitter_off.png"), + material = minetest.digprop_constanttime(0.8), +}) + +minetest.register_craft({ + output = 'node "jeija:wireless_transmitter_off" 2', + recipe = { + {'craft "default:steel_ingot"', 'node "jeija:mesecon_off"', 'craft "default:steel_ingot"'}, + {'', 'node "jeija:mesecon_off"', ''}, + {'', 'craft "jeija:ic"', ''}, + } +}) + +mesecon:register_on_signal_on(function(pos, node) + if node.name=="jeija:wireless_transmitter_off" then + minetest.env:add_node(pos, {name="jeija:wireless_transmitter_on"}) + local node_under_pos=pos + node_under_pos.y=node_under_pos.y-1 + local node_under=minetest.env:get_node(node_under_pos) + mesecon:wireless_transmit(node_under.name, 1) + end +end) + +mesecon:register_on_signal_off(function(pos, node) + if node.name=="jeija:wireless_transmitter_on" then + minetest.env:add_node(pos, {name="jeija:wireless_transmitter_off"}) + local node_under_pos=pos + node_under_pos.y=node_under_pos.y-1 + local node_under=minetest.env:get_node(node_under_pos) + mesecon:wireless_transmit(node_under.name, 0) + end +end) + +-- PRESSURE PLATE WOOD + +minetest.register_node("jeija:pressure_plate_wood_off", { + drawtype = "raillike", + tile_images = {"jeija_pressure_plate_wood_off.png"}, + inventory_image = "jeija_pressure_plate_wood_off.png", + paramtype = "light", + is_ground_content = true, + walkable = false, + selection_box = { + type = "fixed", + }, + material = minetest.digprop_constanttime(0.3), +}) + +minetest.register_node("jeija:pressure_plate_wood_on", { + drawtype = "raillike", + tile_images = {"jeija_pressure_plate_wood_on.png"}, + inventory_image = "jeija_pressure_plate_wood_on.png", + paramtype = "light", + is_ground_content = true, + walkable = false, + selection_box = { + type = "fixed", + }, + material = minetest.digprop_constanttime(0.3), + dug_item='node "jeija:pressure_plate_wood_off" 1' +}) + +minetest.register_craft({ + output = 'node "jeija:pressure_plate_wood_off" 1', + recipe = { + {'node "default:wood"', 'node "default:wood"'}, + } +}) + +minetest.register_abm( + {nodenames = {"jeija:pressure_plate_wood_off"}, + interval = 1.0, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local objs = minetest.env:get_objects_inside_radius(pos, 1) + for k, obj in pairs(objs) do + local objpos=obj:getpos() + if objpos.y>pos.y-1 and objpos.ypos.y-1 and objpos.y0 then direction.x=-1 return direction end + lpos=pos + lpos.x=pos.x-0.499 + + for n=4, 6 do + getactivated=getactivated+mesecon:is_power_on(lpos, rules[n].x, rules[n].y, rules[n].z) + end + + if getactivated>0 then direction.x=1 return direction end + lpos=pos + lpos.z=pos.z+0.499 + + for j=7, 9 do + getactivated=getactivated+mesecon:is_power_on(lpos, rules[j].x, rules[j].y, rules[j].z) + end + + if getactivated>0 then direction.z=-1 return direction end + lpos=pos + lpos.z=pos.z-0.499 + + for l=10, 12 do + getactivated=getactivated+mesecon:is_power_on(lpos, rules[l].x, rules[l].y, rules[l].z) + end + if getactivated>0 then direction.z=1 return direction end + return direction +end + +minetest.register_node("jeija:movestone", { + tile_images = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_arrows.png", "jeija_movestone_arrows.png"}, + inventory_image = minetest.inventorycube("jeija_movestone_arrows.png", "jeija_movestone_side.png", "jeija_movestone_side.png"), + paramtype = "facedir_simple", + material = minetest.digprop_stonelike(0.8), +}) + +minetest.register_entity("jeija:movestone_entity", { + physical = false, + visual = "sprite", + textures = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_arrows.png", "jeija_movestone_arrows.png"}, + collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, + visual = "cube", + --on_activate = function(self, staticdata) + --self.object:setsprite({x=0,y=0}, 1, 0, true) + --self.object:setvelocity({x=-3, y=0, z=0}) + --end, + + on_punch = function(self, hitter) + self.object:remove() + hitter:add_to_inventory('node jeija:movestone 1') + end, + + on_step = function(self, dtime) + local pos = self.object:getpos() + local colp = pos + local velocity={} + local direction=jeija_get_movestone_direction(colp) + + --colp.x=colp.x-(direction.x/2.01) + --colp.y=colp.y-direction.y + --colp.z=colp.z-(direction.z/2.01) + + if (direction.x==0 and direction.y==0 and direction.z==0) + or (minetest.env:get_node_or_nil(pos).name ~="air" + and minetest.env:get_node_or_nil(pos).name ~= nil) then + minetest.env:add_node(pos, {name="jeija:movestone"}) + self.object:remove() + return + end + --if not mesecon:check_if_turnon(colp) then + -- minetest.env:add_node(pos, {name="jeija:movestone"}) + -- self.object:remove() + -- return + --end + + velocity.x=direction.x*3 + velocity.y=direction.y*3 + velocity.z=direction.z*3 + + self.object:setvelocity(velocity) + + local np = {x=pos.x+direction.x, y=pos.y+direction.y, z=pos.z+direction.z} + local coln = minetest.env:get_node(np) + if coln.name ~= "air" and coln.name ~="water" then + local thisp= {x=pos.x, y=pos.y, z=pos.z} + local thisnode=minetest.env:get_node(thisp) + local nextnode={} + minetest.env:remove_node(thisp) + repeat + thisp.x=thisp.x+direction.x + thisp.y=thisp.y+direction.y + thisp.z=thisp.z+direction.z + nextnode=minetest.env:get_node(thisp) + minetest.env:add_node(thisp, {name=thisnode.name}) + nodeupdate(thisp) + thisnode=nextnode + until thisnode.name=="air" or thisnode.name=="ignore" or thisnode.name=="default:water" or thisnode.name=="default:water_flowing" + end + end +}) + +minetest.register_craft({ + output = 'node "jeija:movestone" 2', + recipe = { + {'node "default:stone"', 'node "default:stone"', 'node "default:stone"'}, + {'node "jeija:mesecon_off"', 'node "jeija:mesecon_off"', 'node "jeija:mesecon_off"'}, + {'node "default:stone"', 'node "default:stone"', 'node "default:stone"'}, + } +}) + + +mesecon:register_on_signal_on(function (pos, node) + if node.name=="jeija:movestone" then + local direction=jeija_get_movestone_direction({x=pos.x, y=pos.y, z=pos.z}) + local checknode={} + local collpos={x=pos.x, y=pos.y, z=pos.z} + repeat -- Check if it collides with a stopper + collpos={x=collpos.x+direction.x, y=collpos.y+direction.y, z=collpos.z+direction.z} + checknode=minetest.env:get_node(collpos) + if mesecon:is_mvps_stopper(checknode.name) then + return + end + until checknode.name=="air" + or checknode.name=="ignore" + or checknode.name=="default:water" + or checknode.name=="default:water_flowing" + minetest.env:remove_node(pos) + nodeupdate(pos) + minetest.env:add_entity(pos, "jeija:movestone_entity") + end +end) + + + +-- STICKY_MOVESTONE + +minetest.register_node("jeija:sticky_movestone", { + tile_images = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_sticky_movestone.png", "jeija_sticky_movestone.png"}, + inventory_image = minetest.inventorycube("jeija_sticky_movestone.png", "jeija_movestone_side.png", "jeija_movestone_side.png"), + paramtype = "facedir_simple", + material = minetest.digprop_stonelike(0.8), +}) + +minetest.register_craft({ + output = 'node "jeija:sticky_movestone" 2', + recipe = { + {'craft "jeija:glue"', 'node "jeija:movestone"', 'craft "jeija:glue"'}, + } +}) + +minetest.register_entity("jeija:sticky_movestone_entity", { + physical = false, + visual = "sprite", + textures = {"jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_movestone_side.png", "jeija_sticky_movestone.png", "jeija_sticky_movestone.png"}, + collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, + visual = "cube", + + on_punch = function(self, hitter) + self.object:remove() + hitter:add_to_inventory('node jeija:sticky_movestone 1') + end, + + on_step = function(self, dtime) + local pos = self.object:getpos() + local colp = pos + local direction=jeija_get_movestone_direction(colp) + local velocity={x=direction.x*3, y=direction.y*3, z=direction.z*3} + + self.object:setvelocity(velocity) + + local np = {x=pos.x+direction.x, y=pos.y+direction.y, z=pos.z+direction.z} + local coln = minetest.env:get_node(np) + if coln.name ~= "air" and coln.name ~="water" then + local thisp= {x=pos.x, y=pos.y, z=pos.z} + local thisnode=minetest.env:get_node(thisp) + local nextnode={} + minetest.env:remove_node(thisp) + repeat + thisp.x=thisp.x+direction.x + thisp.y=thisp.y+direction.y + thisp.z=thisp.z+direction.z + nextnode=minetest.env:get_node(thisp) + minetest.env:add_node(thisp, {name=thisnode.name}) + nodeupdate(thisp) + thisnode=nextnode + until thisnode.name=="air" or thisnode.name=="ignore" or thisnode.name=="default:water" or thisnode.name=="default:water_flowing" + end + + --STICKY: + local np1 = {x=pos.x-direction.x*0.5, y=pos.y-direction.y*0.5, z=pos.z-direction.z*0.5} -- 1 away + local coln1 = minetest.env:get_node(np1) + local np2 = {x=pos.x-direction.x*1.5, y=pos.y-direction.y*1.5, z=pos.z-direction.z*1.5} -- 2 away + local coln2 = minetest.env:get_node(np2) + + if (coln1.name == "air" or coln1.name =="water") and (coln2.name~="air" and coln2.name ~= water) then + thisp= np2 + local newpos={} + local oldpos={} + repeat + newpos.x=thisp.x+direction.x + newpos.y=thisp.y+direction.y + newpos.z=thisp.z+direction.z + minetest.env:add_node(newpos, {name=minetest.env:get_node(thisp).name}) + nodeupdate(newpos) + oldpos={x=thisp.x, y=thisp.y, z=thisp.z} + thisp.x=thisp.x-direction.x + thisp.y=thisp.y-direction.y + thisp.z=thisp.z-direction.z + until minetest.env:get_node(thisp).name=="air" or minetest.env:get_node(thisp).name=="ignore" or minetest.env:get_node(thisp).name=="default:water" or minetest.env:get_node(thisp).name=="default:water_flowing" + minetest.env:remove_node(oldpos) + end + + if (direction.x==0 and direction.y==0 and direction.z==0) then + --or (minetest.env:get_node_or_nil(pos).name ~="air" + --and minetest.env:get_node_or_nil(pos).name ~= nil) then + minetest.env:add_node(pos, {name="jeija:sticky_movestone"}) + self.object:remove() + return + end + end +}) + +minetest.register_craft({ + output = 'node "jeija:sticky_movestone" 2', + recipe = { + {'node "default:stone"', 'node "default:stone"', 'node "default:stone"'}, + {'node "jeija:mesecon_off"', 'node "jeija:mesecon_off"', 'node "default:tree"'}, + {'node "default:stone"', 'node "default:stone"', 'node "default:stone"'}, + } +}) + + +mesecon:register_on_signal_on(function (pos, node) + if node.name=="jeija:sticky_movestone" then + local direction=jeija_get_movestone_direction({x=pos.x, y=pos.y, z=pos.z}) + local checknode={} + local collpos={x=pos.x, y=pos.y, z=pos.z} + repeat -- Check if it collides with a stopper + collpos={x=collpos.x+direction.x, y=collpos.y+direction.y, z=collpos.z+direction.z} + checknode=minetest.env:get_node(collpos) + if mesecon:is_mvps_stopper(checknode.name) then + return + end + until checknode.name=="air" + or checknode.name=="ignore" + or checknode.name=="default:water" + or checknode.name=="default:water_flowing" + repeat -- Check if it collides with a stopper (pull direction) + collpos={x=collpos.x-direction.x, y=collpos.y-direction.y, z=collpos.z-direction.z} + checknode=minetest.env:get_node(collpos) + if mesecon:is_mvps_stopper(checknode.name) then + return + end + until checknode.name=="air" + or checknode.name=="ignore" + or checknode.name=="default:water" + or checknode.name=="default:water_flowing" + + minetest.env:remove_node(pos) + nodeupdate(pos) + minetest.env:add_entity(pos, "jeija:sticky_movestone_entity") + end +end) + diff --git a/jeija/temperest.lua b/jeija/temperest.lua new file mode 100644 index 0000000..e8fb84d --- /dev/null +++ b/jeija/temperest.lua @@ -0,0 +1,182 @@ +--TEMPEREST-PLUG + +minetest.register_node("jeija:mesecon_plug", { + drawtype = "raillike", + paramtype = "light", + is_ground_content = true, + tile_images = {"jeija_mesecon_plug.png"}, + inventory_image = "jeija_mesecon_plug.png", + material = minetest.digprop_constanttime(0.1), + walkable = false, + selection_box = { + type = "fixed", + }, +}) + +mesecon:register_on_signal_on(function(pos, node) + if node.name=="jeija:mesecon_plug" then + for x = -2,2,2 do + for z = -2,2,2 do + lpos = {x=pos.x+x, y=pos.y, z=pos.z+z} + lnode = minetest.env:get_node(lpos) + if lnode.name=="jeija:mesecon_socket_off" then + minetest.env:add_node(lpos, {name="jeija:mesecon_socket_on"}) + nodeupdate(lpos) + mesecon:receptor_on(lpos) + elseif lnode.name=="jeija:mesecon_inverter_on" then + minetest.env:add_node(lpos, {name="jeija:mesecon_inverter_off"}) + nodeupdate(lpos) + mesecon:receptor_off(lpos) + end + end + end + end +end) + +mesecon:register_on_signal_off(function(pos, node) + if node.name=="jeija:mesecon_plug" then + for x = -2,2,2 do + for z = -2,2,2 do + lpos = {x=pos.x+x, y=pos.y, z=pos.z+z} + lnode = minetest.env:get_node(lpos) + if lnode.name=="jeija:mesecon_socket_on" then + minetest.env:add_node(lpos, {name="jeija:mesecon_socket_off"}) + nodeupdate(lpos) + mesecon:receptor_off(lpos) + elseif lnode.name=="jeija:mesecon_inverter_off" then + minetest.env:add_node(lpos, {name="jeija:mesecon_inverter_on"}) + nodeupdate(lpos) + mesecon:receptor_on(lpos) + end + end + end + end +end) + +minetest.register_on_dignode(function(pos, oldnode, digger) + if oldnode.name == "jeija:mesecon_plug" then + for x = -2,2,2 do + for z = -2,2,2 do + lpos = {x=pos.x+x, y=pos.y, z=pos.z+z} + lnode = minetest.env:get_node(lpos) + if lnode.name=="jeija:mesecon_socket_on" then + minetest.env:add_node(lpos, {name="jeija:mesecon_socket_off"}) + nodeupdate(lpos) + mesecon:receptor_off(lpos) + elseif lnode.name=="jeija:mesecon_inverter_on" then + minetest.env:add_node(lpos, {name="jeija:mesecon_inverter_off"}) + nodeupdate(lpos) + mesecon:receptor_off(lpos) + end + end + end + end +end) + + +minetest.register_craft({ + output = 'node "jeija:mesecon_plug" 2', + recipe = { + {'', 'node "jeija:mesecon_off"', ''}, + {'node "jeija:mesecon_off"', 'craft "default:steel_ingot"', 'node "jeija:mesecon_off"'}, + {'', 'node "jeija:mesecon_off"', ''}, + } +}) + +--TEMPEREST-SOCKET + +minetest.register_node("jeija:mesecon_socket_off", { + drawtype = "raillike", + paramtype = "light", + is_ground_content = true, + tile_images = {"jeija_mesecon_socket_off.png"}, + inventory_image = "jeija_mesecon_socket_off.png", + material = minetest.digprop_constanttime(0.1), + walkable = false, + selection_box = { + type = "fixed", + }, +}) + +minetest.register_node("jeija:mesecon_socket_on", { + drawtype = "raillike", + paramtype = "light", + is_ground_content = true, + tile_images = {"jeija_mesecon_socket_on.png"}, + inventory_image = "jeija_mesecon_socket_on.png", + material = minetest.digprop_constanttime(0.1), + walkable = false, + selection_box = { + type = "fixed", + }, + dug_item='node "jeija:mesecon_socket_off" 1', +}) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "jeija:mesecon_socket_on" then + mesecon:receptor_off(pos) + end + end +) + +mesecon:add_receptor_node("jeija:mesecon_socket_on") +mesecon:add_receptor_node_off("jeija:mesecon_socket_off") + +minetest.register_craft({ + output = 'node "jeija:mesecon_socket_off" 2', + recipe = { + {'', 'craft "default:steel_ingot"', ''}, + {'craft "default:steel_ingot"', 'node "jeija:mesecon_off"', 'craft "default:steel_ingot"'}, + {'', 'craft "default:steel_ingot"', ''}, + } +}) + +--TEMPEREST-INVERTER + +minetest.register_node("jeija:mesecon_inverter_off", { + drawtype = "raillike", + paramtype = "light", + is_ground_content = true, + tile_images = {"jeija_mesecon_inverter_off.png"}, + inventory_image = "jeija_mesecon_inverter_off.png", + material = minetest.digprop_constanttime(0.1), + walkable = false, + selection_box = { + type = "fixed", + }, +}) + +minetest.register_node("jeija:mesecon_inverter_on", { + drawtype = "raillike", + paramtype = "light", + is_ground_content = true, + tile_images = {"jeija_mesecon_inverter_on.png"}, + inventory_image = "jeija_mesecon_inverter_on.png", + material = minetest.digprop_constanttime(0.1), + walkable = false, + selection_box = { + type = "fixed", + }, + dug_item='node "jeija:mesecon_inverter_off" 1', +}) + +minetest.register_on_dignode( + function(pos, oldnode, digger) + if oldnode.name == "jeija:mesecon_inverter_on" then + mesecon:receptor_off(pos) + end + end +) + +mesecon:add_receptor_node("jeija:mesecon_inverter_on") +mesecon:add_receptor_node_off("jeija:mesecon_inverter_off") + +minetest.register_craft({ + output = 'node "jeija:mesecon_inverter_off" 2', + recipe = { + {'node "jeija:mesecon_off"', 'craft "default:steel_ingot"', 'node "jeija:mesecon_off"'}, + {'craft "default:steel_ingot"', '', 'craft "default:steel_ingot"'}, + {'node "jeija:mesecon_off"', 'craft "default:steel_ingot"', 'node "jeija:mesecon_off"'}, + } +}) diff --git a/jeija/textures/jeija_blinky_plant_off.png b/jeija/textures/jeija_blinky_plant_off.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9127e10b764a7c47c2284121f2f5feb4f18928 GIT binary patch literal 496 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3=|R;6~IAFrvLx|9cffpbVF}# zZDnqB0000007G(RVRU6=Aa`kWXdp*PO;BVmWd{HN0a-~zK~y-)m6AbA0$~t_pDzW$ zj0M3`!9yU@v5PP#PZ9lv=)8ZRqZjKBbeC>k`Uy&xg-(K(E`i8W2gwX!yTsb2@pWid zR^25X7?^iv-gky?K1Ga)$UBhsq1)|t57^X1?tD6(e%0&sy)e0V|MGVQyW=SUt7TI&3yW1}vzh07 zIG*?IVHidx$k)t*wpum-cE?l6fHW9S7!4h2Wcc7Vqm|zGnC|?)4TEj0000=G`P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3=|R?VyNGJ?a%xttNX z;9z8*_3@?%D^8aaQ3e)vhnd-TXB9J0tJ%NCW1avQ29MS1*>mPay>5FV1&OYD-S(2S zMx1Cii~E)(H*wyw z?u*^sSLmS4&DTHH*X3fa4jK)+?fZpm{eIssTsInaJ4tIMkp~CHyW3la+uLIR4iAmh z<6~oCt`Y%St=1@k8z)ZizV=oCK32af{sY=)o_}&DL^Nb+$zg8~`u+ZJG`fF)vnjLo z8J&|*0h}InD3!CKMT5a041NY-_!yE(r4}_`Dre>Nr~^RfBvht0UHUz|Za}G=6|WoM z_r8hs%u?ypO90+%J(b*A8m}7wkXuWWDQL70(Y)*K0-AbW|YuPgg)9w`w~_CM_@Yk@+tnIRD+&iT2y zsd*(pE(3#eQEFmIYKlU6W=V#EyQgnJie4%^P`uI8#WBR<^wP=RdKb!jc z)_#7f=%y$0 hVY!N=X=c`@_v9u=#C?|8wbm2lN>5immvv4FO#sLoW<>x1 literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_hydro_turbine_off.png b/jeija/textures/jeija_hydro_turbine_off.png new file mode 100644 index 0000000000000000000000000000000000000000..2de3c7e7e6dc9152c03b87bfadb44e577899ceb3 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)9w`xX)xOZ=OrX#XPZ!4!jq`JZ z6on2e2*hylHLgErFYuS0sd>dI?*LI#j(>p@>qCw!KRV^Zn(4)nnd$%b?!CL`?#V2i z@@RSjLtA3Tn`uFtT6SFH?71fQ+wS4XolEU3zlWX3RCGC{$nr62V%Jj#xtMIeo@+%4 zoM9rLW{9@j(31JImcfZ*eyy#WnU&-cCE5noV3eJ zJkxT+((aO{3#%oPFKo5BU(`5F;p+E3!*_fC3ZE%+%3M{dvQL70(Y)*K0-AbW|YuPgg)9w`x1i~Fg$MnItro-U3d8t0Q! z($dltST`6L7|7UEOz^n+?b|mWfosS6hD(yBE`&CZ=p`Z0xy^rS#Gw*KUqg zecj#89}mk;o4I4kySb+(%$wI|Jms68>vOAg;|DxpCYdIByV!hyWS4x%za`6;8?O+U r{NsV515d({S$qEf``fL3lbJzU!O`^B#;4^#w=;OU`njxgN@xNAZ7gi6 literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_ic.png b/jeija/textures/jeija_ic.png new file mode 100644 index 0000000000000000000000000000000000000000..d487b029717cd69046fac4e43f75a6c5d2e1a5e3 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5}C6Re8hw1@=H8+02lL66gHf+|;}hAeVu`xhOTUBsE2$ zJhLQ2!QIn0AVn{g9Vi~>>Eak-ar)}yKrRMF4wqW*@AjSLbN-%86*l9tPhxjjaWHO? z$EGel?Nu=go-!x=QunM8+Od0=<{9Tbw&$C7b~dO;CQRJUnf6Q3aaXi5M@~XVYSSl~ hDb*XC4}8qs!`sfZ5|;JJ-(V)>3cvSQ%@Ji5R22v2?v;Gy^{QAe%1KT@#Sru zjZOwx49v{R`y?EmT{le%KkcD0i*3KSgj?_<1p@{KUkw4NGa^^s01aU9boFyt=akR{ E0RNOM9RL6T literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_mesecon_crossing_on.png b/jeija/textures/jeija_mesecon_crossing_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e33af53407e6102e411377a3ae83a187c208f415 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5|;JeUTX|m!ATKOg&v3Lo7}wCmdk@_dor||Nr)f>ua)R zNNBJuW-~A_c+|}((%N(5s*zCFvV-qg+b&MA;NW3kuu&G}p2Ej@9%ulAr>mdKI;Vst E0EWXY$N&HU literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_mesecon_curved_off.png b/jeija/textures/jeija_mesecon_curved_off.png new file mode 100644 index 0000000000000000000000000000000000000000..d66b5bdc36dd48745204d1f72c9d5ae7ef4b4716 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_mesecon_curved_on.png b/jeija/textures/jeija_mesecon_curved_on.png new file mode 100644 index 0000000000000000000000000000000000000000..69e39d1475c82be96ab20cdaa77374031cba5cdc GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfE-3DRt`?{w;$3r1joB*D8(FH%yw$wL3g2Gj+e_5m)5K;-L+l#WKQe5 z6)}SM4|Sb996zITmnMUF**(sf8=g%W4^EXceoiXbb7+(48lZz1JYD@<);T3K0RU`X BVfp|7 literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_mesecon_inverter_on.png b/jeija/textures/jeija_mesecon_inverter_on.png new file mode 100644 index 0000000000000000000000000000000000000000..54794ae3ac4b1bee29ac5334893273665555b933 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDEfH31!Z9ZwBAbW|YuPgfi8?6keW=vBM&isB|7(Vk#|7_XO|UH5;1ML+^fOaJbAN1ldAz@i zgw55!l}h_sjooJLzaU&1#GtiikMN2OlUP`sfZ5|;JIq7r9P96gaDSNs&hFF|VPB_3k>y_j`^Q*>xjxTTP mY;-cnI literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_mesecon_on.png b/jeija/textures/jeija_mesecon_on.png new file mode 100644 index 0000000000000000000000000000000000000000..65b7740e216b16c50c802dcd52522d1829a4649b GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5|;JY2!AQsg*z>6;Bt(5R22vfByfsXU;poG4;>+4sTXr l=GKHO4S~#Vyb?M<8*GJGWh2_yKLOPhfKK_vBy%J?s;gdHAozKpQbDqknT{xv$_}2M^vdrgy6;55Bz)~~&#?4(Fk6&Gr vtxkRT|IjJF_#c}d4&^(O?Z7jb;U3Umd7r>mdKI;Vst0G2IR?f?J) literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_mesecon_socket_on.png b/jeija/textures/jeija_mesecon_socket_on.png new file mode 100644 index 0000000000000000000000000000000000000000..d4710a215fea034d56bdb37ff81e958cd213b059 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDEfH31!Z9ZwBAbW|YuPgfNFv+bZc-zQNo07|=Bgp00i_>zopr0M{s8YXATM literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_mesecon_switch_off.png b/jeija/textures/jeija_mesecon_switch_off.png new file mode 100644 index 0000000000000000000000000000000000000000..c5835198f46f401546908932f1ca1975300a320a GIT binary patch literal 715 zcmV;+0yO=JP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3>Fg&1>XxaCYfXtGI2GF8M10v+}0O@9v13BZ>3+M)t(Dpz1Wkz6z?7cy%aoJ@GFRS zJ+4BmT`^hGRrf965R;6%*&YND_c{L_`2Ant?(XjO^|fIb`Fvhclw2+s1VI>vgTX-8 zb&PQw$L)4IP17Vv^7*{zy6(clLaWt62>HH$d3o8KI|4EQ000i&dEXdgl}hF8?98$( zNs>^OWsODyLfGka;y7;39f4Q;wSG-ZOaK5VrQL3q5F)Co8bwhM1eDS!ihv5<(C_y# z#?#Z&obzh6id0p_7?(;V2%)a)Ua)x2d z&dzF@mZoW;P-wMUk|cSaH#Rl~x3{;SFXH=t7>0z9z5V@{NPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3>Fg$8U$IMmH+?(V@X6oR4C77 zlD$joP#DI~dy=$G$ceQn_E0}Uu~3nqLk9<4{SyQWcN4Cwi<^tk-NC`j1#!BF;GZCl z7j$e35m9VPs2}|Zc!+6^ZO$Ep-plPf|9->sJTDv{A3r`mnx>gfr&U!=rBa^f`MxiN zFbqRclrRjt-EI^`gTWx3PRowttgNhbIvtF$>$-P$cb6BJ0t7+`1nhj@VT_f_<=fla zd_JE@Byb$Z?RFagdc9s4hGQBbBtV@0Je`}HLkLky`~5y4MAkGd2m;UZD5XIVjOnp6 z8jTc1SzKJ?oY!hKtZAB}D1|}+01U%G6DLU$V@#5ye!o9IKaV-*x~}K*`Q_#1WHJc? z{-r^HuIoV%+}zwmQA7yAmSs^&Ip>6sx3{;-x60T70f*JY_xJZ)E~l#M>+5T?*_1Xm zHVnhKzP{$1udlDialH9^v-qn>f6y&w>+|#T`S}?D78Vv-t=8=9tYq7^VHh(rGlfDy zmgQ_Vn@Xij(_C6w(sezGqHH$X>2wl_M6=nA4)H z>T0=MuGj0X>)N*c_1=V#Uav1KIqEP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipV% z3KcaP;_fX?ka8=iuPr>FJ3&J3Au?LesQ$uq=xp2;cVs06fnpNm8v=34&l* zcClDA8Vxc{Q;y?wUEkZ=gAf))0U^W~V~ly8FUykSxG0K-!(oynJkJBuG$Dj(nyRY0 zSS(&%UIal91R=|^@9%HJFnr%{x7(}LYCfMwQAC}boCtz&b#;}d>GAP#Q52FS&FAyU zWMWy?-{0SCHX{gPdwY92of?Kg^?E%)5HwBebUFZlX0utV)f7dsZJXn`BuSdh=5o2L zR;zDsZ?Y^C7Z(?6k@xp^-}iZ*uh;9kt}_h7^ZeuEqa;a1QLJZ%VSr&6pP!$O;~X6w zK?t9ppUbk8WjV{T`}=!>Aaq?HkH=vc20@UfDaf)+Q51$@Mx)W`>FJs*3_}3GYPE{v zm|++I0LC~?QBa>sglZJTC~sKSH@@m}x`>kN^Mx07*qoM6N<$g5_{z;{X5v literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_mesecon_t_junction_off.png b/jeija/textures/jeija_mesecon_t_junction_off.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e450228a53e39447e5185c97ea35d1896d1930 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5|;JZ6)JR%@sf)OHUWa5R22v2?v;Gy^{QAe%1KT@#Sru zjZOwx49v{R`y?EmT{le%_uj&2@|lTyBUfQ%W1@*F9}_df$-R8CGx;Cr01aXAboFyt I=akR{0L)=6IRF3v literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_mesecon_t_junction_on.png b/jeija/textures/jeija_mesecon_t_junction_on.png new file mode 100644 index 0000000000000000000000000000000000000000..8b19cea5e29993cf3771d3d391f5b8ecc2b75097 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5|;JO>XD1%4t9$OHUWa5R22v2?v<}{ZIe#|G)j=`kJg6 z5*jRv*$fN}9(6N{wD#P%DwNA`cFzH)E%B0tyUR>e`L-}J{Kyd!40$`}3eXS+Pgg&e IbxsLQ063a3`sfZ5~kpX^m<7&wKz18F;!lhFF|VPLRkr;IYol)AQv2l-pJB y?(F>k{M_8%=MMmZ%Sv%KUJ28L2a}9K85z`Ob5^%VHoOJuW$<+Mb6Mw<&;$TK`7oyd literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_meselamp_on.png b/jeija/textures/jeija_meselamp_on.png new file mode 100644 index 0000000000000000000000000000000000000000..3c2f682c68b89994b49a5ca903cbb869dc3fa6ae GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5~kpSuW95tw}&315X#n5R22v2@)9xJl45+dY=5Ba=YsP x%&-4{pI`Ie*Z>FuU$q7@yYWiwSmG1Pz%VO_V|n`etYbjE44$rjF6*2UngDQiEj9oE literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_meselamp_on_ceiling_off.png b/jeija/textures/jeija_meselamp_on_ceiling_off.png new file mode 100644 index 0000000000000000000000000000000000000000..be584c268542213871204d7ec2615232a4c13fab GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5~kpC4mi=Kd%6VOg&v3Lo7}wCp0j5dY=5x`sfZ5~kpC7t!Ah6L;41`h^?Jr+EH(`M>20u5mBboFyt=akR{ E0PG(t_W%F@ literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_meselamp_on_floor_off.png b/jeija/textures/jeija_meselamp_on_floor_off.png new file mode 100644 index 0000000000000000000000000000000000000000..6736a7b1fb41e72de3696da1c8b575651c6190e4 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5~kpMZq`1vl@Xyx}GkMAr_~T6C_v{Cx`^F8YmT?n``}j vzJ#xvn_EGxk3rj#B~R*;a*wW>7Q@WIWzVVOd%%VpsFA_b)z4*}Q$iB}K3XS& literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_meselamp_on_floor_on.png b/jeija/textures/jeija_meselamp_on_floor_on.png new file mode 100644 index 0000000000000000000000000000000000000000..7f135d40d36b93f367e1ba2a2b6782fa6d685859 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5~kp7496i>HB~}x}GkMAr_~T6C_v{Cx`^F8YmUNv)}yB wzemk=<>G=`AA`0fOPPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3>FR!E=**uMF0Q-j7da6R4C7V z%E4>ePyomA=S$KwF~+A^YD^WWb!$Rvcks5+Q5m$b%X%6VcH0iU?T_hU_g;4ygR!x) zZqQlqAVLd;719=KqM|j#n3u#Px`XHLd-}ld7dt#W)HF>H1cVU7FpG+2X}mSuHauhnV*0G4GTgf}-gmSyR>uBxi0X-i8> zG))tgN@Y5ok|c>Sb{vPMX+=>m#-b=9gfPbGbeiM1D2hze%x1HYWm(5@uCK2>&vP6n znM{UZD9f^87`0lBqNpf}D2iHLT`iZ(S65e%Wm$@%_SMT+EXMPE_2gt>VPQBNzS;Vs zC`u3n1VPxgO%TLzILznsa59;290vf{Mn7qq1^_%hI&xhX0I%PfCavFo>dhN0MOXmnf z-1FKD!;mEDy6$8$VOf@_R;#}6w7q$b91xb?^6`Dv$NA`wMbDEQ>he$ zFq6qdQ3L=G1OY-w)AZ@-X`xU!J3A8uL6W3;y`InK2~}0k&(9G;8yg#)PN&&yB7{bx s5yrS!Ec(8$C`vpY55q8#Nbo%W4-I}nng9R*07*qoM6N<$f)+$prvLx| literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_movestone_side.png b/jeija/textures/jeija_movestone_side.png new file mode 100644 index 0000000000000000000000000000000000000000..cad0dbe2b428e955f6a345baccefba3c5428dfeb GIT binary patch literal 806 zcmV+>1KIqEP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipV% z3KcaP;_fX?ka8=iuPr>FJ3&J3Au?LesQ$uq=xp2;cVs06fnpNm8v=34&l* zcClDA8Vxc{Q;y?wUEkZ=gAf))0U^W~V~ly8FUykSxG0K-!(oynJkJBuG$Dj(nyRY0 zSS(&%UIal91R=|^@9%HJFnr%{x7(}LYCfMwQAC}boCtz&b#;}d>GAP#Q52FS&FAyU zWMWy?-{0SCHX{gPdwY92of?Kg^?E%)5HwBebUFZlX0utV)f7dsZJXn`BuSdh=5o2L zR;zDsZ?Y^C7Z(?6k@xp^-}iZ*uh;9kt}_h7^ZeuEqa;a1QLJZ%VSr&6pP!$O;~X6w zK?t9ppUbk8WjV{T`}=!>Aaq?HkH=vc20@UfDaf)+Q51$@Mx)W`>FJs*3_}3GYPE{v zm|++I0LC~?QBa>sglZJTC~sKSH@@m}x`>kN^Mx07*qoM6N<$g5_{z;{X5v literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_object_detector_off.png b/jeija/textures/jeija_object_detector_off.png new file mode 100644 index 0000000000000000000000000000000000000000..ea2357e2548b0e6492f17278e200576c00c24036 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0XB zj({-ZRBb+KpdfpRr>`sfZ5}xR1MPLkpDO`{4tTmahFF|lI@wmJ$v~iWe@c#oRQFnq z9SwIHOXM8JYwEZ1597!D<%U5{`9o-Q1?Du1~hM77n-`Cg8JW%aFQ8ddtHEiAL2Sxjs z4E)4y85~=qe52_si_#=D4q^YbU)|XaZ!HT9m%O*%GYnqT6${bcC(8B{ P=pzPCS3j3^P6Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3>*#TB?AM?pyJ^zHP0RNXpN$3Z|) z|KlIuCm!EF*o`!YBo(8C;MrP1Bm%?AArmcYH4zj}E1e4_Ji2{T0vQ2lF-%?yV3mUx z2(&0=h^j7fQ#)xF!_dcMFl>JbW=8DJy!YN1O_7ZiIl^EIi$=1O*MiChmpazhrOSd?vfuLxYRZ)6B z^%rLnK-@V1BZM|+CG|7E`}`gL?(3^3LzE8T`pN=ie0p*ZC6eFu8A%!d`1t18AN}(E zm%9&+jYdFQ*9B^e^=8EvBrVcRRW8wmiK5&^)rhiDN|gqi$qMA_UZtEQr{@53Bs)^qU*;oRLIV15X#5otcEO`MHwk)VoqYS-eRGVXs(yFNVH#TiE8jOqA8^)otx*l zzrQD>bk5P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3>*?2B)8wZxc~qF9cffpbVF}# zZDnqB0000007G(RVRU6=Aa`kWXdp*PO;BVmWd{HN0zyedK~yNum6A_L6mb;CzrUH^ z%+5?RyXtPPQ|{UZ8mMKYL{dazo$ORz1d)QEqM$?Iu|pI@(78hp9lGVAK&bFoq!N~{ zAY1F7E&uGsuFn3Mb!T>F_t(KCD7*NM?|r}TeID--UDvUfpa6#Z{UQPNP`hLa1dOlR z7NKx`3THdKDpxgC;yk`$(R?(Pq5!O{!6=H~@&Q>y2(o5UGcA=Wnt6@&E7I`;2yNNN*AvuW8z~ zOYLnfYVNFjVWss`=f*$Mj<^h4RJSy*WX;zR*o6 zv8yfs4uGb&#u~Q(ta>+h8|H&4+bj^LEQ_>eNdNr4Qwtdy0IY^l8JXkeX2Z#7Fgc|xi?8x4zbp#i=*b?(aX97* z$M{iU6aXXa-uT68B@^imtQ^b$FdH1bsTt8M2cVd@vT0*+G5P%5bd7`I{=j&2=9{!o zOLz^>c7D5t)Ye=tDgv#z`kEZ?$pSbs>F<~hG`kJKb>&d0Y4w0{<85D^BF)586hOr) z6wJIVD{4U=e0Z3-uIrSGB{L&I^~&C_^y*RPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3>*#TB?AM?pyJ^zHP0RNXpN$3Z|) z|KlIuCm!EF*o`!YBo(8C;MrP1Bm%?AArmcYH4zj}E1e4_Ji2{T0vQ2lF-%?yV3mUx z2(&0=h^j7fQ#)xF!_dcMFl>JbW=8DJy!YN1O_7ZiIl^EIi$=1O*MiChmpazhrOSd?vfuLxYRZ)6B z^%rLnK-@V1BZM|+CG|7E`}`gL?(3^3LzE8T`pN=ie0p*ZC6eFu8A%!d`1t18AN}(E zm%9&+jYdFQ*9B^e^=8EvBrVcRRW8wmiK5&^)rhiDN|gqi$qMA_UZtEQr{@53Bs)^qU*;oRLIV15X#5otcEO`MHwk)VoqYS-eRGVXs(yFNVH#TiE8jOqA8^)otx*l zzrQD>bk5P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3>*?2B)8wZxc~qF9cffpbVF}# zZDnqB0000007G(RVRU6=Aa`kWXdp*PO;BVmWd{HN0zyedK~yNum6A_L6mb;CzrUH^ z%+5?RyXtPPQ|{UZ8mMKYL{dazo$ORz1d)QEqM$?Iu|pI@(78hp9lGVAK&bFoq!N~{ zAY1F7E&uGsuFn3Mb!T>F_t(KCD7*NM?|r}TeID--UDvUfpa6#Z{UQPNP`hLa1dOlR z7NKx`3THdKDpxgC;yk`$(R?(Pq5!O{!6=H~@&Q>y2(o5UGcA=Wnt6@&E7I`;2yNNN*AvuW8z~ zOYLnfYVNFjVWss`=f*$Mj<^h4RJSy*WX;zR*o6 zv8yfs4uGb&#u~Q(ta>+h8|H&4+bj^LEQ_>eNdNr4Qwtdy0IY^l8JXkeX2Z#7Fgc|xi?8x4zbp#i=*b?(aX97* z$M{iU6aXXa-uT68B@^imtQ^b$FdH1bsTt8M2cVd@vT0*+G5P%5bd7`I{=j&2=9{!o zOLz^>c7D5t)Ye=tDgv#z`kEZ?$pSbs>F<~hG`kJKb>&d0Y4w0{<85D^BF)586hOr) z6wJIVD{4U=e0Z3-uIrSGB{L&I^~&C_^y*RPx#32;bRa{vGi!~g&e!~vBn4jTXf00(qQO+^RW3>*scQmORt@Njc;)9rTY{kzu34ob)6 zV%F^W@xfqFE|(#Mgpm9DdsS7hudmbTbUYp>gy_2N-?qLu|4I@PnBawlg{!Np?d|PG zqoM11y5AQtEl$+S*#b-{0KaY_(c4 z1S}Ak5GYVI8jX_4WVhSZG;Ml%nse^D?$XlI-QC@AIE7-kA#`zZ;W*C0!9f^?J3BkcWYRE<;c)o&_n!sl zXs)0=%W1K~Ye|xHUAJvJolXM)mY0_e!;mBiLfC4xE-x>2|9mj;C7%O5rq*gT*LA}% ztX8Y-cDqukxUTCs&e+&kv)S}KPf-*-rurPfpI%P9zro*`?^TXN%d(y)gTUwC?2Q$1 b^hy37tx#Lr%m*GO00000NkvXXu0mjf7}S5~ literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_power_plant.png b/jeija/textures/jeija_power_plant.png new file mode 100644 index 0000000000000000000000000000000000000000..0d7c025570af48c44048c2af258c9af79be2334d GIT binary patch literal 639 zcmV-_0)YLAP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3=e_Q&A9xpSigt zX-pc^R!ACJ5Q;Y7N0oFXNCffYCn(~s8+ZN&$yR@WJ8|O=5beq!h#*mkC?PgrZAotN zBQnvac@rhul zAz}$wzTX&Lij>83*-Wa!0|%Gk9kqWZ3EFv8%?Dc$u|yU1l9a>?un%zAsOHB=yu{|; ziRihD3xh)u z!-<64$l|nXfBe)B&&--yytNr!yR+yWP_57!Qk0`D2tny#8jKJTs^Lu;Jdm zQBRz@9CO~ScR~QQtzY7FI}%UCjrC$vuH9YMKm`El6;lB&++6bHskV83-;(od8O`RB zJbO^**y<6Q+b!l7X1w2%OA;84^optRbcoeUM`={sWOGRx)wU06Znv;^9OCH^^{0CR Z@EiRi3E6&5xaR->002ovPDHLkV1j7?7+(MY literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_pressure_plate_stone_off.png b/jeija/textures/jeija_pressure_plate_stone_off.png new file mode 100644 index 0000000000000000000000000000000000000000..194d8fc7ecac019e347633dc2798c29fa57a87cf GIT binary patch literal 814 zcmV+}1JV46P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipuD z5FHgyjG$%!00OQ_L_t(2&n42!O6x!XfZ<$bGKop2Z9-};+IlGx#TzKN(1mW~yoRrG zUQ2Kz_MqZMg|=t~6{BrwVofG#E|Z*vkMQ&T?9R@PD2kFKiJ}Mq008{_{3JAGI4)uJd;RaH?GN~!Prgb)rwNC!Z==`S}@Rj4{sh-19u!wte4UTwI(?Cd1+I`}>=3Hk-SOOm8YrPAy5>h*e26pErGNpgOE4lu^D zEDr{QgM$Nv(9_dXS(d7*=6U|`@W8UHWm(;BHw?od2u7n3D2hVUG)a=~@9$4ePJYS4 zFa!WhCX?B0CP@+iAdcfSO(BF_nx;VzL{Zdkw;vxL%d%`V8etgvz7GJfZQFI-R;$JH ze7D=pvWz!P6GB)N#ogWA!otG(`ufMm$6zpsPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3?2|3Gq$XDSO5S5u}MThR4C6S z(%DMmPym48Eazk~OWTChEZVvhsp19-Ug(A1IP)4l%FJsC-iRF+yiuVoT0y1JrZiEL zbJ8p)nF}A`=lkictt~+iL{St30RR91`2PM*lB6t4j^kLC&9W?x<2=s^Aw16m2;s@e z$#^{0H0|T#qu1-Ludl1BT9)P8+Z)GmVHoc0>|9@8+qQjkbHiGeWmy&g0Aq|0;(5N^ zZexrM!>CrP7-LP-WLYMJ1VMlhVjzSFq37r4>2!(^s#Gd@p4+zVy6(lr1%!|g0wG*p zUf$T)@O__w5JCtS7Z+)oR#kOjVS(c~-}fa+YPZ{2ma!}wh9S$czVEB53J4*xEL)Z( z2tvQ#FN%Wa`JYNfQ831`EF*;a{k~xs9LIr5rDB?9nx=+fc%Jw4^rWh)s;YUO`@Ziu zP7nn1^YfF*WHcImetxozMq_(>`|Rv2P1F7T{h}ypwc4LQe}Db@cX|0c%d+?PcbcXf zjmGQiYmy`YA%rpB-QBfqo1&<-wKaqgMNt$*IgaCb-pb0#a5xl25g|kfp$`ua4-O8h z)#}U3OArK#qDYct+qNi*ilX#-y;`kS6oo9yNs^qNo&r@>B}p0#277yZJkLKqK9*&v zXA%w@r$DK|G%*@OzEiEw&Gdnv=2%#uS*L8+r zc%DB$KW{dholZyBb<;GjuCC%ZrdzER!!V|4T9!2$jlRCV>h*dY#}q|z92dv2EXzM{ dGYsSV{(m#~Zf4W*gL?n~002ovPDHLkV1m74XAuAZ literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_pressure_plate_wood_off.png b/jeija/textures/jeija_pressure_plate_wood_off.png new file mode 100644 index 0000000000000000000000000000000000000000..e6484bea5b74a10a7f0a774856badea23b7f46fb GIT binary patch literal 704 zcmV;x0zdtUP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipuD z1sgC(Ke9Xk00KZsL_t(2&jrD|jvPf40MPrYM|amu@9eJE9wDtDz$74%AQ2Jsy?g^A zaOTuc(I&@N;~&4i zun6KLt^@E0N@aK$>arI9^9M%lKlMB z@z38MOPuB=g)D%s%UN3^*qkt^?03N$0dXO8|Ni|!jB_rGDsE>wbo-c++dr`V0AL}$ zB4LLjPDC(mWlKfS?RLi>hjN|gv@8<>80H3CYgw1tS!CI2Ud`Y;Yr8N=iPM*l@6d?m zwbh)~f+Qp_PNxZVGSo$Op&!%@{q2MJulRV7A07r3&ZPoqt2zcj1ZKVsKG(9$+nQTA z976BkzW*YJm&adzd!2J8Ek;-jcjJKxpyXEDG{w`?S)1+#-wngZZz`?9a*5aZ@^qT7 z*EEQFX8<|o>Yaf`yRpxuwW3<_a=wTV5kj~LSj$~7B)r5;#P)=}_uH25?rxFDJL?1n zXQk$~#%Y=_UDs#jEhTBCEX#RKy$@mEef#=p+z*a}=|fS#?~gZzDd!xwO%)7dsSN>` mP{cNc!Smp4u1ZX6EdK-PP(N#=odoIt0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3?2m>2rqn`WdHyIN=ZaPR4C5{ z!OM=+MiclVHp!ar!%F`$NS3lq8Fiur6H2}KI zN3E4$wZfpX-T1}`i1ohx_m6+XSZn>DVmGEmyA3hg?aj+y-T~-ezyCzS7DcRxU|jPW zv!LB<_K*5}o~Ag@BLWy^0IXG~xwH+ktR*d`cWu+OzLy-vFCRak5lu@iDJ~gF-v0LF za2QcXLv3K|yIyVIUEYZMinlxY@upYdlna2?qJtMiVCGBjQpxkQE~)z6&Ufzp-(O_+ zVE^pJhi^Q#enjyTf!o$6nM~1IQs2 zXAM-^3|-2#X4QhH<4J^w5d4M5lCQiW;W?}#O-I-{x31~x>Jo{ZZLC0V8!2fiVH~GZ z+jdELjZtdO^L$)l=e*yx-@bktw!LLP)%-wtmgVK;6_kB?m8;u4yJUm=n zTRr`>Mf+}xn+>+9)s+BD7K za7YkDp-}LBKOT>V!(rRDkB*MI-R{}hS*20|03075qse4a*L4iTXqwh_Jraq`&CLx4 z1Jg7!nT%l=mSv4bqhhfbjYd%vMb_5VD2nQII;LsH2yM&kSxnDFE6O?`wYWi80NZeKA*q7zCJ%cw{6>X-K(ps@$vDQnVHAO$CHzj!C){y zKM!b{4g>tYy|NF=)5?&<02)69mFXRTKAJg?boG7MuFhH0Ar0OzZD^ayEnC;$Ke07*qo IM6N<$g6jT@o&W#< literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_removestone_inv.png b/jeija/textures/jeija_removestone_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3dedd3c07bb2c5023f24a5eb6a908f4d1d49fc GIT binary patch literal 923 zcmW+!Yb;w~7(VCJWqL~!nxRFvxDyf*i}+JT5FEl}RDZ1I2S3!3A}KP}uvjuPGc(;K zBsPg9?#s$Dja39;gt}!Rb&qC@6mjpK?rToZ`M&Rc-{*Os=Y5t&$8(tOOoAXdi3zdk zc=K$}EeiiH8}cLYB9-a!5~Ayua1R@Y+@$ze!fN}q{^)4LiPPhRY$ZW(M{N(;6vP$a z(6Kl%CC>3T`!?T`df$7=AP9yaF*f?X{|w1v{JkQr1d*JSw79r~ZFBR<$qA3gJ2*HH3WZv&mLy5J zTz+(Pgp-YpjnL50LWSaKO$~+AR}BsM1qD7nK5J`h$YHbDuCA_retvsp0G)WE<%2M33nn;U>|x!jqVnZv_F4u?}#UjDkV5g-7hrlzL0 zx3{CBqH?6t9GPrlVgeE4+{i43!Lnxe|pO?vG*p7^hP!fp*%76(}LMEHVs?umYJw2VAoLbx3 z`g(iSYPH2;nVz1843(9YcEQ2HySuyg_V(xmA511wRaiJ&TTAHm+Lji|Y(73dMpvVw zqY%Rm3)u*TKDdA~8jYsEzaRc#!3v6^5Em8}h7a5>FE87Hy}P?R5YErfVbk#NuxWk$ zQ+qqMxik&+pzPe-Ty=Hz)zwuXoxZ-0G`(Onf-p$#@9#4rA|lW? zw9m@U{ysDWK_N8mq*5tF1NH5^JaKgN2cZyEU?^oY8V3glALZq}(`r!?`A|I|AONN! zg2iG@PEKm7sw&lLkc9CJXJ_YcI^CP5CQKz<#|UC}mX?;l0i%Hl#Rvnx*kXY#b!@h6 zykjI1g+hVyXnkd61*3j?dKwfIWH1=uW_Wn`<>e)y(7@-8j-1jbfB5(6KG}3njH6?_ IBo8(J077P>D*ylh literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_silicon.png b/jeija/textures/jeija_silicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3048a5800df17aa86fc6f829b8d1ea21b2aaf82e GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0XB zj({-ZRBb+KpdfpRr>`sfZ5~m6BRMWhrSm|c#Ar`04PV(k!G7xd~kL7duwq%FQ zV=jl~QsvEwP6|FZm^u4{*q1H)v&wky@yjnWwgqw=cw5D;;CW6t z?QwJNpA$t*3JeblZp`jy6T9c8*soK6KU#QwBe(z6ZEJsKJUEnB*03yd%Jl z_wx5X^J6;y4{a$iuMQ3E;E2k;^u_2utGtd9L-&Ujty}k<-oz5ol5RZXkWy1n*SgnX z({q_8JlDT4&rGk2X|3sDgPQH93in9&R;+#V|B|qRZoXpFv@8~&ml!-<{an^LB{Ts5 D4e5HX literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_solar_panel.png b/jeija/textures/jeija_solar_panel.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa78c90eb739f878311cdef62ef46b005bee2ec GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5~lReXA2w4wwRkWHUn|N}Tg^b5rw5fLsO!=c3falGGH1 z^30M91$R&1fE2w{cA&Vtr;B5V#`)v~1@1LT2@$R;&7C2eGuJmJUb(z@-Z4G~w<6*H TAzK#j0GZ+G>gTe~DWM4fDuXa( literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_sticky_movestone.png b/jeija/textures/jeija_sticky_movestone.png new file mode 100644 index 0000000000000000000000000000000000000000..e410ba9e2e2814f44cc52dfa280b2d41fe532589 GIT binary patch literal 807 zcmV+?1K9kDP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3>p*}5v~lU!QiaJcCkJw{`MTHVC7#1aTpTEP;>^w-b>Q{{SbiCR~h~m^itS(1UmV z12kl3FEAlNUYump;2hxInoMfh*0H{NAae72`W(K5BuRxrf#W!qWxKk%XqqmSN{XU5 zj>9mF%jIgf+x2?A)9GAYU9l`nhC-o?zSvTQIudXNY2jA z8itXIr;fQ}+MsvDoke-^h&|FB-Ktmv=78KSOHs*x+dqw`bGaPC7`t39AizS_=Icr9 z;1l*_3vDMY1ewnpPjGd%y$#NmbQmv)O9348uS^ zpRZc2>V)2Q+Be6eXJ2pp?kr(WnSFQq5{X145~2G0`)jpYVmC1+jsbiEfaHrkY~$78jy`_!8vqD`xMkmpp*%%VBgTkM=nm=dO+KH`x7%$p7K>FX72CG= z_xIy${2*{(IL1_dYPvWb>5afQh_mrC>TKo5O7day{QR6)Utc#(6Cva{j%8VbAhcR7 zMN!;t_tw^yAPA*WiQ_n)=M_Z>1OlWeirH+IW!Y#nTCG+O4-Z+Ey}Z2CG%XwscRHQ% l@o|sGW1419PY=T|e*v%fM;){Y0~G)O002ovPDHLkV1mqZYa9Ro literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_torches_off.png b/jeija/textures/jeija_torches_off.png new file mode 100644 index 0000000000000000000000000000000000000000..c78cfcc21062bf5fb9a24853e44b47be5035a2ed GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ#}iF>xNjMA~R1H#}EtuP-!BwAl+Zfx*+&&t;ucLK6UrYdYru literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_torches_off_ceiling.png b/jeija/textures/jeija_torches_off_ceiling.png new file mode 100644 index 0000000000000000000000000000000000000000..104a062c2f1503eb3169c8abb21e283c0c3ec2ff GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%K$t-4F{@WbWzW z7-Hd{oN$17&J>IP$8W9rb9_15`a1^33@>E)CLK;nIJ{uxyodHiYBzr}=QEu2le_9r c$HBm$dsc7i2ItayKqDADUHx3vIVCg!02VqpKmY&$ literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_torches_off_side.png b/jeija/textures/jeija_torches_off_side.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b09a3c9eabdc0ae501098f8a560df1f5ffeaf0 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%K$t-4F{@WbNtV z7-Hd{oFKv4Y{4??mE^y}29f7n%no>Vezw=^xm=LKoRk~-@9`lQNr!3T8#0-ynwzuQ edZk)87#Zfs>P_vHRPzTK!{F)a=d#Wzp$Py!f;FfB literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_torches_on.png b/jeija/textures/jeija_torches_on.png new file mode 100644 index 0000000000000000000000000000000000000000..49efa712ec5d27c2553ac7b464aa851bf293450c GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ#}iF>xNjMB6Cj{#}Etuf;_js1QIv~wZRJ3O8sd{zQbN^MW<(D<) nFgI)~;#tG3@r@~#mw{pKd#l1OwNrjTBN#kg{an^LB{Ts5!>>A( literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_torches_on_ceiling.png b/jeija/textures/jeija_torches_on_ceiling.png new file mode 100644 index 0000000000000000000000000000000000000000..104a062c2f1503eb3169c8abb21e283c0c3ec2ff GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%K$t-4F{@WbWzW z7-Hd{oN$17&J>IP$8W9rb9_15`a1^33@>E)CLK;nIJ{uxyodHiYBzr}=QEu2le_9r c$HBm$dsc7i2ItayKqDADUHx3vIVCg!02VqpKmY&$ literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_torches_on_side.png b/jeija/textures/jeija_torches_on_side.png new file mode 100644 index 0000000000000000000000000000000000000000..304bb8071fa8c2ddae6fa3c27f9e76452661cea4 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%K$t-4F{@WbNtV z7-Hd{oFKv4Y{ByHfBFyp!zq@+HyPAb&;8$F;CFZ;Z^zcqpZ(mzsSJ^E2bOWZ;N@E- fX_h6R#KLg>xmDqh$ulE>#xQug`njxgN@xNAJoPq} literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_wireless_inverter_off.png b/jeija/textures/jeija_wireless_inverter_off.png new file mode 100644 index 0000000000000000000000000000000000000000..0db21fb3a4c9bb4c385db542d6d148082862fe49 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5}ChQ-kyOerN)PWHUn|N}Tg^b5rw5fLsO!=c3falGGH1 z^30M91$R&1fE2w{cA)rVPZ!4!jq}L~3e0P?x2aE32|vFp>31Ip@Ws4(u!)C<#|MZV z_p(2nsj1ag3~tc)mbT#Z_G@tI+w;hR6N(V%dKr$RhzaAd+EM}jf~zJrdOR^ zXT93k!l>L*>V0K$W8=a_i`sfZ5}ChW2V4hK7F8&Y-UJAiF1B#Zfaf$kjuc}T$GwvlA5AW zo>`Ki;O^-gkfN8$4ixY8ba4#PIKOn#ZO#S*9@qS%jJqa2;D~i?KheJK5r@Panhca=(?aeAQyYO`njxgN@xNAx)o%z literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_wireless_inverter_tb.png b/jeija/textures/jeija_wireless_inverter_tb.png new file mode 100644 index 0000000000000000000000000000000000000000..d2191c5a1b0523d29b83ba594bfe4b44e08a3dc8 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5}ChW0mH(?n^)++02lL66gHf+|;}hAeVu`xhOTUBsE2$ zJhLQ2!QIn0AVn{g9Vjm2>EaloaXvXgfq9MgHuXs=;pbQIE;b7|%{GaFp?^W!!Mr_L Q2SEmSy85}Sb4q9e0A*7xssI20 literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_wireless_receiver_off.png b/jeija/textures/jeija_wireless_receiver_off.png new file mode 100644 index 0000000000000000000000000000000000000000..213fdeb40e2dcd7303690cd37afd0ae175febb98 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)9w~NH#ie;SZUcp6GeaUuobz*Y zQ}arITm}Z`qSVBa)D(sC%#sWRcTeAd6une-ptyyni(`n!`Q!uz<~7>e)F-KgpMS7@ z;YvBJOCkPSczwU}ScLMo@T#;69jV|@y2fANA}!s~Ypuk{@a0;ssQZbV+dzhUy85}S Ib4q9e0C7)0TmS$7 literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_wireless_receiver_on.png b/jeija/textures/jeija_wireless_receiver_on.png new file mode 100644 index 0000000000000000000000000000000000000000..c6519719d192474cff2acf3d999c0eb5823b54c3 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ5~NBIm5g6KJWvDWHUn|N}Tg^b5rw5fLsO!=c3falGGH1 z^30M91$R&1fE2w{cA&VWr;B5V#`)v~1?Dx{+teqigr9$~{o&#I6(`#NyWIZp(4N`v vDsv+9$%QP2a!nmynPn~>V@rD6=fS{mJAD3HUm?-|Ak#fv{an^LB{Ts5W@0@Z literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_wireless_receiver_tb_off.png b/jeija/textures/jeija_wireless_receiver_tb_off.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e08a48c445e48f763a64a6541ed678f3243666 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)9!WN3g9C;g>Odjc%#er@=ltB< z)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6^dC@$ma;uxZFJ~=^wd5!iq^+_t>=U4D9 fHVZh-Hi?0ue?i;9yggY5K?Zob`njxgN@xNAdW19B literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_wireless_receiver_tb_on.png b/jeija/textures/jeija_wireless_receiver_tb_on.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e08a48c445e48f763a64a6541ed678f3243666 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)9!WN3g9C;g>Odjc%#er@=ltB< z)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6^dC@$ma;uxZFJ~=^wd5!iq^+_t>=U4D9 fHVZh-Hi?0ue?i;9yggY5K?Zob`njxgN@xNAdW19B literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_wireless_transmitter_off.png b/jeija/textures/jeija_wireless_transmitter_off.png new file mode 100644 index 0000000000000000000000000000000000000000..7deb06fbe027868189e646ee37659b2131c7c68a GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)9w|{N-Gynln}I^InIRD+&iT2y zsd*(pE(3#eQEFmIYKlU6W=V#EyQgnJie4%^P~6JX#W6(Vd~$*U^BV1K>XTH$&rjH} zaOFH8YK)Mc^=e^`k1cZsbLK*pLjJJu#O;ic%(*!VX74&!7(}1;imEY&6o8EPboFyt I=akR{0PLDS9{>OV literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_wireless_transmitter_on.png b/jeija/textures/jeija_wireless_transmitter_on.png new file mode 100644 index 0000000000000000000000000000000000000000..fc9d7e8f89f98109813d27cd1fee35cf23980d1c GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)9!WN9fl3#HZ9pN}%#er@=ltB< z)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6^dC~ocP;uxZFJ~=^wd5!iq^+_t>=O=7< z_`kmG|9{Djtw4r`bntnGTMkhgwLi`?xVzkJSkq``CLmqz!o;v;-U3y&AMA`E^F3Yt KT-G@yGywo}2||Sc literal 0 HcmV?d00001 diff --git a/jeija/textures/jeija_wireless_transmitter_tb.png b/jeija/textures/jeija_wireless_transmitter_tb.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e08a48c445e48f763a64a6541ed678f3243666 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)9!WN3g9C;g>Odjc%#er@=ltB< z)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6^dC@$ma;uxZFJ~=^wd5!iq^+_t>=U4D9 fHVZh-Hi?0ue?i;9yggY5K?Zob`njxgN@xNAdW19B literal 0 HcmV?d00001