//粘贴至 脚本门 中
var passwork="12345";//密码,必须五位数字
var maxTryCount=1;//最大尝试次数
var closeGui=false;//超出最大尝试次数是否强制关闭
var updateTryCount=true;//是否允许刷新尝试次数
var cd=60000;//超过最大尝试次数时冷却时间 1000毫秒=1秒
var Guipasswork="";
function init(e){
var store=e.block.getStoreddata();
if(!store.has("canOpen")){
store.put("canOpen","true");
}
e.block.setBlockModel("minecraft:iron_door");
}
function doorToggle(e){
var store=e.block.getStoreddata();
if(!eval(store.get("canOpen"))){
e.setCanceled(true);
}
}
function interact(e){
var player=e.player;
if(passwork.length!=5 || isNaN(passwork)){
player.message("§5§l[密码门]§4密码门产生严重错误!密码必须为五位数字!");
return;
}
var playerName=player.getDisplayName();
var block=e.block;
var store=block.getStoreddata();
if(player.isSneaking() && eval(store.get("canOpen"))){
store.put("canOpen","false");
player.message("§5§l[密码门]§2成功上锁!");
e.setCanceled(true);
return;
}
if(eval(store.get("canOpen"))){
return;
}
if(!store.has("Try_"+playerName)){
store.put("Try_"+playerName,0);
}
if(!store.has("Cd_"+playerName)){
store.put("Cd_"+playerName,0);
}
update_TryCount(store,playerName);
if(maxTryCount>store.get("Try_"+playerName)){
GuiShow(player);
player.getTempdata().put("Open_Passwork",block);
return;
}
var Cd=store.get("Cd_"+playerName);
var time=((Cd-new Date().getTime())/1000).toFixed(1);
player.message("§5§l[密码门]§4您已超出尝试次数!请等待 "+time+" 秒后再尝试");
}
function GuiShow(player){
Guipasswork="";
var NpcAPI=Java.type("noppes.npcs.api.NpcAPI");
NpcAPI=NpcAPI.Instance();
var buttons=[
["7","8","9"],
["4","5","6"],
["1","2","3"],
["删除","0","确认"]
];
var gui=NpcAPI.createCustomGui(99,150,256,false);
gui.setBackgroundTexture("minecraft:textures/gui/demo_background.png");
for(var a=0;a<buttons.length;a++){
for(var b=0;b<buttons[a].length;b++){
var button=gui.addTexturedButton(a*3+b,buttons[a][b],30+30*b,30+30*a,28,28,"minecraft:textures/gui/container/creative_inventory/tabs.png");
button.setTextureOffset(0,4);
}
}
for(var c=0;c<5;c++){
gui.addTexturedRect(12+c,"minecraft:textures/particle/footprint.png",30+c*18,8,16,16,0,0);
}
player.showCustomGui(gui);
gui.update(player);
}
function RGB(R,G,B){
return B+256*G+65536*R;
}
function update_TryCount(store,playerName){
if(new Date().getTime()>store.get("Cd_"+playerName) && updateTryCount){
store.put("Try_"+playerName,0);
store.put("Cd_"+playerName,new Date().getTime()+cd);
}
}
function customGuiButton(e){
var BlockScriptedDoorWrapper=Java.type("noppes.npcs.api.wrapper.BlockScriptedDoorWrapper");
var player=e.player;
var playerName=player.getDisplayName();
var temp=player.getTempdata();
var block=temp.get("Open_Passwork");
var store_b=block.getStoreddata();
var Try=eval(store_b.get("Try_"+playerName));
var Cd=store_b.get("Cd_"+playerName);
update_TryCount(store_b,playerName);
if(Try>maxTryCount && closeGui){
player.closeGui();
}
if(block instanceof BlockScriptedDoorWrapper){
if(e.gui.getID()==99){
var buttons=[
"7","8","9",
"4","5","6",
"1","2","3",
"删除","0","确认"
];
var pwl=Guipasswork.length;
var message=function(mess){
e.gui.addLabel(98,mess,25,148,150,16,RGB(0,128,0));
e.gui.update(player);
}
switch(buttons[e.buttonId]){
case "删除":
if(pwl>0){
Guipasswork=Guipasswork.substring(0,pwl-1);
e.gui.addLabel(pwl+17-1,"",36+18*(pwl-1),5,25,25,RGB(255,165,0));
e.gui.update(player);
}
break;
case "确认":
if(maxTryCount<Try){
var time=((Cd-new Date().getTime())/1000).toFixed(1);
message("§5§l[密码门]§4频繁操作!请等待 "+time+" 秒后再尝试");
break;
}
if(passwork.equals(Guipasswork)){
store_b.put("canOpen","true");
block.setOpen(!block.getOpen());
player.message("§5§l[密码门]§2密码正确!");
player.closeGui();
return;
}
store_b.put("Try_"+playerName,Try+1);
message("§4密码错误!您还有 "+(maxTryCount-Try)+" 次机会");
break;
default:
if(pwl>=5){
message("已到达密码门上限");
break;
}
Guipasswork+=buttons[e.buttonId];
e.gui.addLabel(pwl+17,buttons[e.buttonId],36+18*pwl,5,25,25,RGB(255,165,0));
e.gui.update(player);
break;
}
}
}
}
function customGuiClosed(e){
var BlockScriptedDoorWrapper=Java.type("noppes.npcs.api.wrapper.BlockScriptedDoorWrapper");
var player=e.player;
player.message("yes");
var temp=player.getTempdata();
if(temp.get("Open_Passwork") instanceof BlockScriptedDoorWrapper){
if(e.gui.getID()==99){
temp.remove("Open_Passwork");
}
}
}