mirror of
				https://github.com/sys4-fr/server-nalc.git
				synced 2025-10-31 12:35:22 +01:00 
			
		
		
		
	initial commit
subgame + mods
This commit is contained in:
		
							
								
								
									
										103
									
								
								mods/WorldEdit/worldedit_infinity/init.lua
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										103
									
								
								mods/WorldEdit/worldedit_infinity/init.lua
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,103 @@ | ||||
| worldedit = worldedit or {} | ||||
| local minetest = minetest --local copy of global | ||||
|  | ||||
| local get_pointed = function(pos, nearest, distance) | ||||
| 	if distance > 100 then | ||||
| 		return false | ||||
| 	end | ||||
|  | ||||
| 	--check for collision with node | ||||
| 	local nodename = minetest.get_node(pos).name | ||||
| 	if nodename ~= "air" | ||||
| 	and nodename ~= "default:water_source" | ||||
| 	and nodename ~= "default:water_flowing" then | ||||
| 		if nodename ~= "ignore" then | ||||
| 			return nearest | ||||
| 		end | ||||
| 		return false | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local use = function(itemstack, user, pointed_thing) | ||||
| 	if pointed_thing.type == "nothing" then --pointing at nothing | ||||
| 		local placepos = worldedit.raytrace(user:getpos(), user:get_look_dir(), get_pointed) | ||||
| 		if placepos then --extended reach | ||||
| 			pointed_thing.type = "node" | ||||
| 			pointed_thing.under = nil --wip | ||||
| 			pointed_thing.above = nil --wip | ||||
| 		end | ||||
| 	end | ||||
| 	return minetest.item_place_node(itemstack, user, pointed_thing) | ||||
| end | ||||
| -- | ||||
|  | ||||
| worldedit.raytrace = function(pos, dir, callback) | ||||
| 	local base = {x=math.floor(pos.x), y=math.floor(pos.y), z=math.floor(pos.z)} | ||||
| 	local stepx, stepy, stepz = 0, 0, 0 | ||||
| 	local componentx, componenty, componentz = 0, 0, 0 | ||||
| 	local intersectx, intersecty, intersectz = 0, 0, 0 | ||||
|  | ||||
| 	if dir.x == 0 then | ||||
| 		intersectx = math.huge | ||||
| 	elseif dir.x > 0 then | ||||
| 		stepx = 1 | ||||
| 		componentx = 1 / dir.x | ||||
| 		intersectx = ((base.x - pos.x) + 1) * componentx | ||||
| 	else | ||||
| 		stepx = -1 | ||||
| 		componentx = 1 / -dir.x | ||||
| 		intersectx = (pos.x - base.x) * componentx | ||||
| 	end | ||||
| 	if dir.y == 0 then | ||||
| 		intersecty = math.huge | ||||
| 	elseif dir.y > 0 then | ||||
| 		stepy = 1 | ||||
| 		componenty = 1 / dir.y | ||||
| 		intersecty = ((base.y - pos.y) + 1) * componenty | ||||
| 	else | ||||
| 		stepy = -1 | ||||
| 		componenty = 1 / -dir.y | ||||
| 		intersecty = (pos.y - base.y) * componenty | ||||
| 	end | ||||
| 	if dir.z == 0 then | ||||
| 		intersectz = math.huge | ||||
| 	elseif dir.z > 0 then | ||||
| 		stepz = 1 | ||||
| 		componentz = 1 / dir.z | ||||
| 		intersectz = ((base.z - pos.z) + 1) * componentz | ||||
| 	else | ||||
| 		stepz = -1 | ||||
| 		componentz = 1 / -dir.z | ||||
| 		intersectz = (pos.z - base.z) * componentz | ||||
| 	end | ||||
|  | ||||
| 	local distance = 0 | ||||
| 	local nearest = {x=base.x, y=base.y, z=base.z} | ||||
| 	while true do | ||||
| 		local values = {callback(base, nearest, distance)} | ||||
| 		if #values > 0 then | ||||
| 			return unpack(values) | ||||
| 		end | ||||
|  | ||||
| 		nearest.x, nearest.y, nearest.z = base.x, base.y, base.z | ||||
| 		if intersectx < intersecty then | ||||
| 			if intersectx < intersectz then | ||||
| 				base.x = base.x + stepx | ||||
| 				distance = intersectx | ||||
| 				intersectx = intersectx + componentx | ||||
| 			else | ||||
| 				base.z = base.z + stepz | ||||
| 				distance = intersectz | ||||
| 				intersectz = intersectz + componentz | ||||
| 			end | ||||
| 		elseif intersecty < intersectz then | ||||
| 			base.y = base.y + stepy | ||||
| 			distance = intersecty | ||||
| 			intersecty = intersecty + componenty | ||||
| 		else | ||||
| 			base.z = base.z + stepz | ||||
| 			distance = intersectz | ||||
| 			intersectz = intersectz + componentz | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
		Reference in New Issue
	
	Block a user