forked from mtcontrib/nether-pack
		
	Fixed duplicate portals issue
This commit is contained in:
		@@ -279,6 +279,8 @@ end
 | 
			
		||||
HADES_THRONE_ENDPOS_ABS = {x=htx, y=hty, z=htz}
 | 
			
		||||
local nether = {}
 | 
			
		||||
 | 
			
		||||
-- == General Utility Functions ==
 | 
			
		||||
 | 
			
		||||
-- Check if file exists
 | 
			
		||||
function nether:fileexists(file)
 | 
			
		||||
	file = io.open(file, "r")
 | 
			
		||||
@@ -301,6 +303,18 @@ function nether:touch(file)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Print a message
 | 
			
		||||
function nether:printm(message)
 | 
			
		||||
	print("[Nether] " .. message)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Print an error message
 | 
			
		||||
function nether:printerror(message)
 | 
			
		||||
	nether:printm("Error! " .. message)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- == Nether related stuff ==
 | 
			
		||||
 | 
			
		||||
-- Find if a position is inside the Nether
 | 
			
		||||
function nether:inside_nether(pos)
 | 
			
		||||
	if pos.y >= NETHER_BOTTOM and pos.y <= NETHER_DEPTH then
 | 
			
		||||
@@ -505,18 +519,20 @@ NETHER_PORTALS_FROM_NETHER = {}
 | 
			
		||||
NETHER_PORTALS_TO_NETHER_FILE = minetest.get_worldpath() .. "/portalstonether.txt"
 | 
			
		||||
NETHER_PORTALS_FROM_NETHER_FILE = minetest.get_worldpath() .. "/portalsfromnether.txt"
 | 
			
		||||
 | 
			
		||||
-- Count the number of times something appears in a table
 | 
			
		||||
-- Count the number of times a position appears in a table
 | 
			
		||||
function table_count(tt, item)
 | 
			
		||||
	local count
 | 
			
		||||
	count = 0
 | 
			
		||||
	for ii,xx in pairs(tt) do
 | 
			
		||||
		if item == xx then count = count + 1 end
 | 
			
		||||
		if (item.x == xx.x) and (item.y == xx.y) and (item.z == xx.z) then
 | 
			
		||||
			count = count + 1
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	return count
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- Remove duplicates from table
 | 
			
		||||
-- Remove duplicate positions from table
 | 
			
		||||
function table_unique(tt)
 | 
			
		||||
	local newtable
 | 
			
		||||
	newtable = {}
 | 
			
		||||
@@ -553,15 +569,22 @@ function nether:save_portal_to_nether(pos)
 | 
			
		||||
	local file = io.open(NETHER_PORTALS_TO_NETHER_FILE, "a")
 | 
			
		||||
	if file ~= nil then
 | 
			
		||||
		file:write("x" .. pos.x .. "\ny" .. pos.y .. "\nz" .. pos.z .. "\np", "\n")
 | 
			
		||||
		file:close()
 | 
			
		||||
	else
 | 
			
		||||
		nether:printerror("Cannot write portal to file!")
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Save all nether portals
 | 
			
		||||
function nether:save_portals_to_nether()
 | 
			
		||||
	local array2 = NETHER_PORTALS_TO_NETHER
 | 
			
		||||
	NETHER_PORTALS_TO_NETHER = table_unique(array2)
 | 
			
		||||
	file = io.open(NETHER_PORTALS_TO_NETHER_FILE, "w")
 | 
			
		||||
	if file ~= nil then
 | 
			
		||||
		file:write("")
 | 
			
		||||
		file:close()
 | 
			
		||||
	else
 | 
			
		||||
		nether:printerror("Cannot create portal file!")
 | 
			
		||||
	end
 | 
			
		||||
	for i,v in ipairs(NETHER_PORTALS_TO_NETHER) do
 | 
			
		||||
		nether:save_portal_to_nether(v)
 | 
			
		||||
@@ -573,14 +596,23 @@ function nether:save_portal_from_nether(pos)
 | 
			
		||||
	local file = io.open(NETHER_PORTALS_FROM_NETHER_FILE, "a")
 | 
			
		||||
	if file ~= nil then
 | 
			
		||||
		file:write("x" .. pos.x .. "\ny" .. pos.y .. "\nz" .. pos.z .. "\np", "\n")
 | 
			
		||||
		file:close()
 | 
			
		||||
	else
 | 
			
		||||
		nether:printerror("Cannot write portal to file!")
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Save all portals from nether
 | 
			
		||||
function nether:save_portals_from_nether()
 | 
			
		||||
	local array2 = NETHER_PORTALS_FROM_NETHER
 | 
			
		||||
	NETHER_PORTALS_FROM_NETHER = table_unique(array2)
 | 
			
		||||
	file = io.open(NETHER_PORTALS_FROM_NETHER_FILE, "w")
 | 
			
		||||
	if file ~= nil then
 | 
			
		||||
		file:write("")
 | 
			
		||||
		file:close()
 | 
			
		||||
	else
 | 
			
		||||
		nether:printerror("Cannot create portal file!")
 | 
			
		||||
	end
 | 
			
		||||
	for i,v in ipairs(NETHER_PORTALS_FROM_NETHER) do
 | 
			
		||||
		nether:save_portal_from_nether(v)
 | 
			
		||||
	end
 | 
			
		||||
@@ -610,6 +642,8 @@ function nether:read_portals_to_nether()
 | 
			
		||||
		if file ~= nil then
 | 
			
		||||
			file:write("")
 | 
			
		||||
			file:close()
 | 
			
		||||
		else
 | 
			
		||||
			nether:printerror("Cannot create portal file!")
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	NETHER_PORTALS_TO_NETHER = table_unique(array2)
 | 
			
		||||
@@ -639,6 +673,8 @@ function nether:read_portals_from_nether()
 | 
			
		||||
		if file ~= nil then
 | 
			
		||||
			file:write("")
 | 
			
		||||
			file:close()
 | 
			
		||||
		else
 | 
			
		||||
			nether:printerror("Cannot create portal file!")
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	NETHER_PORTALS_FROM_NETHER = table_unique(array2)
 | 
			
		||||
 
 | 
			
		||||
@@ -279,6 +279,8 @@ end
 | 
			
		||||
HADES_THRONE_ENDPOS_ABS = {x=htx, y=hty, z=htz}
 | 
			
		||||
local nether = {}
 | 
			
		||||
 | 
			
		||||
-- == General Utility Functions ==
 | 
			
		||||
 | 
			
		||||
-- Check if file exists
 | 
			
		||||
function nether:fileexists(file)
 | 
			
		||||
	file = io.open(file, "r")
 | 
			
		||||
@@ -301,6 +303,18 @@ function nether:touch(file)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Print a message
 | 
			
		||||
function nether:printm(message)
 | 
			
		||||
	print("[Nether] " .. message)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Print an error message
 | 
			
		||||
function nether:printerror(message)
 | 
			
		||||
	nether:printm("Error! " .. message)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- == Nether related stuff ==
 | 
			
		||||
 | 
			
		||||
-- Find if a position is inside the Nether
 | 
			
		||||
function nether:inside_nether(pos)
 | 
			
		||||
	if pos.y >= NETHER_BOTTOM and pos.y <= NETHER_DEPTH then
 | 
			
		||||
@@ -505,12 +519,14 @@ NETHER_PORTALS_FROM_NETHER = {}
 | 
			
		||||
NETHER_PORTALS_TO_NETHER_FILE = minetest.get_worldpath() .. "/portalstonether.txt"
 | 
			
		||||
NETHER_PORTALS_FROM_NETHER_FILE = minetest.get_worldpath() .. "/portalsfromnether.txt"
 | 
			
		||||
 | 
			
		||||
-- Count the number of times something appears in a table
 | 
			
		||||
-- Count the number of times a position appears in a table
 | 
			
		||||
function table_count(tt, item)
 | 
			
		||||
	local count
 | 
			
		||||
	count = 0
 | 
			
		||||
	for ii,xx in pairs(tt) do
 | 
			
		||||
		if item == xx then count = count + 1 end
 | 
			
		||||
		if (item.x == xx.x) and (item.y == xx.y) and (item.z == xx.z) then
 | 
			
		||||
			count = count + 1
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	return count
 | 
			
		||||
end
 | 
			
		||||
@@ -553,15 +569,22 @@ function nether:save_portal_to_nether(pos)
 | 
			
		||||
	local file = io.open(NETHER_PORTALS_TO_NETHER_FILE, "a")
 | 
			
		||||
	if file ~= nil then
 | 
			
		||||
		file:write("x" .. pos.x .. "\ny" .. pos.y .. "\nz" .. pos.z .. "\np", "\n")
 | 
			
		||||
		file:close()
 | 
			
		||||
	else
 | 
			
		||||
		nether:printerror("Cannot write portal to file!")
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Save all nether portals
 | 
			
		||||
function nether:save_portals_to_nether()
 | 
			
		||||
	local array2 = NETHER_PORTALS_TO_NETHER
 | 
			
		||||
	NETHER_PORTALS_TO_NETHER = table_unique(array2)
 | 
			
		||||
	file = io.open(NETHER_PORTALS_TO_NETHER_FILE, "w")
 | 
			
		||||
	if file ~= nil then
 | 
			
		||||
		file:write("")
 | 
			
		||||
		file:close()
 | 
			
		||||
	else
 | 
			
		||||
		nether:printerror("Cannot create portal file!")
 | 
			
		||||
	end
 | 
			
		||||
	for i,v in ipairs(NETHER_PORTALS_TO_NETHER) do
 | 
			
		||||
		nether:save_portal_to_nether(v)
 | 
			
		||||
@@ -573,14 +596,23 @@ function nether:save_portal_from_nether(pos)
 | 
			
		||||
	local file = io.open(NETHER_PORTALS_FROM_NETHER_FILE, "a")
 | 
			
		||||
	if file ~= nil then
 | 
			
		||||
		file:write("x" .. pos.x .. "\ny" .. pos.y .. "\nz" .. pos.z .. "\np", "\n")
 | 
			
		||||
		file:close()
 | 
			
		||||
	else
 | 
			
		||||
		nether:printerror("Cannot write portal to file!")
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Save all portals from nether
 | 
			
		||||
function nether:save_portals_from_nether()
 | 
			
		||||
	local array2 = NETHER_PORTALS_FROM_NETHER
 | 
			
		||||
	NETHER_PORTALS_FROM_NETHER = table_unique(array2)
 | 
			
		||||
	file = io.open(NETHER_PORTALS_FROM_NETHER_FILE, "w")
 | 
			
		||||
	if file ~= nil then
 | 
			
		||||
		file:write("")
 | 
			
		||||
		file:close()
 | 
			
		||||
	else
 | 
			
		||||
		nether:printerror("Cannot create portal file!")
 | 
			
		||||
	end
 | 
			
		||||
	for i,v in ipairs(NETHER_PORTALS_FROM_NETHER) do
 | 
			
		||||
		nether:save_portal_from_nether(v)
 | 
			
		||||
	end
 | 
			
		||||
@@ -610,6 +642,8 @@ function nether:read_portals_to_nether()
 | 
			
		||||
		if file ~= nil then
 | 
			
		||||
			file:write("")
 | 
			
		||||
			file:close()
 | 
			
		||||
		else
 | 
			
		||||
			nether:printerror("Cannot create portal file!")
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	NETHER_PORTALS_TO_NETHER = table_unique(array2)
 | 
			
		||||
@@ -639,6 +673,8 @@ function nether:read_portals_from_nether()
 | 
			
		||||
		if file ~= nil then
 | 
			
		||||
			file:write("")
 | 
			
		||||
			file:close()
 | 
			
		||||
		else
 | 
			
		||||
			nether:printerror("Cannot create portal file!")
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	NETHER_PORTALS_FROM_NETHER = table_unique(array2)
 | 
			
		||||
@@ -704,6 +740,7 @@ minetest.register_abm({
 | 
			
		||||
	action = function(pos, node, active_object_count, active_object_count_wider)
 | 
			
		||||
		local nodemeta = minetest.env:get_meta(pos)
 | 
			
		||||
		if nodemeta:get_string("generatingportal") == "" or nodemeta:get_string("generatingportal") == nil then
 | 
			
		||||
			nodemeta:set_string("generatingportal", "true")
 | 
			
		||||
			for i,v in ipairs(NETHER_PORTAL) do
 | 
			
		||||
				v.pos.x = v.pos.x + pos.x
 | 
			
		||||
				v.pos.y = v.pos.y + pos.y
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user