Jump to content

[CustomNPCs] [1.8.8] [Script] Secret Door Script


chromecide

Recommended Posts

Secret Door Script for the Minecraft 1.8.8 version of CustomNPCs

 

This script, when added to a ScriptedBlock will create a secret door that is activated by right clicking the ScriptedBlock.  The ScriptedBlock must be placed as the block above the Secret Door.

 

The blocks used for the door are supplied as an array to the SecretDoor constructor.  The first item in the array is used for the ScriptedBlock itself.

 

/*
  Secret Door Script for CustomNPCs

  usage:

  var thisSecretDoor;

  function init(event){
    thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:stonebrick", "minecraft:stonebrick"]);
  }

  function interact(event){
    thisSecretDoor.interact(event);
  }
*/

function SecretDoor(initEvent, blockList){
  var block = this.block = initEvent.block;
  this.blockList = blockList;

  this.block.setModel(this.block.getWorld().createItem(blockList[0], 0, 1));

  this.x = Math.floor(block.getX());
  this.y = Math.floor(block.getY());
  this.z = Math.floor(block.getZ());

  this.isOpen = false;

  this.close();
}

  SecretDoor.prototype.open = function(){

    var world = this.block.getWorld();
    this.block.executeCommand("/playsound tile.piston.in @a[r=10] "+this.x+" "+this.y+" "+this.z);
    for(var i=1;i<this.blockList.length;i++){
      var blockY = this.y - i;
      world.setBlock(this.x, blockY, this.z, "minecraft:air", 0);
    }
    this.isOpen = true;
  };

  SecretDoor.prototype.close = function() {
    var world = this.block.getWorld();
    this.block.executeCommand("/playsound tile.piston.out @a[r=10] "+this.x+" "+this.y+" "+this.z);

    for(var i=1;i<this.blockList.length;i++){
      var blockY = this.y - i;
      world.setBlock(this.x, blockY, this.z, this.blockList[i], 0);
    }
    this.isOpen = false;
  };

  SecretDoor.prototype.interact = function(event) {
    if(this.isOpen===true){
      this.close();
    }else{
      this.open();
    }
  };


Link to comment
Share on other sites

I've added an optional third parameter "autoClose" to the SecretDoor Constructor. Used as follows:

 

    //Door with a stone brick trigger block, 2 wooden planks as the door blocks, that does not auto close
    var thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:planks", "minecraft:planks"], false);

    
    //Door with a stone brick trigger block, 2 wooden planks as the door blocks, that auto closes after 2 seconds(40 Ticks); all of the following are equivelant
    var thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:planks", "minecraft:planks"]);
    var thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:planks", "minecraft:planks"], true);
    var thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:planks", "minecraft:planks"], 40);

    //Door with a stone brick trigger block, 2 wooden planks as the door blocks, that auto closes after 4 seconds(80 Ticks)
    var thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:planks", "minecraft:planks"], 80);

 

SecretDoor 1.1

 


  // Secret Door Script for CustomNPCs
  // Tags: customnpcscript, Secret Door

  // usage:

  // var thisSecretDoor;

  // function init(event){
  //   /*
  //     Door with a stone brick trigger block, 2 wooden planks as the door blocks, that does not auto close
  //    */
  //   //thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:planks", "minecraft:planks"], false);

    
  //   /*
  //     Door with a stone brick trigger block, 2 wooden planks as the door blocks, that auto closes after 2 seconds(40 Ticks); all of the following are equivelant
  //    */
  //   //thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:planks", "minecraft:planks"]);
  //   //thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:planks", "minecraft:planks"], true);
  //   //thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:planks", "minecraft:planks"], 40);

  //   /*
  //     Door with a stone brick trigger block, 2 wooden planks as the door blocks, that auto closes after 4 seconds(80 Ticks)
  //    */
  //   thisSecretDoor = new SecretDoor(event, ["minecraft:stonebrick", "minecraft:planks", "minecraft:planks"], 80);
  // }

  // function interact(event){
  //   thisSecretDoor.interact(event);
  // }

  // function timer(event){
  //   thisSecretDoor.timer(event);
  // }

function SecretDoor(initEvent, blockList, autoClose){
  switch((typeof autoClose)){
    case 'boolean':
      if(autoClose===true){
        autoClose = 40; //2 seconds
      }else{
        autoClose=0;
      }
      break;
    case 'number':
      if(autoClose<0){
        autoClose = 0;
      }
      break;
    default:
      autoClose = 40; //~2 seconds
      break;
  }

  var block = this.block = initEvent.block;
  this.blockList = blockList;
  this.autoClose = autoClose;

  this.block.setModel(this.block.getWorld().createItem(blockList[0], 0, 1));

  this.x = Math.floor(block.getX());
  this.y = Math.floor(block.getY());
  this.z = Math.floor(block.getZ());

  this.isOpen = false;

  this.close();
}

  SecretDoor.prototype.open = function(){

    var world = this.block.getWorld();
    this.block.executeCommand("/playsound tile.piston.in @a[r=10] "+this.x+" "+this.y+" "+this.z);
    for(var i=1;i<this.blockList.length;i++){
      var blockY = this.y - i;
      world.setBlock(this.x, blockY, this.z, "minecraft:air", 0);
    }
    this.isOpen = true;
    if(this.autoClose)
    //start(or create if it doesn't exist) the "auto-close" timer (id 0, 40 ticks, don't repeat)
    this.block.getTimers().start(0, this.autoClose, false);
  };

  SecretDoor.prototype.close = function() {
    var world = this.block.getWorld();
    this.block.executeCommand("/playsound tile.piston.out @a[r=10] "+this.x+" "+this.y+" "+this.z);

    for(var i=1;i<this.blockList.length;i++){
      var blockY = this.y - i;
      world.setBlock(this.x, blockY, this.z, this.blockList[i], 0);
    }
    this.isOpen = false;
  };

  SecretDoor.prototype.interact = function(event) {
    if(this.isOpen===true){
      this.close();
    }else{
      this.open();
    }
  };

  SecretDoor.prototype.timer = function(event) {
    switch(event.id){
      case 0:// "auto close"
        this.close();
        break;
    }
  };

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.