mirror of
				https://github.com/SmallJoker/boost_cart.git
				synced 2025-10-31 21:35:22 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			ae33bd7a68
			...
			rotationte
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 792756c003 | 
| @@ -1,4 +1,6 @@ | |||||||
|  |  | ||||||
|  | local HAVE_MESECONS_ENABLED = minetest.global_exists("mesecon") | ||||||
|  |  | ||||||
| function boost_cart:on_rail_step(entity, pos, distance) | function boost_cart:on_rail_step(entity, pos, distance) | ||||||
| 	-- Play rail sound | 	-- Play rail sound | ||||||
| 	if entity.sound_counter <= 0 then | 	if entity.sound_counter <= 0 then | ||||||
| @@ -11,20 +13,18 @@ function boost_cart:on_rail_step(entity, pos, distance) | |||||||
| 	end | 	end | ||||||
| 	entity.sound_counter = entity.sound_counter - distance | 	entity.sound_counter = entity.sound_counter - distance | ||||||
|  |  | ||||||
| 	if boost_cart.MESECONS then | 	if HAVE_MESECONS_ENABLED then | ||||||
| 		boost_cart:signal_detector_rail(pos) | 		boost_cart:signal_detector_rail(pos) | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
|  |  | ||||||
| local cart_entity = { | local cart_entity = { | ||||||
| 	initial_properties = { |  | ||||||
| 	physical = false, | 	physical = false, | ||||||
| 	collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, | 	collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, | ||||||
| 	visual = "mesh", | 	visual = "mesh", | ||||||
| 	mesh = "cart.x", | 	mesh = "cart.x", | ||||||
| 	visual_size = {x=1, y=1}, | 	visual_size = {x=1, y=1}, | ||||||
| 	textures = {"cart.png"}, | 	textures = {"cart.png"}, | ||||||
| 	}, |  | ||||||
|  |  | ||||||
| 	driver = nil, | 	driver = nil, | ||||||
| 	punched = false, -- used to re-send velocity and position | 	punched = false, -- used to re-send velocity and position | ||||||
| @@ -34,13 +34,15 @@ local cart_entity = { | |||||||
| 	old_switch = 0, | 	old_switch = 0, | ||||||
| 	sound_counter = 0, | 	sound_counter = 0, | ||||||
| 	railtype = nil, | 	railtype = nil, | ||||||
| 	attached_items = {} | 	attached_items = {}, | ||||||
|  | 	automatic_face_movement_dir = -90.0, | ||||||
|  | 	automatic_face_movement_max_rotation_per_sec = 360 * 4, | ||||||
| } | } | ||||||
|  |  | ||||||
| -- Model and textures | -- Model and textures | ||||||
| if boost_cart.MTG_CARTS then | if boost_cart.mtg_compat then | ||||||
| 	cart_entity.initial_properties.mesh = "carts_cart.b3d" | 	cart_entity.mesh = "carts_cart.b3d" | ||||||
| 	cart_entity.initial_properties.textures = {"carts_cart.png"} | 	cart_entity.textures = {"carts_cart.png"} | ||||||
| end | end | ||||||
|  |  | ||||||
| function cart_entity:on_rightclick(clicker) | function cart_entity:on_rightclick(clicker) | ||||||
| @@ -54,12 +56,6 @@ function cart_entity:on_rightclick(clicker) | |||||||
| 	elseif not self.driver then | 	elseif not self.driver then | ||||||
| 		self.driver = player_name | 		self.driver = player_name | ||||||
| 		boost_cart:manage_attachment(clicker, self.object) | 		boost_cart:manage_attachment(clicker, self.object) | ||||||
|  |  | ||||||
| 		if default.player_set_animation then |  | ||||||
| 			-- player_api(/default) does not update the animation |  | ||||||
| 			-- when the player is attached, reset to default animation |  | ||||||
| 			default.player_set_animation(clicker, "stand") |  | ||||||
| 		end |  | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
|  |  | ||||||
| @@ -75,29 +71,18 @@ function cart_entity:on_activate(staticdata, dtime_s) | |||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
| 	self.railtype = data.railtype | 	self.railtype = data.railtype | ||||||
| 	self.old_dir = data.old_dir or self.old_dir | 	if data.old_dir then | ||||||
| 	self.old_pos = data.old_pos or self.old_pos | 		self.old_dir = data.old_dir | ||||||
| 	-- Correct the position when the cart drives further after the last 'step()' |  | ||||||
| 	if self.old_pos and boost_cart:is_rail(self.old_pos, self.railtype) then |  | ||||||
| 		self.object:set_pos(self.old_pos) |  | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
|  |  | ||||||
| function cart_entity:get_staticdata() | function cart_entity:get_staticdata() | ||||||
| 	return minetest.serialize({ | 	return minetest.serialize({ | ||||||
| 		railtype = self.railtype, | 		railtype = self.railtype, | ||||||
| 		old_dir = self.old_dir, | 		old_dir = self.old_dir | ||||||
| 		old_pos = self.old_pos |  | ||||||
| 	}) | 	}) | ||||||
| end | end | ||||||
|  |  | ||||||
| -- 0.5.x and later: When the driver leaves |  | ||||||
| function cart_entity:on_detach_child(child) |  | ||||||
| 	if child and child:get_player_name() == self.driver then |  | ||||||
| 		self.driver = nil |  | ||||||
| 	end |  | ||||||
| end |  | ||||||
|  |  | ||||||
| function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) | function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) | ||||||
| 	local pos = self.object:get_pos() | 	local pos = self.object:get_pos() | ||||||
| 	local vel = self.object:get_velocity() | 	local vel = self.object:get_velocity() | ||||||
| @@ -233,12 +218,11 @@ function cart_entity:on_step(dtime) | |||||||
| 	) | 	) | ||||||
| 	local dir_changed = not vector.equals(dir, self.old_dir) | 	local dir_changed = not vector.equals(dir, self.old_dir) | ||||||
|  |  | ||||||
| 	local acc = 0 | 	local new_acc = {x=0, y=0, z=0} | ||||||
| 	if stop_wiggle or vector.equals(dir, {x=0, y=0, z=0}) then | 	if stop_wiggle or vector.equals(dir, {x=0, y=0, z=0}) then | ||||||
| 		vel = {x=0, y=0, z=0} | 		vel = {x=0, y=0, z=0} | ||||||
| 		local pos_r = vector.round(pos) | 		local pos_r = vector.round(pos) | ||||||
| 		if not boost_cart:is_rail(pos_r, self.railtype) | 		if not boost_cart:is_rail(pos_r, self.railtype) then | ||||||
| 				and self.old_pos then |  | ||||||
| 			pos = self.old_pos | 			pos = self.old_pos | ||||||
| 		elseif not stop_wiggle then | 		elseif not stop_wiggle then | ||||||
| 			pos = pos_r | 			pos = pos_r | ||||||
| @@ -250,7 +234,7 @@ function cart_entity:on_step(dtime) | |||||||
| 	else | 	else | ||||||
| 		-- Direction change detected | 		-- Direction change detected | ||||||
| 		if dir_changed then | 		if dir_changed then | ||||||
| 			vel = vector.multiply(dir, math.abs(vel.x + vel.z)) | 			vel = vector.multiply(dir, v3_len(vel)) | ||||||
| 			update.vel = true | 			update.vel = true | ||||||
| 			if dir.y ~= self.old_dir.y then | 			if dir.y ~= self.old_dir.y then | ||||||
| 				pos = vector.round(pos) | 				pos = vector.round(pos) | ||||||
| @@ -268,7 +252,7 @@ function cart_entity:on_step(dtime) | |||||||
| 		end | 		end | ||||||
|  |  | ||||||
| 		-- Calculate current cart acceleration | 		-- Calculate current cart acceleration | ||||||
| 		acc = nil | 		local acc = nil | ||||||
|  |  | ||||||
| 		local acc_meta = minetest.get_meta(pos):get_string("cart_acceleration") | 		local acc_meta = minetest.get_meta(pos):get_string("cart_acceleration") | ||||||
| 		if acc_meta == "halt" and not self.punched then | 		if acc_meta == "halt" and not self.punched then | ||||||
| @@ -287,7 +271,7 @@ function cart_entity:on_step(dtime) | |||||||
| 				acc = speed_mod * 10 | 				acc = speed_mod * 10 | ||||||
| 			end | 			end | ||||||
| 		end | 		end | ||||||
| 		if acc == nil and boost_cart.MTG_CARTS then | 		if acc == nil and boost_cart.mtg_compat then | ||||||
| 			-- MTG Cart API adaption | 			-- MTG Cart API adaption | ||||||
| 			local rail_node = minetest.get_node(vector.round(pos)) | 			local rail_node = minetest.get_node(vector.round(pos)) | ||||||
| 			local railparam = carts.railparams[rail_node.name] | 			local railparam = carts.railparams[rail_node.name] | ||||||
| @@ -310,20 +294,21 @@ function cart_entity:on_step(dtime) | |||||||
| 		else | 		else | ||||||
| 			acc = 0 | 			acc = 0 | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
|  | 		new_acc = vector.multiply(dir, acc) | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	-- Limit cart speed | 	-- Limits | ||||||
| 	local vel_len = vector.length(vel) | 	local max_vel = boost_cart.speed_max | ||||||
| 	if vel_len > boost_cart.speed_max then | 	for _,v in pairs({"x","y","z"}) do | ||||||
| 		vel = vector.multiply(vel, boost_cart.speed_max / vel_len) | 		if math.abs(vel[v]) > max_vel then | ||||||
|  | 			vel[v] = boost_cart:get_sign(vel[v]) * max_vel | ||||||
|  | 			new_acc[v] = 0 | ||||||
| 			update.vel = true | 			update.vel = true | ||||||
| 		end | 		end | ||||||
| 	if vel_len >= boost_cart.speed_max and acc > 0 then |  | ||||||
| 		acc = 0 |  | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	self.object:set_acceleration(vector.multiply(dir, acc)) | 	self.object:set_acceleration(new_acc) | ||||||
|  |  | ||||||
| 	self.old_pos = vector.round(pos) | 	self.old_pos = vector.round(pos) | ||||||
| 	local old_y_dir = self.old_dir.y | 	local old_y_dir = self.old_dir.y | ||||||
| 	if not vector.equals(dir, {x=0, y=0, z=0}) and not stop_wiggle then | 	if not vector.equals(dir, {x=0, y=0, z=0}) and not stop_wiggle then | ||||||
| @@ -358,6 +343,7 @@ function cart_entity:on_step(dtime) | |||||||
| 	-- Re-use "dir", localize self.old_dir | 	-- Re-use "dir", localize self.old_dir | ||||||
| 	dir = self.old_dir | 	dir = self.old_dir | ||||||
|  |  | ||||||
|  | 	if stop_wiggle then | ||||||
| 		local yaw = 0 | 		local yaw = 0 | ||||||
| 		if dir.x < 0 then | 		if dir.x < 0 then | ||||||
| 			yaw = 0.5 | 			yaw = 0.5 | ||||||
| @@ -367,6 +353,7 @@ function cart_entity:on_step(dtime) | |||||||
| 			yaw = 1 | 			yaw = 1 | ||||||
| 		end | 		end | ||||||
| 		self.object:set_yaw(yaw * math.pi) | 		self.object:set_yaw(yaw * math.pi) | ||||||
|  | 	end | ||||||
|  |  | ||||||
| 	local anim = {x=0, y=0} | 	local anim = {x=0, y=0} | ||||||
| 	if dir.y == -1 then | 	if dir.y == -1 then | ||||||
| @@ -378,14 +365,18 @@ function cart_entity:on_step(dtime) | |||||||
|  |  | ||||||
| 	-- Change player model rotation, depending on the Y direction | 	-- Change player model rotation, depending on the Y direction | ||||||
| 	if player and dir.y ~= old_y_dir then | 	if player and dir.y ~= old_y_dir then | ||||||
| 		local feet = {x=0, y=-4, z=0} | 		local feet = {x=0, y=0, z=0} | ||||||
| 		local eye = {x=0, y=-4, z=0} | 		local eye = {x=0, y=-4, z=0} | ||||||
|  | 		feet.y = boost_cart.old_player_model and 6 or -4 | ||||||
| 		if dir.y ~= 0 then | 		if dir.y ~= 0 then | ||||||
| 			-- TODO: Find a better way to calculate this | 			-- TODO: Find a better way to calculate this | ||||||
|  | 			if boost_cart.old_player_model then | ||||||
|  | 				feet.y = feet.y + 2 | ||||||
|  | 				feet.z = -dir.y * 6 | ||||||
|  | 			else | ||||||
| 				feet.y = feet.y + 4 | 				feet.y = feet.y + 4 | ||||||
| 				feet.z = -dir.y * 2 | 				feet.z = -dir.y * 2 | ||||||
|  | 			end | ||||||
| 			eye.z = -dir.y * 8 | 			eye.z = -dir.y * 8 | ||||||
| 		end | 		end | ||||||
| 		player:set_attach(self.object, "", feet, | 		player:set_attach(self.object, "", feet, | ||||||
| @@ -408,7 +399,7 @@ end | |||||||
| minetest.register_entity(":carts:cart", cart_entity) | minetest.register_entity(":carts:cart", cart_entity) | ||||||
|  |  | ||||||
| -- Register item to place the entity | -- Register item to place the entity | ||||||
| if not boost_cart.MTG_CARTS then | if not boost_cart.mtg_compat then | ||||||
| 	minetest.register_craftitem(":carts:cart", { | 	minetest.register_craftitem(":carts:cart", { | ||||||
| 		description = "Cart (Sneak+Click to pick up)", | 		description = "Cart (Sneak+Click to pick up)", | ||||||
| 		inventory_image = minetest.inventorycube( | 		inventory_image = minetest.inventorycube( | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								depends.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | default | ||||||
|  | mesecons? | ||||||
|  | moreores? | ||||||
|  | carts? | ||||||
							
								
								
									
										1
									
								
								description.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								description.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | This mod offers improved minecarts and a few more rail types. | ||||||
| @@ -1,71 +0,0 @@ | |||||||
| boost_cart API |  | ||||||
| ============== |  | ||||||
|  |  | ||||||
| This file provides information about the API of boost_cart for the use in |  | ||||||
| mods. The API might change slightly when the development goes on, so avoid |  | ||||||
| using internal tables or functions which are not documented here. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| Types |  | ||||||
| ----- |  | ||||||
|  |  | ||||||
| * `SwitchIgnore` -> `number/nil` |  | ||||||
| 	* Specifies which player control was pressed. This value is used to prefer |  | ||||||
| 	  straight rails instead of preferring left and right rail checks. |  | ||||||
| 		* `1`: Ignore left rail |  | ||||||
| 		* `2`: Ignore right rail |  | ||||||
| 		* `nil`: Ignore no rail |  | ||||||
|  |  | ||||||
|  |  | ||||||
| Entity movement |  | ||||||
| --------------- |  | ||||||
| These functions are grouped so that they make sense and then sorted alphabetically. |  | ||||||
|  |  | ||||||
| * `boost_cart:manage_attachment(player, obj)` |  | ||||||
| 	* Attaches or detaches the player to/from an object, depending on what is |  | ||||||
| 	  supplied to `obj`. |  | ||||||
| 	* `player`: `ObjectRef` of the player |  | ||||||
| 	* `obj`: `ObjectRef` (to attach) or `nil` (to detach) |  | ||||||
| * `boost_cart:get_sign(n)` -> `number` |  | ||||||
| 	* Returns the sign for the given number. Values: `-1`, `0`, `1` |  | ||||||
| 	* `n`: any `number` |  | ||||||
| * `boost_cart:velocity_to_dir(vel)` -> `vector` |  | ||||||
| 	* Returns the cart direction depending on `vel`. Each coordinate can have |  | ||||||
| 	  one of the `get_sign()` return values. |  | ||||||
| 	* `vel`: velocity as `vector` |  | ||||||
| * `boost_cart:boost_rail(pos, amount)` |  | ||||||
| 	* Sets the rail acceleration for the given position to `amount` and punches |  | ||||||
| 	  carts which are at the given position. |  | ||||||
| 	* `pos`: `vector`, rail position |  | ||||||
| 	* `amount`: `number`, negative to brake, positive to boost |  | ||||||
| * `boost_cart:get_rail_direction(pos, dir, ctrl, old_switch, railtype)` |  | ||||||
| 	-> `vector, SwitchIgnore` |  | ||||||
| 	* Returns the direction to where the next rail is, and which player control that |  | ||||||
| 	  should be ignored in the next call. |  | ||||||
| 	* `pos`: `vector`, position of the cart |  | ||||||
| 	* `dir`: `vector`, movement direction of the cart (see `velocity_to_dir()`) |  | ||||||
| 	* `ctrl`: Player controls table or `nil` (no player) |  | ||||||
| 	* `old_switch`: `SwitchIgnore` |  | ||||||
| 	* `railtype`: (optional) `number`, gets passed indirectly to `is_rail()` |  | ||||||
|  |  | ||||||
|  |  | ||||||
| Rail helper functions |  | ||||||
| --------------------- |  | ||||||
| * `boost_cart:get_rail_groups(groups)` -> `table` |  | ||||||
| 	* Returns a group table with preset values for a common rail node |  | ||||||
| 	* `groups`: (optional) `table`, additional groups append (or overwrite) |  | ||||||
| 	* Hint: To register an incompatible rail type, set the group |  | ||||||
| 	  `connect_to_raillike` to the value returned by |  | ||||||
| 	  `minetest.raillike_group(new_rail_type)` |  | ||||||
| * `boost_cart:is_rail(pos, [railtype])` -> `boolean` |  | ||||||
| 	* Returns whether the node at `pos` is a rail. When `railtype` is specified, |  | ||||||
| 	  `true` is only returned when the node is in the same rail group. |  | ||||||
| 	* `pos`: `vector` of the node to check |  | ||||||
| 	* `railtype`: (optional) `number`, rail group number |  | ||||||
| * `boost_cart:register_rail(name, def)` |  | ||||||
| 	* Registers a new rail with preset node definition defaults as fallback |  | ||||||
| 	* `name`: `string`, node name of the new rail |  | ||||||
| 	* `def`: Node definition table, containing at least the following keys: |  | ||||||
| 		* `description` |  | ||||||
| 		* `groups` |  | ||||||
| 		* `tiles` |  | ||||||
| @@ -10,17 +10,16 @@ function boost_cart:manage_attachment(player, obj) | |||||||
| 	if not player then | 	if not player then | ||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
| 	local wants_attach = obj ~= nil | 	local status = obj ~= nil | ||||||
| 	local attached = player:get_attach() ~= nil |  | ||||||
|  |  | ||||||
| 	local player_name = player:get_player_name() | 	local player_name = player:get_player_name() | ||||||
| 	boost_cart.player_attached[player_name] = attached or wants_attach | 	if default.player_attached[player_name] == status then | ||||||
| 	if attached == wants_attach then |  | ||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
|  | 	default.player_attached[player_name] = status | ||||||
|  |  | ||||||
| 	if wants_attach then | 	if status then | ||||||
| 		player:set_attach(obj, "", {x=0, y=-4, z=0}, {x=0, y=0, z=0}) | 		local y_pos = self.old_player_model and 6 or -4 | ||||||
|  | 		player:set_attach(obj, "", {x=0, y=y_pos, z=0}, {x=0, y=0, z=0}) | ||||||
| 		player:set_eye_offset({x=0, y=-4, z=0},{x=0, y=-4, z=0}) | 		player:set_eye_offset({x=0, y=-4, z=0},{x=0, y=-4, z=0}) | ||||||
| 	else | 	else | ||||||
| 		player:set_detach() | 		player:set_detach() | ||||||
| @@ -105,16 +104,6 @@ function boost_cart:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) | |||||||
| 		right.z = -dir.x | 		right.z = -dir.x | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	local straight_priority = ctrl and dir.y ~= 0 |  | ||||||
|  |  | ||||||
| 	-- Normal, to disallow rail switching up- & downhill |  | ||||||
| 	if straight_priority then |  | ||||||
| 		cur = self:check_front_up_down(pos, dir, true, railtype) |  | ||||||
| 		if cur then |  | ||||||
| 			return cur |  | ||||||
| 		end |  | ||||||
| 	end |  | ||||||
|  |  | ||||||
| 	if ctrl then | 	if ctrl then | ||||||
| 		if old_switch == 1 then | 		if old_switch == 1 then | ||||||
| 			left_check = false | 			left_check = false | ||||||
| @@ -138,12 +127,10 @@ function boost_cart:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) | |||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	-- Normal | 	-- Normal | ||||||
| 	if not straight_priority then |  | ||||||
| 	cur = self:check_front_up_down(pos, dir, true, railtype) | 	cur = self:check_front_up_down(pos, dir, true, railtype) | ||||||
| 	if cur then | 	if cur then | ||||||
| 		return cur | 		return cur | ||||||
| 	end | 	end | ||||||
| 	end |  | ||||||
|  |  | ||||||
| 	-- Left, if not already checked | 	-- Left, if not already checked | ||||||
| 	if left_check then | 	if left_check then | ||||||
| @@ -221,9 +208,6 @@ function boost_cart:boost_rail(pos, amount) | |||||||
| end | end | ||||||
|  |  | ||||||
| function boost_cart:register_rail(name, def_overwrite) | function boost_cart:register_rail(name, def_overwrite) | ||||||
| 	local sound_func = default.node_sound_metal_defaults |  | ||||||
| 		or default.node_sound_defaults |  | ||||||
|  |  | ||||||
| 	local def = { | 	local def = { | ||||||
| 		drawtype = "raillike", | 		drawtype = "raillike", | ||||||
| 		paramtype = "light", | 		paramtype = "light", | ||||||
| @@ -233,8 +217,7 @@ function boost_cart:register_rail(name, def_overwrite) | |||||||
| 		selection_box = { | 		selection_box = { | ||||||
| 			type = "fixed", | 			type = "fixed", | ||||||
| 			fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, | 			fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, | ||||||
| 		}, | 		} | ||||||
| 		sounds = sound_func() |  | ||||||
| 	} | 	} | ||||||
| 	for k, v in pairs(def_overwrite) do | 	for k, v in pairs(def_overwrite) do | ||||||
| 		def[k] = v | 		def[k] = v | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								init.lua
									
									
									
									
									
								
							| @@ -1,15 +1,12 @@ | |||||||
|  |  | ||||||
| if not minetest.features.object_use_texture_alpha then |  | ||||||
| 	error("[boost_cart] Your Minetest version is no longer supported." |  | ||||||
| 		.. " (Version < 5.0.0)") |  | ||||||
| end |  | ||||||
|  |  | ||||||
| boost_cart = {} | boost_cart = {} | ||||||
| boost_cart.modpath = minetest.get_modpath("boost_cart") | boost_cart.modpath = minetest.get_modpath("boost_cart") | ||||||
| boost_cart.MESECONS = minetest.global_exists("mesecon") |  | ||||||
| boost_cart.MTG_CARTS = minetest.global_exists("carts") and carts.pathfinder |  | ||||||
| boost_cart.PLAYER_API = minetest.global_exists("player_api") | if not minetest.settings then | ||||||
| boost_cart.player_attached = {} | 	error("[boost_cart] Your Minetest version is no longer supported." | ||||||
|  | 		.. " (Version <= 0.4.15)") | ||||||
|  | end | ||||||
|  |  | ||||||
| local function getNum(setting) | local function getNum(setting) | ||||||
| 	return tonumber(minetest.settings:get(setting)) | 	return tonumber(minetest.settings:get(setting)) | ||||||
| @@ -23,22 +20,27 @@ boost_cart.punch_speed_max = getNum("boost_cart.punch_speed_max") or 7 | |||||||
| boost_cart.path_distance_max = 3 | boost_cart.path_distance_max = 3 | ||||||
|  |  | ||||||
|  |  | ||||||
| if boost_cart.PLAYER_API then | -- Support for non-default games | ||||||
| 	-- This is a table reference! | if not default.player_attached then | ||||||
| 	boost_cart.player_attached = player_api.player_attached | 	default.player_attached = {} | ||||||
| end | end | ||||||
|  |  | ||||||
|  | minetest.after(1, function() | ||||||
|  | 	boost_cart.old_player_model = type(player_api) ~= "table" | ||||||
|  | end) | ||||||
|  |  | ||||||
| dofile(boost_cart.modpath.."/functions.lua") | dofile(boost_cart.modpath.."/functions.lua") | ||||||
| dofile(boost_cart.modpath.."/rails.lua") | dofile(boost_cart.modpath.."/rails.lua") | ||||||
|  |  | ||||||
| if boost_cart.MESECONS then | if minetest.global_exists("mesecon") then | ||||||
| 	dofile(boost_cart.modpath.."/detector.lua") | 	dofile(boost_cart.modpath.."/detector.lua") | ||||||
| --else | --else | ||||||
| --	minetest.register_alias("carts:powerrail", "boost_cart:detectorrail") | --	minetest.register_alias("carts:powerrail", "boost_cart:detectorrail") | ||||||
| --	minetest.register_alias("carts:powerrail", "boost_cart:detectorrail_on") | --	minetest.register_alias("carts:powerrail", "boost_cart:detectorrail_on") | ||||||
| end | end | ||||||
|  |  | ||||||
| if boost_cart.MTG_CARTS then | boost_cart.mtg_compat = minetest.global_exists("carts") and carts.pathfinder | ||||||
|  | if boost_cart.mtg_compat then | ||||||
| 	minetest.log("action", "[boost_cart] Overwriting definitions of similar carts mod") | 	minetest.log("action", "[boost_cart] Overwriting definitions of similar carts mod") | ||||||
| end | end | ||||||
| dofile(boost_cart.modpath.."/cart_entity.lua") | dofile(boost_cart.modpath.."/cart_entity.lua") | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								mod.conf
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								mod.conf
									
									
									
									
									
								
							| @@ -1,7 +1 @@ | |||||||
| name = boost_cart | name = boost_cart | ||||||
| description = """ |  | ||||||
| Boost Cart |  | ||||||
| The mod that add a cart and new kinds of rails to your world. |  | ||||||
| """ |  | ||||||
| depends = default |  | ||||||
| optional_depends = mesecons, moreores, carts, player_api |  | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								rails.lua
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								rails.lua
									
									
									
									
									
								
							| @@ -16,21 +16,9 @@ boost_cart:register_rail(":"..regular_rail_itemname, { | |||||||
| }) | }) | ||||||
|  |  | ||||||
| -- Moreores' copper rail | -- Moreores' copper rail | ||||||
| local copperrail_registered = false |  | ||||||
| if minetest.get_modpath("moreores") then | if minetest.get_modpath("moreores") then | ||||||
| 	minetest.register_alias("carts:copperrail", "moreores:copper_rail") | 	minetest.register_alias("carts:copperrail", "moreores:copper_rail") | ||||||
|  | else | ||||||
| 	local raildef = minetest.registered_nodes["moreores:copper_rail"] |  | ||||||
| 	if raildef and minetest.raillike_group then |  | ||||||
| 		-- Ensure that this rail uses the same connect_to_raillike |  | ||||||
| 		raildef.groups.connect_to_raillike = minetest.raillike_group("rail") |  | ||||||
| 		minetest.override_item("moreores:copper_rail", { |  | ||||||
| 			groups = raildef.groups |  | ||||||
| 		}) |  | ||||||
| 		copperrail_registered = true |  | ||||||
| 	end |  | ||||||
| end |  | ||||||
| if not copperrail_registered then |  | ||||||
| 	boost_cart:register_rail(":carts:copperrail", { | 	boost_cart:register_rail(":carts:copperrail", { | ||||||
| 		description = "Copper rail", | 		description = "Copper rail", | ||||||
| 		tiles = { | 		tiles = { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user