does dimensions works like this?

Post Reply
User avatar
AiTechEye
Member
Posts: 1000
Joined: Fri May 29, 2015 21:14
GitHub: AiTechEye
Location: Sweden

does dimensions works like this?

by AiTechEye » Post

https://www.youtube.com/watch?v=8bu31YreoSE

I have been wondering for a time how i could do a little dimension simulation test, this seems to work fine, but i do not have any desire to work on it

it's simply about copying and pasting blocks & objects.
Spoiler

Code: Select all

dimlayer = {}
minetest.register_tool("mod:dimlayer", {
	description = "Dim layer",
	inventory_image = "default_stick.png",
	on_place=function(itemstack, user, pointed_thing)
		local name = user:get_player_name()
		dimlayer[name] = nil
	end,
	on_use=function(itemstack, user, pointed_thing)
		local name = user:get_player_name()
		dimlayer[name] = dimlayer[name] or {layer1={nodes={},objects={}},layer2={nodes={},objects={}},layer=0}
		local p = dimlayer[name]
		local pos = user:get_pos()
		local a = 7
		if p.layer == 0 then
			p.pos = pos
			p.layer = 1
		end

		local l = p["layer"..p.layer]
		for x=p.pos.x-a,p.pos.x+a do
		for y=p.pos.y-a,p.pos.y+a do
		for z=p.pos.z-a,p.pos.z+a do
			local lpos = {x=x,y=y,z=z}
			local n = minetest.get_node(lpos)
			if n == "air" then
				table.insert(l.nodes,{p=lpos,air=true})
			else
				table.insert(l.nodes,{n=minetest.get_node(lpos),p=lpos,m=minetest.get_meta(lpos):to_table()})
			end
		end
		end
		end

		for i,ob in ipairs(minetest.get_objects_in_area(vector.add(p.pos,a),vector.subtract(p.pos,a))) do
			local en = ob:get_luaentity()
			if en and not ob:get_attach() then
				local data
				if en and en.get_staticdata then
					data = en:get_staticdata() or ""
				end
				table.insert(l.objects,{n=en.name,data=data,p=ob:get_pos()})
				ob:remove()
			end
		end

		p.layer = p.layer == 2 and 1 or 2
		local l = p["layer"..p.layer]
		for i,v in ipairs(l.nodes) do
			if v.air then
				minetest.set_node(v.p,{name="air"})
			else
				minetest.set_node(v.p,v.n)
				minetest.get_meta(v.p):from_table(v.m)
			end
		end
		for i,v in ipairs(l.objects) do
			local ob = minetest.add_entity(v.p, v.n)
			local en = ob:get_luaentity()
			if en.on_activate then
				en:on_activate(v.data,4)
			end
		end
		l.objects = {}
	end
})

Post Reply

Who is online

Users browsing this forum: No registered users and 9 guests