瞬時計劃刻

瞬時計劃刻 - Instant Tile Tick(ITT)

瞬時計劃刻 (Instant Tile Tick - ITT)

minecraft 為了在區塊裝飾時預先處理流體等方塊,故添加了本規則。(後續文章可能會使用 ITT 來代指它 [瞬時計劃刻 Instant Tile Tick])

  • WorldGenHellLava 地域岩漿
  • WorldGenLiquids 基本流體
  • StructureNetherBridgePieces 地域堡壘生成 (由於放置了 FLOWING_LAVA 流動岩漿)
World.java
WorldServer.java
public abstract class World implements IBlockAccess {
  public boolean scheduledUpdatesAreImmediate; }

在哪被修改

scheduledUpdatesAreImmediate 會在 immediateBlockTick 函數內被修改。

World.java
public abstract class World implements IBlockAccess {
  public void immediateBlockTick(BlockPos pos, IBlockState state, Random random) {
    this.scheduledUpdatesAreImmediate = true;
    state.getBlock().updateTick(this, pos, state, random);
    this.scheduledUpdatesAreImmediate = false;
  }
}

immediateBlockTick 會被下面這些代碼呼叫。

WorldGenHellLava.java
WorldGenLiquids.java
StructureNetherBridgePieces.java
public class WorldGenHellLava extends WorldGenerator { // 地獄岩漿生成  // ...

  public boolean generate(World worldIn, Random rand, BlockPos position) {     if (worldIn.getBlockState(position.up()).getBlock() != Blocks.NETHERRACK) {
      return false;
    }
    // ...
    else {
      int i = 0;
      int j = 0;

      // ...

      if (!this.insideRock && i == 4 && j == 1 || i == 5) {
        IBlockState iblockstate = this.block.getDefaultState();
        worldIn.setBlockState(position, iblockstate, 2);
        worldIn.immediateBlockTick(position, iblockstate, rand);       }

      return true;
    }
  } } 

如何開啟

在區塊生成(裝飾)時,會開啟 ITT,並放置水、岩漿等方塊。 由於 ITT 開啟,這些方塊會立刻流動完畢。若此時產生更新抑制,後續程式(包含關閉 ITT)會被跳過,導致 ITT 未被關閉。

開啟後也會同時開啟 IF (方塊快速下落),若只需要 ITT 請參考 IF 關法

如何關閉

  1. 重啟服務器
  2. 重新加載之前未被加載過的區塊 (裝飾),注意你要關哪個緯度就要在哪個緯度重新加載區塊

若不需要 IF,請參考 IF 關法

開啟時影響

偵測器

開啟後偵測器檢測偵測器時,不管是亮還是滅都會被下一個偵測器檢測到,造成指數級更新。請注意不要在主線程放置會導致主線程卡死並觸發 WatchDog 超時崩潰。

注意事項

  1. 不可再主進程放置臉對臉或長偵測器鏈等會造成指數級更新的方塊,這會導致主線程卡死
  2. 不可放置及更新:
  • 冰霜
  • 絆線鉤
  • 壓力板 < 請特別注意他,由其是神奇村莊 !!! 會有一堆神奇壓力板桌子,村民會碰到 😭
  • 感測鐵軌
  • 減法比較器高頻