簡體   English   中英

如何簡化Minecraft結構生成BlockPos變量

[英]How can I simplify Minecraft structure generation BlockPos variables

我在Minecraft中有一個結構gen類。 結構中有79個街區。 每個塊的位置都聲明為變量:

int x = pos.getX();
int y = pos.getY();
int z = pos.getZ();
BlockPos pos1 = new BlockPos(x + 3, y + -1, z + 0);
BlockPos pos2 = new BlockPos(x + 4, y + -1, z + 0);
BlockPos pos3 = new BlockPos(x + 5, y + -1, z + 0);
BlockPos pos4 = new BlockPos(x + 2, y + -1, z + 1);
BlockPos pos5 = new BlockPos(x + 3, y + -1, z + 1);
BlockPos pos6 = new BlockPos(x + 4, y + -1, z + 1);
BlockPos pos7 = new BlockPos(x + 5, y + -1, z + 1);
BlockPos pos8 = new BlockPos(x + 6, y + -1, z + 1);
BlockPos pos9 = new BlockPos(x + 1, y + -1, z + 2);
BlockPos pos10 = new BlockPos(x + 2, y + -1, z + 2);
BlockPos pos11 = new BlockPos(x + 3, y + -1, z + 2);
BlockPos pos12 = new BlockPos(x + 4, y + -1, z + 2);
BlockPos pos13 = new BlockPos(x + 5, y + -1, z + 2);
BlockPos pos14 = new BlockPos(x + 6, y + -1, z + 2);
BlockPos pos15 = new BlockPos(x + 7, y + -1, z + 2);
BlockPos pos16 = new BlockPos(x + 0, y + -1, z + 3);
BlockPos pos17 = new BlockPos(x + 1, y + -1, z + 3);
BlockPos pos18 = new BlockPos(x + 2, y + -1, z + 3);
BlockPos pos19 = new BlockPos(x + 3, y + -1, z + 3);
BlockPos pos20 = new BlockPos(x + 4, y + -1, z + 3);
BlockPos pos21 = new BlockPos(x + 5, y + -1, z + 3);
BlockPos pos22 = new BlockPos(x + 6, y + -1, z + 3);
BlockPos pos23 = new BlockPos(x + 7, y + -1, z + 3);
BlockPos pos24 = new BlockPos(x + 8, y + -1, z + 3);
BlockPos pos25 = new BlockPos(x + 0, y + -1, z + 4);
BlockPos pos26 = new BlockPos(x + 1, y + -1, z + 4);
BlockPos pos27 = new BlockPos(x + 2, y + -1, z + 4);
BlockPos pos28 = new BlockPos(x + 3, y + -1, z + 4);
BlockPos pos29 = new BlockPos(x + 4, y + -1, z + 4);
BlockPos pos30 = new BlockPos(x + 5, y + -1, z + 4);
BlockPos pos31 = new BlockPos(x + 6, y + -1, z + 4);
BlockPos pos32 = new BlockPos(x + 7, y + -1, z + 4);
BlockPos pos33 = new BlockPos(x + 8, y + -1, z + 4);
BlockPos pos34 = new BlockPos(x + 0, y + -1, z + 5);
BlockPos pos35 = new BlockPos(x + 1, y + -1, z + 5);
BlockPos pos36 = new BlockPos(x + 2, y + -1, z + 5);
BlockPos pos37 = new BlockPos(x + 3, y + -1, z + 5);
BlockPos pos38 = new BlockPos(x + 4, y + -1, z + 5);
BlockPos pos39 = new BlockPos(x + 5, y + -1, z + 5);
BlockPos pos40 = new BlockPos(x + 6, y + -1, z + 5);
BlockPos pos41 = new BlockPos(x + 7, y + -1, z + 5);
BlockPos pos42 = new BlockPos(x + 8, y + -1, z + 5);
BlockPos pos43 = new BlockPos(x + 1, y + -1, z + 6);
BlockPos pos44 = new BlockPos(x + 2, y + -1, z + 6);
BlockPos pos45 = new BlockPos(x + 3, y + -1, z + 6);
BlockPos pos46 = new BlockPos(x + 4, y + -1, z + 6);
BlockPos pos47 = new BlockPos(x + 5, y + -1, z + 6);
BlockPos pos48 = new BlockPos(x + 6, y + -1, z + 6);
BlockPos pos49 = new BlockPos(x + 7, y + -1, z + 6);
BlockPos pos50 = new BlockPos(x + 2, y + -1, z + 7);
BlockPos pos51 = new BlockPos(x + 3, y + -1, z + 7);
BlockPos pos52 = new BlockPos(x + 4, y + -1, z + 7);
BlockPos pos53 = new BlockPos(x + 5, y + -1, z + 7);
BlockPos pos54 = new BlockPos(x + 6, y + -1, z + 7);
BlockPos pos55 = new BlockPos(x + 3, y + -1, z + 8);
BlockPos pos56 = new BlockPos(x + 4, y + -1, z + 8);
BlockPos pos57 = new BlockPos(x + 5, y + -1, z + 8);
BlockPos pos58 = new BlockPos(x + 2, y + 0, z + 2);
BlockPos pos59 = new BlockPos(x + 6, y + 0, z + 2);
BlockPos pos60 = new BlockPos(x + 3, y + 0, z + 3);
BlockPos pos61 = new BlockPos(x + 4, y + 0, z + 3);
BlockPos pos62 = new BlockPos(x + 5, y + 0, z + 3);
BlockPos pos63 = new BlockPos(x + 3, y + 0, z + 4);
BlockPos pos64 = new BlockPos(x + 4, y + 0, z + 4);
BlockPos pos65 = new BlockPos(x + 5, y + 0, z + 4);
BlockPos pos66 = new BlockPos(x + 3, y + 0, z + 5);
BlockPos pos67 = new BlockPos(x + 4, y + 0, z + 5);
BlockPos pos68 = new BlockPos(x + 5, y + 0, z + 5);
BlockPos pos69 = new BlockPos(x + 2, y + 0, z + 6);
BlockPos pos70 = new BlockPos(x + 6, y + 0, z + 6);
BlockPos pos71 = new BlockPos(x + 3, y + 1, z + 3);
BlockPos pos72 = new BlockPos(x + 5, y + 1, z + 3);
BlockPos pos73 = new BlockPos(x + 3, y + 1, z + 5);
BlockPos pos74 = new BlockPos(x + 5, y + 1, z + 5);
BlockPos pos75 = new BlockPos(x + 4, y + 2, z + 3);
BlockPos pos76 = new BlockPos(x + 3, y + 2, z + 4);
BlockPos pos77 = new BlockPos(x + 5, y + 2, z + 4);
BlockPos pos78 = new BlockPos(x + 4, y + 2, z + 5);
BlockPos pos79 = new BlockPos(x + 4, y + 3, z + 4);

我該如何簡化呢?

我曾就Java List ,數組和Map咨詢過Google,但我要么無法將它們應用於我的目標,要么比這更復雜。

您可以在游戲中使用結構塊來創建結構文件,然后可以加載該文件。

  1. 建立世界的結構。
  2. 使用結構塊將結構保存到文件
  3. 將.nbt文件放在正確的文件夾'resource_root / modid / structures /'中
    您可以將文件放在子文件夾中。
  4. 將結構生成到世界。

在這里,可以使用給定settings生成在Dimension world pos位置loc下找到的Structure的函數。

public static boolean placeStructureInWorld(BlockPos pos, World world,ResourceLocation loc, PlacementSettings settings){  
    if(!world.isRemote && world instanceof WorldServer){  
        WorldServer worldServer = (WorldServer) world;  
        Template tmp = worldServer
                      .getStructureTemplateManager()
                      .get(worldServer.getMinecraftServer(),loc);  
        if(tmp==null)return false;  
        tmp.addBlocksToWorldChunk(world,pos,settings);  
        return true;  
    }  
    return false;  
}  

如果可以構建該結構,它將返回true,如果在邏輯客戶端上運行或無法加載模板,則它可能會失敗。

ResourceLocation和文件夾的示例:

范例1:

Modid =“測試”
結構文件名稱=“ test_struct.nbt”
文件夾:“ resource_root / test / structures /” ResourceLocation: new ResourceLocation("test","test_struct")

范例2:

Modid =“測試”
結構文件名稱=“ test_struct.nbt”
文件夾:“ resource_root / test / structures / subfolder /” ResourceLocation: new ResourceLocation("test","subfolder/test_struct")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM