from mc2 import* def interfaceupdate(s): if s.rsmoveitem and not keydown(KEY_OK): s.rsmoveitem=False if not s.rsmoveitem and keydown(KEY_OK) and s.inInv!=0: s.rsmoveitem=True s.onmoveitem=not s.onmoveitem if s.onmoveitem: get=s.invnumbers[s.invcase] if keydown(KEY_RIGHT) and not s.invcase in {22,32}: get=ceil(get/2) s.inventory[36]=s.inventory[s.invcase] s.invnumbers[36]=get s.invdata[36]=s.invdata[s.invcase] s.invdata[s.invcase]=0 useitem(s,s.invcase,get) if s.invcase==22 : debug(s.inventory[s.invcase]) for xut in range(4): useitem(s,18+xut,1) refreshcase(s.parent,18+xut) elif s.invcase==32 and s.inventory[s.invcase]!="*": for xut in range(9): useitem(s,23+xut,1) refreshcase(s.parent,23+xut) refreshcase(s.parent,s.invcase) refreshcase(s.parent,36) else: if s.invcase==22 and s.inventory[s.invcase]!="*": s.onmoveitem=True if s.inventory[36]==s.inventory[22]: tempi=getstackvalue(s.parent,s.inventory[36]) addo=tempi-s.invnumbers[36] if addo>0: s.invnumbers[36]+=s.invnumbers[22] refreshcase(s.parent,36) for xut in range(4): useitem(s,18+xut,1) refreshcase(s.parent,18+xut) elif s.invcase==32 and s.inventory[s.invcase]!="*": s.onmoveitem=True if s.inventory[36]==s.inventory[32]: tempi=getstackvalue(s.parent,s.inventory[36]) addo=tempi-s.invnumbers[36] if addo>0: s.invnumbers[36]+=s.invnumbers[32] refreshcase(s.parent,36) for xut in range(9): useitem(s,23+xut,1) refreshcase(s.parent,23+xut) elif s.invcase!=35: topose=s.invnumbers[36] if keydown(KEY_LEFT): if topose!=1: s.onmoveitem=True topose=1 if s.inventory[s.invcase]=="*": s.inventory[s.invcase]=s.inventory[36] s.invnumbers[s.invcase]+=topose s.invdata[s.invcase]=s.invdata[36] s.invdata[36]=0 useitem(s,36,topose) elif s.inventory[s.invcase]==s.inventory[36]: tempi=getstackvalue(s.parent,s.inventory[36]) addo=tempi-s.invnumbers[s.invcase] if topose>addo: useitem(s,36,addo) s.onmoveitem=True s.invnumbers[s.invcase]+=addo else: useitem(s,36,topose) s.invnumbers[s.invcase]+=topose else: s.onmoveitem=True s.inventory[s.invcase],s.inventory[36]=s.inventory[36],s.inventory[s.invcase] s.invnumbers[s.invcase],s.invnumbers[36]=s.invnumbers[36],s.invnumbers[s.invcase] s.invdata[s.invcase],s.invdata[36]=s.invdata[36],s.invdata[s.invcase] refreshcase(s.parent,s.invcase) refreshcase(s.parent,36) if s.inInv==0: for ele in {0,1,2,3,4,5}: if keydown(s.keyindex[ele]): s.invcase=ele hotbarrefresh(s) return else: for ele in s.prerangedihuit: if keydown(s.keyindex[ele]): s.invcase=ele hotbarrefresh(s) if s.inInv==1: minicraftupdate(s) elif s.inInv==2: bigcraftupdate(s) elif s.inInv==3: furnaceupdate(s) def furnaceupdate(s): if s.inventory[33] in s.parent.cookable: if s.inventory[34] in s.parent.fuels: if 0==0: useitem(s,34,1) tp={30:33,42:34,39:35} for ele in tp.keys(): if keydown(ele): s.invcase=tp[ele] hotbarrefresh(s) break def minicraftupdate(s): tp={30:18,31:19,36:20,37:21,39:22} for l in tp.keys(): if keydown(l):s.invcase=tp[l];hotbarrefresh(s);break m=s.inventory[18]+s.inventory[19]+s.inventory[20]+s.inventory[21] t=get_item_craft_mini(m) if s.inventory[22]!=t[0]:s.inventory[22]=t[0];s.invnumbers[22]=t[1];refreshcase(s.parent,22) def bigcraftupdate(s): tp={30:23,31:24,32:25,36:26,37:27,38:28,42:29,43:30,44:31,39:32} for ele in tp.keys(): if keydown(ele): s.invcase=tp[ele] hotbarrefresh(s) break bigcraftis=s.inventory temp=get_item_craft_big(bigcraftis) if s.inventory[32]!=temp[0]: tempo=s.parent.invcaseposition[32] s.inventory[32]=temp[0] s.invnumbers[32]=temp[1] s.invdata[32]=100 refreshcase(s.parent,32) def updatebloc(gamegeror,xb,yb,to,canreplace,extra={}): blockpos=xb+yb*16 temp=gamegeror.actualchunk if not canreplace and temp[blockpos]!="*": return False gamegeror.actualchunkticker[xb+yb*16]=getblocticks(to) tp=temp[0:blockpos]+to+temp[blockpos+1:144] gamegeror.actualchunk=tp afftex(xb*20,yb*20,to,gamegeror) return temp[blockpos] def hotbarrefresh(p): if p.invcase==p.oldinvcase:return temp=p.parent.invcaseposition refreshcase(p.parent,p.invcase) refreshcase(p.parent,p.oldinvcase) p.oldinvcase=p.invcase def hotbarprint(player): for spx in range(6): refreshcase(player.parent,spx) def physicupdate(s,dt,game): ret={"wall":[]} if s.speedx!=0: nbofchecks=2+s.colly//20 dep=s.colly/nbofchecks-1 checks=[s.Py+dep*ad for ad in range(nbofchecks+1)] s.Px+=s.speedx*dt condis=[] xpos=s.Px+s.collx*(s.speedx>0) for ycheck in checks: ypos=int(ycheck/20) if ypos<9: tp=getblock(int(xpos/20),ypos,game) condis.append(tp in s.parent.traversable) ret["wall"].append(tp) else: condis.append(True) if False in condis: s.Px-=s.speedx*dt s.speedx=0 s.speedy-=dt*9.81 nbofchecks=2+s.collx//20 dep=s.collx/nbofchecks-1 checks=[s.Px+dep*ad for ad in range(nbofchecks+1)] maxh=False if s.speedy>0: maxh=True if maxh and s.speedy<0 : s.lastmaxheight=s.Py descente=s.speedy<0 s.Py-=s.speedy condis=[] if descente: ypos=int((s.Py+s.colly-1)/20) else: ypos=int((s.Py)/20) for xcheck in checks: if ypos<9: condis.append(getblock(int((xcheck)/20),ypos,game)in s.parent.traversable) else: condis.append(True) if False in condis: if descente: s.onground=True dif=s.Py-s.lastmaxheight if dif>60: dam=int(dif/20)-2 changelife(s,-dam) s.lastmaxheight=s.Py s.Py+=s.speedy s.speedy=0 else: if descente: s.onground=False return ret def AffBigCraft(player): temp=player.parent.invcaseposition for x in range(9): refreshcase(player.parent,23+x) refreshcase(player.parent,32) bx=temp[32][0]-25 by=temp[32][1]+10 f(bx,by,15,6,"gray") for x in range(6): f(bx+20-x,by+x+4,1,-2*(x+1),"gray") def BlocKSelectRefresh(p): p.destimer=0 if int(p.Py/20)-p.Blolistpos[p.Bloselectn][1]<9: tempbl=getblock(int(p.Px/20)+p.Blolistpos[p.Bloselectn][0],int(p.Py/20)-p.Blolistpos[p.Bloselectn][1],p.parent) if tempbl in p.parent.blocksbreakstime.keys(): p.blocktodestime=p.parent.blocksbreakstime[tempbl] else: p.blocktodestime=2000 else: p.blocktodestime=2000 if int(p.Py/20)-p.Blolistpos[p.Bloselectn][1]<9: f(p.BlX*20,p.BlY*20,20,1,"black") f(p.BlX*20,p.BlY*20+19,20,1,"black") f(p.BlX*20,p.BlY*20,1,20,"black") f(p.BlX*20+19,p.BlY*20,1,20,"black") if p.oldBlX+p.oldBlY*16<144: afftex(p.oldBlX*20,p.oldBlY*20,p.parent.actualchunk[p.oldBlX+p.oldBlY*16],p.parent) p.oldBlX=p.BlX p.oldBlY=p.BlY p.lsblx=int(p.Px/20) p.lsbly=int(p.Py/20) class mob(): def __init__(s,game,posx=0,posy=0,typ=0,dim=0): s.dimension=dim s.lastmaxheight=300 if typ==0: s.collx=10 if typ==1: s.collx=20 s.colly=20 s.col=20 s.life=20 s.typ=typ s.Px=posx s.Py=posy s.lPx=posx s.lPy=posy s.parent=game s.mov=0 s.onground=False s.speedy=0 s.speedx=0 s.speedmax=30 s.movloader=0 s.theplayer=game.player s.Chx=game.player.Chx s.Chy=game.player.Chy def update(s,game): if s.theplayer.inInv : return if s.Chx!=game.player.Chx or s.Chy!=game.player.Chy or s.dimension!=game.player.dimension: return if s.life<=0: f(int(s.lPx),int(s.lPy),s.collx,s.colly,game.skycolor) if s.typ==1: debug("yyy") s.parent.itemgeror.append(grounditem(int(s.Px),int(s.Py),s.Chx,s.Chy,s.dimension,{"nb":1,"typ":"Y"})) game.mobgeror.remove(s) del s return if s.typ==0: zombieupdate(s,game) elif s.typ==1: blazeupdate(s,game) def blazeupdate(s,g): f(int(s.lPx),int(s.lPy),s.collx,s.colly,g.skycolor) px=int(s.Px) py=int(s.Py) f(px+6,py,8,6,"yellow") f(px+6,py+6,8,2,"brown") se(px+7,py+2,"white") se(px+12,py+2,"white") se(px+8,py+2,"black") se(px+11,py+2,"black") f(px+2,py+3,2,7,"yellow") f(px+17,py,2,7,"yellow") f(px+2,py+3,2,7,"yellow") f(px+7,py+5,2,7,"yellow") f(px+13,py+4,2,7,"yellow") f(px+3,py+11,2,7,"yellow") f(px+10,py+12,2,7,"yellow") f(px+16,py+11,2,7,"yellow") def zombieupdate(s,g): if s.Px>s.theplayer.Px: s.mov=2 s.speedx=-s.speedmax else: s.mov=1 s.speedx=s.speedmax if distance2(s.Px,s.Py,s.theplayer.Px,s.theplayer.Py)<1600: changelife(s.theplayer,-1) temp=physicupdate(s,game.dt,game)["wall"] for ele in temp: if ele not in game.traversable: if s.onground: s.speedy=0.4 refresh(s,zombie=True) class grounditem(): def __init__(s,px,py,cx,cy,dim,info): s.collx=10 s.colly=10 s.speedy=0 s.speedx=0 s.Px=px s.Py=py s.lPx=px s.lPy=py s.Chx=cx s.Chy=cy s.iteminfo=info s.lastmaxheight=0 s.dimension=dim s.life=9 s.inte=randint(0,9) s.ain=0 def update(se,g): if se.Chx!=g.player.Chx or se.Chy!=g.player.Chy or se.dimension!=g.player.dimension: return se.ain+=1 if se.ain==10: se.ain=0 if se.inte!=se.ain: return se.parent=g f(int(se.lPx),int(se.lPy),se.collx,se.colly,g.skycolor) if se.Py>160: g.itemgeror.remove(se) f(int(se.Px),int(se.Py),10,10,g.skycolor) del se return physicupdate(se,g.dt*10,g) f(int(se.Px),int(se.Py),10,10,color(240, 216, 129)) f(int(se.Px),int(se.Py),10,2,color(120,96,9)) se.lPx=se.Px se.lPy=se.Py if distance2(se.Px,se.Py,g.player.Px,g.player.Py)<1600: temp=addinventory(g.player,se.iteminfo["typ"],se.iteminfo["nb"],False) if temp!="Nope": g.itemgeror.remove(se) f(int(se.Px),int(se.Py),10,10,g.skycolor) del se return def addinventory(s,objid,nbof,cre=True):#to make gamegeror=s.parent ret=[] for ele in range(18): if s.inventory[ele]==objid: tempi=getstackvalue(s.parent,s.inventory[ele]) addmax=tempi-s.invnumbers[ele] ret.append(ele) if addmax>=nbof: s.invnumbers[ele]+=nbof if ele<6: refreshcase(s.parent,ele) return ret else: s.invnumbers[ele]+=addmax nbof-=addmax for ele in range(18): if s.inventory[ele]=="*": s.inventory[ele]=objid s.invnumbers[ele]=nbof ret.append(ele) if ele<6: refreshcase(s.parent,ele) return ret if cre: curx=int(s.Px/20)+s.Blolistpos[s.Bloselectn][0] cury=int(s.Py/20)-s.Blolistpos[s.Bloselectn][1] s.parent.itemgeror.append(grounditem(curx*20+5,cury*20+5,s.Chx,s.Chy,s.dimension,{"nb":nbof,"typ":objid})) return "Nope"