Jump to content

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


Recommended Posts

Posted

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();
    }
  };


Posted

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;
    }
  };

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Add the crash-report or latest.log (logs-folder) with sites like https://mclo.gs/ and paste the link to it here  
    • So i have a forge modded aternos server that worked just fine for a month untill today it suddenly crashes most of the time giving errors and idk which mod is causing the error or its smth else here is the crash log link https://mclo.gs/gGkzGKT
    • Struggling to decipher a crash report I'm getting in a custom modpack I'm tinkering with. The crash happens on startup, but weirdly, only some of the time. It seems to be related to Steves Carts, but weirdly it only started happening recently, and I can't identify if another mod is conflicting, or why it is only happening some of the time:   java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.player.Player.m_20202_()" because "player" is null at vswe.stevescarts.events.OverlayEventHandler.onRenderTick(OverlayEventHandler.java:24) ~[stevescarts-1.20.1-1.1.14.jar%23527!/:1.20.1-1.1.14] {re:classloading} at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:260) ~[eventbus-6.0.5.jar%23127!/:?] {} at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:252) ~[eventbus-6.0.5.jar%23127!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.5.jar%23127!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.5.jar%23127!/:?] {} at net.minecraftforge.event.ForgeEventFactory.onRenderTickEnd(ForgeEventFactory.java:919) ~[forge-1.20.1-47.1.106-universal.jar%23581!/:?] {re:mixin,re:classloading,pl:mixin:APP:modernfix-forge.mixins.json:perf.potential_spawns_alloc.ForgeEventFactoryMixin,pl:mixin:A} at net.minecraft.client.Minecraft.m_91383_(Minecraft.java:1148) ~[client-1.20.1-20230612.114412-srg.jar%23576!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:mixin:A,pl:runtimedistcleaner:A} at net.minecraft.client.Minecraft.m_91374_(Minecraft.java:718) ~[client-1.20.1-20230612.114412-srg.jar%23576!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick,xf:fml:xaeroworldmap:xaero_wm_minecraft_runtick_render_call,xf:fml:xaerominimap:xaero_minecraftclient,xf:fml:xaeroworldmap:xaero_wm_minecraftclient,pl:mixin:A,pl:runtimedistcleaner:A} at net.minecraft.client.main.Main.main(Main.java:218) ~[minecraft-1.20.1-client.jar:?] {re:mixin,pl:runtimedistcleaner:A,re:classloading,pl:mixin:APP:flywheel.mixins.json:ClientMainMixin,pl:mixin:A,pl:runtimedistcleaner:A}     Including some extra info in case any of it is relevant^. Appreciate any ideas/advice!    
  • Topics

×
×
  • Create New...

Important Information

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