localp={}
localdata={
blocks={},
rowSize=1,
rowspersection=10,
none="-",
states={},
theend="firefly_bush",
ver=4780,
cb="?",
hdwgh={}--How did we get here?
}
localfunctioncord2(c,m)
ifc==1thenreturn"(1, 70, 1)"end
localext=''
c=c-1
m=m-1
localx=2*math.ceil(c/m)-1
localz=2*(c%m)+1
ifc%m==0then
z=2*m+1
ext="\n("..tostring(x+2)..", 70, 1)"
end
return"("..tostring(x)..", 70, "..tostring(z)..")"..ext
end
localfunctioncord(r,c)
localx=2*r-1
localz=2*c-1
return"("..tostring(x)..", 70, "..tostring(z)..")"
end
localfunctionextstad(str)
ifstr==nilortostring(str)==data.nonethen
return""
end
return" ("..str..")"
end
localfunctionsplit(str,sep)
localt={}
ifnotstrthenreturntend
localliteral_sep=sep:gsub("([%^%$%(%)%%%.%[%]%*%+%-%?])","%%%1")
forvinmw.text.gsplit(str,"%s*"..literal_sep.."%s*")do
table.insert(t,v)
end
returnt
end
localfunctioncartesian(states)
localresult={{}}
for_,stateinipairs(states)do
localnew={}
for_,comboinipairs(result)do
for_,vinipairs(state.values)do
localc={}
fori,xinipairs(combo)do
c[i]=x
end
table.insert(c,{state.name,v})
table.insert(new,c)
end
end
result=new
end
returnresult
end
functionp.comboString(combo,frame)
ifnotcomboor#combo==0then
returndata.none
end
localt={}
localext=""
localhdwgh=data.hdwgh
for_,vinipairs(combo)do
ifv[1]=="item"andtonumber(v[2])then
localitem_num=tonumber(v[2])+1
localitem_raw=hdwgh[item_num]or"-"
item_raw=split(item_raw,"?")
localitem=string.gsub(item_raw[1],"%%3F","?")
localitem_link=item_raw[2]oritem
localitem_frame=item_raw[3]oritem
ifitem_link=="-"oritem_link==""thenitem_link=itemend
ifnot(item=="-")then
ext=" ("..
frame:expandTemplate{
title="InvLink",
args={item,link=item_link,id=item_frame}}
..")"
end
end
table.insert(t,v[1].."="..v[2])
end
returntable.concat(t,", ")..ext
end
functionp.start(frame)
localargs=frame.argsorframe:getParent().args
data.blocks={}
data.rowSize=tonumber(args.row)or1
data.rowspersection=tonumber(args.section)or10
data.none=args.noneor'-'
data.ver=tonumber(args.ver)or478
return""
end
functionp.block(frame)
localargs=frame.argsorframe:getParent().args
localvermin=tonumber(args.vermin)or0
localvermax=tonumber(args.vermax)or-1
localver=data.ver
ifver<verminor(ver>vermaxandvermax>0)then
return""
end
localaux=split(args[1],"?")
localdatast=data.states
localname=string.gsub(aux[1],"%%3F","?")
localid=args[2]
ifnotidorid==""orid=='-'orid=='_'orid==" "then
id=string.gsub(string.lower(name)," ","_")
end
locallink=aux[2]oraux[1]
localsprit=aux[3]oraux[1]
localnote=args.note
localisend=args.isend
ifnotnotethen
note=''
end
ifisendthen
data.theend=id
end
localstates={}
locali=3
whileargs[i]do
localstateName=args[i]
localvalues=split(args[i+1],",")
ifvaluesand#values==1then
v1=values[1]
ifv1=="nil"orv1=="-"orv1=="_"then
--break
elseifv1=="b"orv1=="bool"orv1=="tf"then
values={"true","false"}
elseifv1=="nlt"then
values={"none","low","tall"}
elseifv1=="neswup"orv1=="f6"then
values={"north","east","south","west","up","down"}
elseifv1=="dnswe"orv1=="f5"then
values={"down","north","south","west","east"}
elseifv1=="nswe"orv1=="f4"then
values={"north","south","west","east"}
elseifv1=="tb"then
values={"top","bottom"}
elseifv1=="tbd"then
values={"top","bottom","double"}
elseifv1=="ul"then
values={"upper","lower"}
else
localnr=split(v1,"..")
if#nr==2andtonumber(nr[1])andtonumber(nr[2])andtonumber(nr[1])<tonumber(nr[2])then
localj=tonumber(nr[1])
values={}
whilej<tonumber(nr[2])+1do
table.insert(values,j)
j=j+1
end
end
end
end
ifvaluesandnot(values[1]=="-"orvalues[1]=="_"or#values==0)then
datast[stateName]=values
end
end_values=datast[stateName]orvaluesor{"?"}
ifnot(#end_values==1andend_values[1]=="nil")then
table.insert(states,{
name=stateName,
values=end_values
})
end
i=i+2
end
localcombos=cartesian(states)
if#combos==0then
combos={{}}
end
table.insert(data.blocks,{
name=name,
id=id,
combos=combos,
link=link,
note=note,
sprit=sprit
})
return""
end
functionp.render(frame)
localrowSize=data.rowSize
localone_row=false
localrowspersection=data.rowspersection
localcells={}
for_,binipairs(data.blocks)do
for_,comboinipairs(b.combos)do
table.insert(cells,{
name=b.name,
id=b.id,
link=b.link,
note=b.note,
state=p.comboString(combo,frame),
count=#b.combos,
sprit=b.sprit
})
end
end
localtotal=#cells
localGRID_WIDTH=math.ceil(math.sqrt(total));
localGRID_HEIGHT=math.ceil(total/GRID_WIDTH);
ifdata.cb=="?"then
data.cb=(GRID_WIDTH<=GRID_HEIGHT)
end
localGRID_WIDTH_2=GRID_WIDTH+1
ifrowSize==1then
rowSize=GRID_WIDTH_2
end
localm=nil
ifrowSize>total-1then
one_row=true
elseifrowSize<=0then
ifrowSize==-5orrowSize==-4then
m=GRID_WIDTH_2
elseifrowSize<-10then
m=-rowSize
end
rowSize=total+100
one_row=true
end
localrows=math.ceil(total/rowSize)+1
localout={}
localindex=1
localst=0
localcellold=NONE
localdobreak=false
forr=1,rowsdo
ifdobreakthen
break
end
ifcells[math.min(index-1+rowSize,total)].id==data.theendthen
dobreak=true
end
localk=0
ifr+rowspersection==rowsthenk=1end
ifr%rowspersection==1andr<rowsandnotone_rowthen
table.insert(out,"=== Rows "..r.." to "..math.min(r+rowspersection-1,rows)+k.."===")
end
localfirst=cells[index]
locallast=cells[math.min(index-1,total)]
iflastthen
first=last
end
iffirstandnotone_rowthen
--table.insert(out,"Row "..r.." start:")
table.insert(out,"Row "..r.." start with "..frame:expandTemplate{
title="BlockLink",
args={text=first.name,link=first.link,id=first.sprit}
}..extstad(first.state))
end
ifnotone_rowthen
table.insert(out,'{| class="wikitable collapsible collapsed" style="width: 100%;"')
table.insert(out,'! colspan="4"|Row '..r..', X = '..2*r-1..'\n|-\n')
table.insert(out,"!Block!!State!!Column (Z)")
else
table.insert(out,'{| class="wikitable"')
ifmthen
table.insert(out,"!Block!!ID!!State!!Coordinates")
else
table.insert(out,"!Block!!ID!!State")
end
end
localcol=1
iflastthen
index=index-1
st=st-1
ifst==-1then
st=last.count
end
end
localcc=""
localid_line=""
whilecol<=rowSizeandindex<=totaldo
localcell=cells[index]
ifnot(cell.id==cellold)then
cellold=cell.id
st=0
end
ifnotone_rowthen
cc="||"..col.." ("..2*col-1..")"
else
id_line="||rowspan="..cell.count-st.."|"..cell.id
end
ifmthen
cc="||"..cord2(col,m)
end
ifcell.count-st>1then
ifrowSize>colordata.cbthen
table.insert(out,
"|-\n|rowspan="..cell.count-st.."|"..
frame:expandTemplate{
title="BlockLink",
args={text=cell.name,link=cell.link,id=cell.sprit}
}..
cell.note
..id_line
.."\n|"..cell.state..cc
)
end
ifrowSize==colthen
index=index+1
st=st+1
break
end
fori=2,cell.count-stdo
index=index+1
col=col+1
ifnotone_rowthen
cc="||"..col.." ("..2*col-1..")"
else
id_line="||rowspan="..cell.count-st.."|"..cell.id
end
ifmthen
cc="||"..cord2(col,m)
end
localc2=cells[index]
ifc2==nilthen
break
elseifrowSize>colordata.cbthen
table.insert(out,
"|-\n|"..c2.state..cc
)
end
ifrowSize==colthen--index%rowSize==0
st=st+i
break
end
end
elseifrowSize>colordata.cbthen
table.insert(out,
"|-\n|"..
frame:expandTemplate{
title="BlockLink",
args={text=cell.name,link=cell.link,id=cell.sprit}
}..
cell.note
..
id_line.."||"..cell.state..cc
)
end
index=index+1
col=col+1
end
table.insert(out,"|}")
end
returntable.concat(out,"\n")
end
functionp.render2(frame)
localrowSize=data.rowSize
localcells={}
for_,binipairs(data.blocks)do
for_,comboinipairs(b.combos)do
table.insert(cells,{
name=b.name,
id=b.id,
link=b.link,
note=b.note,
state=p.comboString(combo,frame),
count=#b.combos,
sprit=b.sprit
})
end
end
localtotal=#cells
localGRID_WIDTH=math.ceil(math.sqrt(total));
localGRID_HEIGHT=math.ceil(total/GRID_WIDTH);
ifdata.cb=="?"then
data.cb=(GRID_WIDTH<=GRID_HEIGHT)
end
localGRID_WIDTH_2=GRID_WIDTH+1
ifrowSize==1then
rowSize=GRID_WIDTH_2
elseifrowSize==-4orrowSize==-5then
rowSize=GRID_WIDTH_2
elseifrowSize<-10then
rowSize=-rowSize
end
localrows=math.ceil(total/rowSize)+1
localno_cord=false
iftotal<rowSizeorrowSize<=10then
no_cord=true
end
localout={}
localindex=1
localst=0
localcellold=NONE
localdobreak=false
table.insert(out,'{| class="wikitable collapsible sortable" style="width: 100%;"')
ifno_cordthen
table.insert(out,"!Block!!ID\n|-\n")
else
table.insert(out,"!Block!!ID!!Row!!Column!!Coordinates\n|-\n")
end
ifno_cordthen
rowSize=total+100
rows=2
end
forr=1,rowsdo
ifdobreakthen
break
end
ifcells[math.min(index-1+rowSize,total)].id==data.theendthen
dobreak=true
end
localfirst=cells[index]
locallast=cells[math.min(index-1,total)]
iflastthen
first=last
end
localc0=1
localr0=1
localcol=1
iflastthen
index=index-1
st=st-1
ifst==-1then
st=last.count
end
end
whilecol<=rowSizeandindex<=totaldo
localcell=cells[index]
localnewid=false
ifnot(cell.id==cellold)then
newid=true
cellold=cell.id
st=0
end
ifcell.count-st>1then
ifnewidthen
c0=col
r0=r
ifrowSize==colandnotdata.cbthen
c0=1
r0=r+1
end
ifno_cordthen
table.insert(out,
"|"..
frame:expandTemplate{
title="BlockLink",
args={text=cell.name,link=cell.link,id=cell.sprit}
}..
cell.note.."||"..cell.id.."\n|-\n"
)
else
table.insert(out,
"|"..
frame:expandTemplate{
title="BlockLink",
args={text=cell.name,link=cell.link,id=cell.sprit}
}..
cell.note
.."||"..cell.id.."||"..r0.."||"..c0.."||"..cord(r0,c0).."\n|-\n"
)
end
end
ifrowSize==colthen
index=index+1
st=st+1
break
end
fori=2,cell.count-stdo
index=index+1
col=col+1
ifrowSize==colthen--index%rowSize==0
st=st+i
break
end
end
elseifnewidthen
c0=col
r0=r
ifrowSize==colanddata.ver<4672then
c0=1
r0=r+1
end
ifno_cordthen
table.insert(out,
"|"..
frame:expandTemplate{
title="BlockLink",
args={text=cell.name,link=cell.link,id=cell.sprit}
}..
cell.note.."||"..cell.id.."\n|-\n"
)
else
table.insert(out,
"|"..
frame:expandTemplate{
title="BlockLink",
args={text=cell.name,link=cell.link,id=cell.sprit}
}..
cell.note
..
"||"..cell.id.."||"..r0.."||"..c0.."||"..cord(r0,c0).."\n|-\n"
)
end
end
index=index+1
col=col+1
end
--table.insert(out,"\n|-\n")
end
table.insert(out,"|}")
returntable.concat(out,"\n")
end
functionp.test(frame)
-- p.start{ args={row=174}}
p.block{args={"Golden Dandelion","golden_dandelion",note="a"}}
p.block{args={"Grass Block","grass_block","snowy","true,false"}}
p.block{args={"Light?Light_(block)","stripped_spruce_log","axis","x,y,z","A","1,2,3,4,5,6,7","B","1,2,3,4","C","aaa,b"}}
p.block{args={"Air","air"}}
p.block{args={"Air","",note="2"}}
iffbthen
localend_out={}
table.insert(end_out,"==Fist Block==")
table.insert(end_out,p.render2(frame))
table.insert(end_out,"==Grid==")
table.insert(end_out,p.render(frame))
returntable.concat(end_out,"\n")
elseif1==1then
returnp.render(frame)
end
return"Hi"
end
functionp.main(frame)
localargs=frame.args
p.start{
args={
row=args.start_row,
section=args.start_section,
none=args.start_none,
ver=args.ver
}
}
ifargs.hdwghthen
data.hdwgh=split(args.hdwgh,",")
end
ifargs.cbthen--copy blcok
ifargs.cb=="false"orargs.cb=="f"orargs.cb=="0"then
data.cb=false
else
data.cb=true
end
end
localraw
ifargs.datathen
raw=args.data
else
localpage=args.pageor"Template:Debug_mode_blocks/raw"-- "User:Aloi4/test/5/raw"
raw=frame:preprocess(mw.title.new(page):getContent())
end
forrowinmw.text.gsplit(raw,"‌<br>")do
row=mw.text.trim(row)
ifrow~=""then
localparts={}
forvinmw.text.gsplit(row," || ")do
table.insert(parts,v)
end
localblockArgs={}
localhasnote=false
localhasmin=false
localhasnmax=false
fori,vinipairs(parts)do
ifhasnotethen
blockArgs.note=v
hasnote=false
elseifhasminthen
blockArgs.vermin=v
hasmin=false
elseifhasmaxthen
blockArgs.vermax=v
hasmax=false
elseifv=="@note"then
hasnote=true
elseifv=="@vermin"then
hasmin=true
elseifv=="@vermax"then
hasmax=true
elseifv=="@end"then
blockArgs.isend=true
else
blockArgs[i]=v
end
ifi%2==0and(hasnoteorhasminorhasmax)then
blockArgs[i]="-"
end
end
p.block{args=blockArgs}
end
end
r=tonumber(args.start_row)or10
ifargs.fbthen
localend_out={}
table.insert(end_out,p.render2(frame))
ifr>1then
table.insert(end_out,"==Rows list==")
else
table.insert(end_out,"==Blocks list==")
end
table.insert(end_out,p.render(frame))
returntable.concat(end_out,"\n")
end
returnp.render(frame)
end
functionp.blockrow(f)
localargs=f
iff==mw.getCurrentFrame()then
args=require('Module:ProcessArgs').merge(true)
else
f=mw.getCurrentFrame()
end
localout={}
locali=1
whileargs[i]do
table.insert(out,args[i]or"")
i=i+1
end
ifargs.theendthen
table.insert(out,"@end")
end
ifargs.notethen
table.insert(out,"@note")
table.insert(out,args.note)
end
ifargs.verminthen
table.insert(out,"@vermin")
table.insert(out,args.vermin)
end
ifargs.vermaxthen
table.insert(out,"@vermax")
table.insert(out,args.vermax)
end
ifargs.pthen
table.insert(out,"@vermax")
table.insert(out,3824)
table.insert(out,"@vermin")
table.insert(out,3824)
end
returntable.concat(out," || ").."‌<br>"
end
returnp