mirror of
				https://github.com/mt-mods/homedecor_modpack.git
				synced 2025-10-31 23:45:27 +01:00 
			
		
		
		
	Add player_monoids support (#80)
				
					
				
			* Add `player_monoids` support (*sometimes* broken for whatever reason, see xkcd#1739) * .
This commit is contained in:
		| @@ -41,4 +41,5 @@ read_globals = { | |||||||
|     "doors", |     "doors", | ||||||
|     "i3", |     "i3", | ||||||
|     "xcompat", |     "xcompat", | ||||||
|  |     "player_monoids" | ||||||
| } | } | ||||||
| @@ -3,6 +3,7 @@ | |||||||
|  |  | ||||||
| local S = minetest.get_translator("homedecor_seating") | local S = minetest.get_translator("homedecor_seating") | ||||||
| local modpath = minetest.get_modpath("homedecor_seating") | local modpath = minetest.get_modpath("homedecor_seating") | ||||||
|  | local has_player_monoids = minetest.get_modpath("player_monoids") | ||||||
|  |  | ||||||
| lrfurn = {} | lrfurn = {} | ||||||
|  |  | ||||||
| @@ -85,7 +86,8 @@ function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) | |||||||
| 		return itemstack | 		return itemstack | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	if physics_cache[clicker:get_player_name()] then | 	local name = clicker:get_player_name() | ||||||
|  | 	if physics_cache[name] then --already sitting | ||||||
| 		lrfurn.stand(clicker) | 		lrfurn.stand(clicker) | ||||||
| 		return itemstack | 		return itemstack | ||||||
| 	end | 	end | ||||||
| @@ -123,28 +125,48 @@ function lrfurn.sit(pos, node, clicker, itemstack, pointed_thing, seats) | |||||||
| 		if not pstatus then sit_pos = spos end | 		if not pstatus then sit_pos = spos end | ||||||
| 	end | 	end | ||||||
| 	if not sit_pos then | 	if not sit_pos then | ||||||
| 		minetest.chat_send_player(clicker:get_player_name(), "sorry, this seat is currently occupied") | 		minetest.chat_send_player(name, "sorry, this seat is currently occupied") | ||||||
| 		return itemstack | 		return itemstack | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	--seat the player | 	--seat the player | ||||||
| 	clicker:set_pos(sit_pos) | 	clicker:set_pos(sit_pos) | ||||||
|  |  | ||||||
| 	xcompat.player.player_attached[clicker:get_player_name()] = true | 	xcompat.player.player_attached[name] = true | ||||||
|     xcompat.player.set_animation(clicker, "sit", 0) |     xcompat.player.set_animation(clicker, "sit", 0) | ||||||
| 	physics_cache[clicker:get_player_name()] = table.copy(clicker:get_physics_override()) | 	if has_player_monoids then | ||||||
| 	clicker:set_physics_override({speed = 0, jump = 0, gravity = 0}) | 		physics_cache[name] = true | ||||||
|  | 		player_monoids.speed:add_change(clicker, 0, "homedecor_seating:sit") | ||||||
|  | 		player_monoids.jump:add_change(clicker, 0, "homedecor_seating:sit") | ||||||
|  | 		player_monoids.gravity:add_change(clicker, 0, "homedecor_seating:sit") | ||||||
|  | 	else | ||||||
|  | 		physics_cache[name] = table.copy(clicker:get_physics_override()) | ||||||
|  | 		clicker:set_physics_override({speed = 0, jump = 0, gravity = 0}) | ||||||
|  | 	end | ||||||
|  |  | ||||||
| 	return itemstack | 	return itemstack | ||||||
| end | end | ||||||
|  |  | ||||||
| function lrfurn.stand(clicker) | function lrfurn.stand(clicker) | ||||||
| 	xcompat.player.player_attached[clicker:get_player_name()] = false | 	local name = clicker:get_player_name() | ||||||
| 	if physics_cache[clicker:get_player_name()] then | 	xcompat.player.player_attached[name] = false | ||||||
| 		clicker:set_physics_override(physics_cache[clicker:get_player_name()]) | 	if physics_cache[name] then | ||||||
| 		physics_cache[clicker:get_player_name()] = nil | 		if has_player_monoids then | ||||||
|  | 			player_monoids.speed:del_change(clicker, "homedecor_seating:sit") | ||||||
|  | 			player_monoids.jump:del_change(clicker, "homedecor_seating:sit") | ||||||
|  | 			player_monoids.gravity:del_change(clicker, "homedecor_seating:sit") | ||||||
|  | 		else | ||||||
|  | 			clicker:set_physics_override(physics_cache[name]) | ||||||
|  | 		end | ||||||
|  | 		physics_cache[name] = nil | ||||||
| 	else --in case this is called and the cache is empty | 	else --in case this is called and the cache is empty | ||||||
| 		clicker:set_physics_override({speed = 1, jump = 1, gravity = 1}) | 		if has_player_monoids then | ||||||
|  | 			player_monoids.speed:del_change(clicker, "homedecor_seating:sit") | ||||||
|  | 			player_monoids.jump:del_change(clicker, "homedecor_seating:sit") | ||||||
|  | 			player_monoids.gravity:del_change(clicker, "homedecor_seating:sit") | ||||||
|  | 		else | ||||||
|  | 			clicker:set_physics_override({speed = 1, jump = 1, gravity = 1}) | ||||||
|  | 		end | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| name = homedecor_seating | name = homedecor_seating | ||||||
| description = Homedecor mod: seating | description = Homedecor mod: seating | ||||||
| depends = homedecor_common | depends = homedecor_common | ||||||
| optional_depends = screwdriver, wool, default, unifieddyes, basic_materials | optional_depends = screwdriver, wool, default, unifieddyes, basic_materials, player_monoids | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user