Module:InventorySlot

From Official Gamemode 4 Wiki
Revision as of 15:04, 10 November 2018 by Kroppeb (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
-- Based on work by the MC wiki: https://minecraft.gamepedia.com/

local UISlot = {}

local Sprite = require([[Module:Sprite]]):new("inventory")

function UISlot:new(item, large)
	o = {}
	setmetatable(o, {__index = self})
	o:SetItem(item)
	o.__large = large
	return o
end

function UISlot:SetItem(item)
	if item == "" then item = nil end
	self.__sprite = item and Sprite:Item(item) --nil if item = nil else get sprite
	return self
end

function UISlot.Item(item, large, html)
	return UISlot:new(item, large):GenerateHTML(html)
end

function UISlot.Call(items, width, height, size)
	local w = width or 1
	local h = height or 1
	local grid = {}
	local large = size
	if size == nil then
		size = w == 1 and h == 1
	end
	for i = 1,h do
		grid[i] = {}
		for j = 1,w do
			grid[i][j] = items[j+(i-1)*w]
		end
	end
	return UISlot.Grid(grid, large)
end

function UISlot.Grid(items, large)
	local root = mw.html.create( "table" ):addClass("invgrid")
	for i = 1, #items do
		local row = root:tag("tr"):addClass("invrow")
		for j = 1, #items[i] do
			UISlot.Item(items[i][j], large, row)
		end
	end
	return root
end

function UISlot:GenerateHTML (html)
	local slot
	if html then
		slot = html:tag("td")
	else
		slot = mw.html.create("div")
	end

	slot:addClass( "invslot" )

	if self.__sprite then
		self.__sprite:GenerateHTML(slot)
	end
	if self.__large then
		slot:addClass( "invslot-large")
	end
	return slot
end

return UISlot