From 665fbffa27e07b3018562afdadf82fe4c30c1969 Mon Sep 17 00:00:00 2001 From: Pqvel1l Date: Fri, 5 Jul 2024 19:25:46 +0200 Subject: [PATCH] Added checker --- .../structorycraft/AltarStructureChecker.java | 62 ++++++++++++++++++ .../structorycraft/StructoryCraftMod.java | 8 +++ .../data/structorycraft/structures/tier1.nbt | Bin 0 -> 1179 bytes 3 files changed, 70 insertions(+) create mode 100644 src/main/java/com/pqvel1l/structorycraft/AltarStructureChecker.java create mode 100644 src/main/resources/data/structorycraft/structures/tier1.nbt diff --git a/src/main/java/com/pqvel1l/structorycraft/AltarStructureChecker.java b/src/main/java/com/pqvel1l/structorycraft/AltarStructureChecker.java new file mode 100644 index 0000000..1e78c2d --- /dev/null +++ b/src/main/java/com/pqvel1l/structorycraft/AltarStructureChecker.java @@ -0,0 +1,62 @@ +package com.pqvel1l.structorycraft; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtIo; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.state.property.Property; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Map; + +public class AltarStructureChecker { + + public boolean checkStructure(World world, BlockPos pos) { + // Загрузить NBT файл + NbtCompound nbtData = loadNBTFile("data/structorycraft/structures/tier1.nbt"); + + // Пройтись по всем блокам в структуре и проверить их + for (String key : nbtData.getKeys()) { + NbtCompound blockNBT = nbtData.getCompound(key); + BlockPos blockPos = BlockPos.fromLong(blockNBT.getLong("pos")); + BlockState expectedBlockState = createBlockStateFromNbt(blockNBT.getCompound("state")); + + BlockState actualBlockState = world.getBlockState(pos.add(blockPos)); + if (!actualBlockState.equals(expectedBlockState)) { + return false; + } + } + return true; + } + + private NbtCompound loadNBTFile(String filePath) { + try (FileInputStream fileInputStream = new FileInputStream(new File(filePath))) { + return NbtIo.readCompressed(fileInputStream); + } catch (IOException e) { + e.printStackTrace(); + return new NbtCompound(); + } + } + + private BlockState createBlockStateFromNbt(NbtCompound nbt) { + Block block = Block.getBlockFromItem(net.minecraft.item.Item.byRawId(nbt.getInt("id"))); + BlockState state = block.getDefaultState(); + + for (String key : nbt.getKeys()) { + Property property = block.getStateManager().getProperty(key); + if (property != null) { + state = applyProperty(state, property, nbt.getString(key)); + } + } + + return state; + } + + private > BlockState applyProperty(BlockState state, Property property, String value) { + return state.with(property, property.parse(value).orElseThrow(IllegalArgumentException::new)); + } +} diff --git a/src/main/java/com/pqvel1l/structorycraft/StructoryCraftMod.java b/src/main/java/com/pqvel1l/structorycraft/StructoryCraftMod.java index aa18950..50112ce 100644 --- a/src/main/java/com/pqvel1l/structorycraft/StructoryCraftMod.java +++ b/src/main/java/com/pqvel1l/structorycraft/StructoryCraftMod.java @@ -1,6 +1,8 @@ package com.pqvel1l.structorycraft; import net.fabricmc.api.ModInitializer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -9,7 +11,13 @@ public class StructoryCraftMod implements ModInitializer { public static final String MODID = "structorycraft"; public static final Logger LOGGER = LoggerFactory.getLogger(MODID); + + @Override public void onInitialize() { } + public boolean checkAltarStructure(World world, BlockPos pos) { + AltarStructureChecker checker = new AltarStructureChecker(); + return checker.checkStructure(world, pos); + } } \ No newline at end of file diff --git a/src/main/resources/data/structorycraft/structures/tier1.nbt b/src/main/resources/data/structorycraft/structures/tier1.nbt new file mode 100644 index 0000000000000000000000000000000000000000..0d4fd8975690bd7bb7506b0dcb23712c55c7aeea GIT binary patch literal 1179 zcmb2|=3oGW|3_yX%#$`3Xxka1r+czg__@FqjS2gl&f9*E`Eq5ogXfejEB1)&;F|#}$zAgNn7b`q}UnqVj-1Ee*=L)}Jkp2Iw6Mri{OPcenNBV_aK1 z3c1`~wV&J7UH8mJd8hTdYjgHbU)!`&^i1pTrv3M|S(8P5)+U(zHDL;te3mmaK}A0a ziq^jp-m~XGMC)$T8*?R2qM&CUMe@%DjVD#F{jf?jZtJ1bntSGeh>nTZrofc$4TO6c z;&BjJ-8wzIq7q6NmaI==d)mrsE8P6)P}4l^!++kIA6&4xT;>UaF4?~5F42Q zi6z^f@c@eXIASGw56zXBqIm*A+|}N*=g?^=aptG2u||2;16Q6?bEPT-7k`{|ZM9L) zZ{71T6}88W#pB9tnv2-K=Iore|GDH8&5XS|&rJ^kBUdAM!tWj1{AY;UG#jz*?AJd7 z5!?OvPW&gHQzB2^@syRf70!Rbp2}5}Z}B~P-o$s8+dl7lEICCy-1dI_{Jk$?RN0=g zM(Llg^fl1XUw1A0kav`R@{9W18ICg_HCP*J1j`htv!!-1zY~34ci#9#CHqd{=6U7o z?x_EAJa2vCuGTf6hkQZ4^3Ay0>3Fl{&P$!icfgF}#llean>c}*PzdumzirPicrN?I zkEiOM<9BOAkipeQcL_He@d4Eu@vQ}>T5H35XU?8Alu6S3_(gC^xbfpUe*TMlDl>NP zIF}e*cXs33ZJO&Jr|sZAEfm=H9qJ# z-^6RbWv1VrQ`TO#U7vgN59Q^_XO{NcA3OO=dE(~FZning zw@>``aD!>xR4-3{722XX}5gg&8L2KebDZgmv3+SA9i&2l>L!~ z-zA<#?w8KyU%G==Z1-8CL1DC`^)kw S^nTs`!`-p?tmbTW1_l7-N>zja literal 0 HcmV?d00001