#Execute scripts at once

31 messages · Page 1 of 1 (latest)

gleaming sky
#

As the title shows, I wrote a script to randomize this recipe, but I don't know how to set the condition to make it execute only once, It looks like this

ServerEvents.recipes(event => {

  const pool = "637265617465";

  const getRandomFromPool = () => pool[Math.floor(Math.random() * pool.length)];

  const randomNumbers = [];
  for (let i = 0; i < 6; i++) {
    randomNumbers.push(getRandomFromPool());
  }

  const numberMappings = randomNumbers.map(num => `kubejs:number_${num}`);

  const itemsToCheck = [
    'kubejs:uncoded_precision_mechanism'
  ];

  const isItemRegistered = (itemId) => {
    return Item.exists(itemId);
  };

  const specialItemRegistered = itemsToCheck.every(isItemRegistered);

  if (specialItemRegistered) {
    event.recipes.createSequencedAssembly(
      [
        Item.of('create:precision_mechanism').withChance(0.6),
        Item.of('minecraft:dead_bush').withChance(0.4),
      ],
      'kubejs:uncoded_precision_mechanism',
      [
        event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[0]]),
        event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[1]]),
        event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[2]]),
        event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[3]]),
        event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[4]]),
        event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[5]]),
      ]
    )
    .transitionalItem('create:incomplete_precision_mechanism')
    .loops(1)
    .id('kubejs:create/sequenced_assembly/precision_mechanism');
  }
});

If anyone can tell me the event that will only be judged once per load, or if there are other ways to improve it, I'd appreciate it.

wraith hornetBOT
#

Once your ticket has been resolved, please close it with </ticket close:1054771505520717835> command!

fast remnant
#

Shouldnt the ServerEvents.recipes only run once every server/gamestart?

gleaming sky
gleaming sky
storm spoke
#

If you want the number sequence to be fixed once it is set, you may use JsonIO to output the sequence and load it when you need it. Something like this.

    let code_json = JsonIO.read('kubejs/config/passcode.json')
    if(code_json===null){
        code_json = {code: '12345'}
        JsonIO.write('kubejs/config/passcode.json', code_json)
    }
    let code = code_json.code
gleaming sky
# storm spoke If you want the number sequence to be fixed once it is set, you may use JsonIO t...

So based on your idea, the new code would look like this

let code_json = JsonIO.read('kubejs/config/passcode.json');
if (code_json === null) {
  code_json = { code: '637265617465' };
  JsonIO.write('kubejs/config/passcode.json', code_json);
}
let code = code_json.code;

ServerEvents.recipes(event => {
  const pool = code; 
  const getRandomFromPool = () => pool[Math.floor(Math.random() * pool.length)];

  
  const randomNumbers = [];
  for (let i = 0; i < 6; i++) {
    randomNumbers.push(getRandomFromPool());
  }

  
  const numberMappings = randomNumbers.map(num => `kubejs:number_${num}`);

  event.recipes.createSequencedAssembly(
    [
      Item.of('create:precision_mechanism').withChance(0.6),
      Item.of('minecraft:dead_bush').withChance(0.4),
    ],
    'create:golden_sheet',
    [
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[0]]),
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[1]]),
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[2]]),
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[3]]),
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[4]]),
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[5]]),
    ]
  )
    .transitionalItem('create:incomplete_precision_mechanism')
    .loops(1)
    .id('kubejs:create/sequenced_assembly/precision_mechanism');
});

I don't know if that's right.

storm spoke
#

It should be something like this. I did not test on my machine so you may need to check it yourself, and if there's a 'kubejs/config/passcode.json', you'll need to delete it for the function to work once again.

ServerEvents.recipes(event => {
  let code_json = JsonIO.read('kubejs/config/passcode.json');
  if (code_json === null) {
    const pool = 637265617465; 
    const getRandomFromPool = () => pool[Math.floor(Math.random() * pool.length)];
    const randomNumbers = [];
    for (let i = 0; i < 6; i++) {
      randomNumbers.push(getRandomFromPool());
    }  
    code_json = { code: randomNumbers };
    JsonIO.write('kubejs/config/passcode.json', code_json);
  }
  else{
    const randomNumbers = code_json.code
  }
  
  const numberMappings = randomNumbers.map(num => `kubejs:number_${num}`);

});
gleaming sky
storm spoke
#

Please send the whole script you're using now

queen spindleBOT
#

🗒️ Send the code! 🗒️

You may have an issue with a KubeJS script and you explain it to the best of your ability yet without the actual code in question we have very little to go off of in trying to assist you.

gleaming sky
queen spindleBOT
#

Paste version of password.js from @gleaming sky

storm spoke
#

Weird. pool is not in the script.

#

Does the same error occur after /reload?

gleaming sky
gleaming sky
# storm spoke Weird. pool is not in the script.

const seed = 637265617465;
const getRandomFromPool = () => seed[Math.floor(Math.random() * seed.length)];
The problem is that in this place, no matter if you replace the variable with pool or seed, you get a redeclaration error
When I searched for redeclaration errors I found other people trying to solve the problem using changing variables

Obviously it doesn't work.

storm spoke
#

How about moving the seed declaration outside the ServerEvents.recipe

gleaming sky
storm spoke
#

Then try move this whole section outside.

let code_json = JsonIO.read('kubejs/config/passcode.json');
      if (code_json === null) {
        const seed = 637265617465; 
        const getRandomFromPool = () => seed[Math.floor(Math.random() * seed.length)];
        const randomNumbers = [];
        for (let i = 0; i < 6; i++) {
          randomNumbers.push(getRandomFromPool());
        }  
        code_json = { code: randomNumbers };
        JsonIO.write('kubejs/config/passcode.json', code_json);
      }
      else{
        const randomNumbers = code_json.code
      }
      
     const numberMappings = randomNumbers.map(num => `kubejs:number_${num}`);
gleaming sky
#
// Test

const seed = 637265617465; 
let code_json = JsonIO.read('kubejs/config/passcode.json');
  if (code_json === null) {
    const getRandomFromPool = () => seed[Math.floor(Math.random() * seed.length)];
    const randomNumbers = [];
    for (let i = 0; i < 6; i++) {
      randomNumbers.push(getRandomFromPool());
    }  
    code_json = { code: randomNumbers };
    JsonIO.write('kubejs/config/passcode.json', code_json);
  }
  else{
    const randomNumbers = code_json.code
  }

  const numberMappings = randomNumbers.map(num => `kubejs:number_${num}`);

ServerEvents.recipes(event => {
  
  event.recipes.createSequencedAssembly(
    [
      Item.of('create:precision_mechanism').withChance(0.6),
      Item.of('minecraft:dead_bush').withChance(0.4),
    ],
    'alltheores:gold_plate',
    [
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[0]]),
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[1]]),
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[2]]),
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[3]]),
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[4]]),
      event.recipes.createDeploying('create:incomplete_precision_mechanism', ['create:incomplete_precision_mechanism', numberMappings[5]]),
    ]
  )
    .transitionalItem('create:incomplete_precision_mechanism')
    .loops(1)
    .id('kubejs:create/sequenced_assembly/precision_mechanism');
});
#

Okay, I finally found a way to fix it.

#
const seed = '637265617465'; 

let code_json = JsonIO.read('kubejs/config/passcode.json');
let randomNumbers;

const getRandomFromSeed = () => seed[Math.floor(Math.random() * seed.length)];

if (code_json === null) {
  randomNumbers = [];
  for (let i = 0; i < 6; i++) {
    randomNumbers.push(getRandomFromSeed());
  }
  code_json = { code: randomNumbers };
  JsonIO.write('kubejs/config/passcode.json', code_json);
} else {
  randomNumbers = code_json.code;
}

Make all the judgment parts look like this

#

After that a passcode.json will be generated that looks like this

{
    "code": [
        "3",
        "1",
        "5",
        "6",
        "7",
        "6"
    ]
}
#

The end result is completely fixed and it's great

#

@storm spoke Thank you for your help