26 local function data_injection(pos,data)
28 pool[minetest.hash_node_position(pos)] = true
30 pool[minetest.hash_node_position(pos)] = nil
35 local function create_axis(pos)
36 local possible_dirs = {}
37 for _,dir in pairs(dirs) do
38 local pos2 = vector.add(pos,dir)
39 if pool[minetest.hash_node_position(pos2)] then
40 table.insert(possible_dirs,dir)
50 minecart.on_step = function(self,dtime)
51 local pos = vector.round(self.object:get_pos())
52 if not self.axis_lock then
53 local possible_dirs = create_axis(pos)
54 for _,dir in pairs(possible_dirs) do
58 elseif dir.z ~= 0 then
68 minecart.on_rightclick = function(self,clicker)
72 minecart.on_activate = function(self,staticdata, dtime_s)
73 self.object:set_armor_groups({immortal=1})
74 if string.sub(staticdata, 1, string.len("return")) ~= "return" then
77 local data = minetest.deserialize(staticdata)
78 if type(data) ~= "table" then
84 minecart.get_staticdata = function(self)
85 return minetest.serialize({
91 minecart.initial_properties = {
92 physical = false, -- otherwise going uphill breaks
93 collisionbox = {-0.4, -0.5, -0.4, 0.4, 0.45, 0.4},--{-0.5, -0.4, -0.5, 0.5, 0.25, 0.5},
96 visual_size = {x=1, y=1},
97 textures = {"minecart.png"},
101 minecart.on_punch = function(self,puncher, time_from_last_punch, tool_capabilities, dir, damage)
102 --local obj = minetest.add_item(self.object:getpos(), "minecart:minecart")
103 --self.object:remove()
108 minetest.register_entity("minecart:minecart", minecart)
121 minetest.register_craftitem("minecart:minecart", {
122 description = "Minecart",
123 inventory_image = "minecartitem.png",
124 wield_image = "minecartitem.png",
125 on_place = function(itemstack, placer, pointed_thing)
126 if not pointed_thing.type == "node" then
130 local sneak = placer:get_player_control().sneak
131 local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
132 if not sneak and noddef.on_rightclick then
133 minetest.item_place(itemstack, placer, pointed_thing)
137 if minetest.get_item_group(minetest.get_node(pointed_thing.under).name, "rail")>0 then
138 minetest.add_entity(pointed_thing.under, "minecart:minecart")
143 itemstack:take_item()
149 minetest.register_craft({
150 output = "minecart:minecart",
152 {"main:iron", "", "main:iron"},
153 {"main:iron", "main:iron", "main:iron"},
161 minetest.register_node("minecart:rail",{
162 description = "Rail",
163 wield_image = "rail.png",
165 "rail.png", "railcurve.png",
166 "railt.png", "railcross.png"
168 drawtype = "raillike",
170 sunlight_propagates = true,
171 is_ground_content = false,
173 node_placement_prediction = "",
176 fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
178 sounds = main.stoneSound(),
179 after_place_node = function(pos)
180 data_injection(pos,true)
182 after_destruct = function(pos)
185 groups={stone=1,wood=1,rail=1,attached_node=1},
189 minetest.register_lbm({
190 name = "minecart:rail",
191 nodenames = {"minecart:rail"},
192 run_at_every_load = true,
193 action = function(pos)
194 data_injection(pos,true)
195 print("buildin dat cash")
199 minetest.register_craft({
200 output = "minecart:rail 32",
202 {"main:iron","","main:iron"},
203 {"main:iron","main:stick","main:iron"},
204 {"main:iron","","main:iron"}