当前位置: 首页 > 知识库问答 >
问题:

Minecraft Forge:生成块时的事件

巫健柏
2023-03-14

在1.7.10中是否有一个事件用于当一个块生成时,所以我可以在它上面放置一些东西。还是我一定要在这一代人中做到这一点?

我已经上网了,但我找不到

onBlockGenerated

事件之类的。

共有1个答案

林德辉
2023-03-14

您需要扩展WorldGenerator

class Foo extends WorldGenerator {
     protected Block[] GetValidSpawnBlocks() {
      return new Block[] { Blocks.quartz };
   }
    public boolean generate(final World world, final Random rand, final int x, final int y, final int z) {
        world.setBlock(x,y+1,z,FooModBlocks.yourFancyBlock,0,2);
    }
}

并将其注册到iworldgenerator中

public class MagicCookieWorldGen implements IWorldGenerator {
   private Foo myGenerator;
   public MagicCookieWorldGen() {
       super();
       myGenerator = new Foo();
   }
   @Override
    public void generate(Random random, int chunkX, int chunkZ, World world,
            IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
          this.worldGeneration(random, chunkX, chunkZ, world, true);
    }

    public void worldGeneration(final Random random, final int chunkX, final int chunkZ, final World world, final boolean newGen) {
         switch (world.provider.dimensionId) {
             case -1: {
                 this.generateNether(world, random, chunkX, chunkZ, newGen);
                 break;
             }
             case 1: {
                 break;
             }
             default: {
                 break;
             }
         }

    }
    private void generateNether(final World world, final Random random, final int chunkX, final int chunkZ, final boolean newGen) {
         int startX = chunkX * 16;
         int startZ = chunkZ * 16;
         int startY = 5;
         int endX = startX + 16;
         int endZ = startZ + 16;
         int endY = 65;

         for(int x=startX;x<endX;x++)for(int z=startZ;z<endZ;z++)for(int y = startY;y<endY;y++) {
              Block block = world.getBlock(x,y,z);
              for(Block match : Foo.GetValidSpawnBlocks()) {
                  if(match == block) {
                      Foo.generate(world, final Random random, x, y, z);
                      break;
                  }
              }
         }
    }

}

然后在init阶段的commonproxy中

GameRegistry.registerWorldGenerator((IWorldGenerator)(StuffLoader.worldGenerator = new MagicCookieWorldGen()), 0);
        MagicCookie.log.info("Registered worldgenerator" + StuffLoader.worldGenerator);
 类似资料:
  • 使用newBlockHeaders参数订阅新的区块头生成事件。可用做检查区块链上变化的计时器。 调用: web3.eth.subscribe('newBlockHeaders' [, callback]); 参数: type:String - "newBlockHeaders", 订阅类型 callback:Function - 可选的回调函数,其第一个参数为错误对象,第二个参数为结果 返回值:

  • 我试图使用Flux.create生成异步服务器发送事件。当我的客户端连接时,请求最终超时,并且没有收到任何事件。我硬编码了一个由Flux发送的事件。创建只是为了查看数据流,但客户端仍然没有收到任何数据。 客户端(Angular)代码: 我从来没有看到一个事件来自事件源。最终请求超时,我看到错误:< code > net::ERR _ EMPTY _ RESPONSE 我是使用WebFlux的新手,

  • 我正在构建一个Flink流媒体应用程序,并且更喜欢使用事件时间,因为它将确保在历史数据出现故障或重播时,所有设置的计时器都将决定性地触发。事件时间的问题在于,只有当事件发生时,时间才会向前移动。我们的数据源(物理传感器)有时产生的数据很少,因此有时单个数据点可能会打开一个5分钟的聚合窗口,但下一个数据点会在20分钟后关闭,因此窗口会很晚关闭并发出输出记录。 我们提出的解决方案是使用AWS lamb

  • tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好。 tempfile 模块中常用的函数,如表 1 所示。 表 1 tempfile 模块常用函数及功能 tempfile 模块函数 功能描述 tempfile.TemporaryFile(mode='w+b', buffering=None, encoding=Non

  • 我最近开始用Eclipse在Minecraft 1.8中进行修改。我创建了一个测试模块,它工作得非常好。然后我决定从头开始新的mod。 我几乎马上就被我的输入搞错了。 我试着按Ctrl-Shift-O来组织我的导入,但它只是删除了它们,因为它们无法解析。我试图回到我以前的项目,但导入也不起作用。 玩了一会儿之后,我意识到其他进口商品也在起作用。 只有网。minecraftforge的进口产品不起作