Jump to content

[1.19.2] capture some blocks get the data, convert that data to nbt, then save the nbt as a textfile.nbt


perromercenary00

Recommended Posts

this one 

i want to remake structure's of mi mod but its complex to explain and don't speak naively English 

using code someones lend me for minecraft 1.16.5 i made a class that read the nbt files

this class read those nbt files and recreate the structures contained, also apply rotation based on the facing of the player 

and that works fine 



now i need to make the class to detect structures read those blocks an covert it to nbt data and save it to a text file 

i don't have access to the nbt rules so im guessing my way through and there is some knowledge holes  soo in need of help all the way here 

Spoiler

				
			// ########## ########## ########## ########## ########## ##########				
			public void addBlock_to_NBT(CompoundTag nbt, BlockPos pos, BlockState blkstate) {				
			//CompoundTag nbt = getBuildingNbt(structureName);				
			if (nbt == null) {				
			// load in blocks (list of blockPos and their palette index)				
			ListTag blocksNbt = nbt.getList("blocks", 10);				
			ListTag blockdata = new ListTag();				
			CompoundTag dx = new CompoundTag();				
			CompoundTag dy = new CompoundTag();				
			CompoundTag dz = new CompoundTag();				
			dx.putInt("x", pos.getX() );				
			dy.putInt("y", pos.getX() );				
			dz.putInt("z", pos.getX() );				
			ListTag NbtPosValues = new ListTag();				
			NbtPosValues.add(dx);				
			NbtPosValues.add(dy);				
			NbtPosValues.add(dz);				
			CompoundTag NbtPos = new CompoundTag();				
			NbtPos.put("pos", NbtPosValues);				
			blockdata.add(NbtPos);				
			

for why i interpetrate every block i wanna store must be represented as an nbt tag 
i call this blockdata 

and that block data must contain a tag named pos containing a list of int values for [x,y,z]

##########################################################################

anyway i see the block states are stored and returned by something called pallete 

ArrayList<BlockState> palette = getBuildingPalette(nbt);//¿some class to convert nbt data to blockstates i suppose it respect order

################### 

i need to make the opposite having a list of blockstates convert then to a nbt pallete and add that to the nbt data 

 

###################

also and later whit an nbt data i need to save it to a fisical txt.nbt file 

this code uses

CompoundTag nbt = getBuildingNbt(structureName); to read the fisical txt file 

so some where must be an equivalent function 

setBuildingNbt(structureName, CompoundTag nbt);

 

do you can point me this things 

or best a link to working code  saving nbt to fisical files ??

 

 

Spoiler

				
			package mercblk.util;				
			import java.util.ArrayList;				
			import java.util.Optional;				
			import net.minecraft.client.Minecraft;				
			import net.minecraft.core.BlockPos;				
			import net.minecraft.core.Direction;				
			import net.minecraft.nbt.CompoundTag;				
			import net.minecraft.nbt.ListTag;				
			import net.minecraft.nbt.NbtIo;				
			import net.minecraft.nbt.NbtUtils;				
			import net.minecraft.resources.ResourceLocation;				
			import net.minecraft.server.packs.resources.Resource;				
			import net.minecraft.server.packs.resources.ResourceManager;				
			import net.minecraft.world.level.Level;				
			import net.minecraft.world.level.LevelAccessor;				
			import net.minecraft.world.level.block.Rotation;				
			import net.minecraft.world.level.block.state.BlockState;				
			import net.minecraft.world.level.block.state.properties.BlockStateProperties;				
			public class NbtStructure {				
			public LevelAccessor warudo = null;				
			public LevelAccessor getWarudo() {				
			return warudo;				
			}				
			public void setWarudo(LevelAccessor warudo) {				
			this.warudo = warudo;				
			}				
			public String modname = "mercblk";				
			public String structureName = "";				
			public Rotation rot = Rotation.NONE;				
			private int ci_x = 0;				
			private int ci_y = 0;				
			private int ci_z = 0;				
			// ########## ########## ########## ########## ########## ##########				
			// BlockMap part				
			// ########## ########## ########## ########## ########## ##########				
			private BlockState blkstate = null;				
			private BlockPos blkpos = null;				
			private ResourceManager resourceManager = null;				
			private BlockMap bm = null;				
			// ########## ########## ########## ########## ########## ##########				
			// main constructor				
			// NBT part				
			// ########## ########## ########## ########## ########## ##########				
			public NbtStructure(Level warudo, String structureName) {				
			this.warudo = warudo;				
			this.getResourceManager();				
			this.structureName = structureName;				
			getBuildingBlocks(this.structureName);				
			}				
			public NbtStructure(Level warudo, String structureName, BlockPos cornerstone, Rotation rot) {				
			this.warudo = warudo;				
			this.getResourceManager();				
			this.ci_x = cornerstone.getX();				
			this.ci_y = cornerstone.getY();				
			this.ci_z = cornerstone.getZ();				
			this.rot = rot;				
			this.structureName = structureName;				
			getBuildingBlocks(this.structureName);				
			}				
			//########## ########## ########## ########## ########## ##########				
			//########## ########## ########## ########## ########## ##########				
			public NbtStructure(Level warudo, String structureName, BlockPos cornerstone, Direction facing) {				
			switch (facing) {				
			default:				
			case UP:				
			case DOWN:				
			case SOUTH:				
			this.rot = Rotation.NONE;				
			break;				
			case NORTH:				
			this.rot = Rotation.CLOCKWISE_180;				
			break;				
			case EAST:				
			this.rot = Rotation.COUNTERCLOCKWISE_90;				
			break;				
			case WEST:				
			this.rot = Rotation.CLOCKWISE_90;				
			break;				
			}				
			this.warudo = warudo;				
			this.bm = new BlockMap(warudo);				
			this.getResourceManager();				
			this.ci_x = cornerstone.getX();				
			this.ci_y = cornerstone.getY();				
			this.ci_z = cornerstone.getZ();				
			this.structureName = structureName;				
			getBuildingBlocks(this.structureName);				
			}				
			//########## ########## ########## ##########				
			public NbtStructure(BlockMap bm, String structureName, BlockPos cornerstone, Direction facing) {				
			switch (facing) {				
			default:				
			case UP:				
			case DOWN:				
			case SOUTH:				
			this.rot = Rotation.NONE;				
			break;				
			case NORTH:				
			this.rot = Rotation.CLOCKWISE_180;				
			break;				
			case EAST:				
			this.rot = Rotation.COUNTERCLOCKWISE_90;				
			break;				
			case WEST:				
			this.rot = Rotation.CLOCKWISE_90;				
			break;				
			}				
			this.bm = bm;				
			this.warudo = bm.level();				
			this.getResourceManager();				
			this.ci_x = cornerstone.getX();				
			this.ci_y = cornerstone.getY();				
			this.ci_z = cornerstone.getZ();				
			this.structureName = structureName;				
			getBuildingBlocks(this.structureName);				
			}				
			//########## ########## ########## ##########				
			public NbtStructure(BlockMap bm, String structureName) {				
			this.bm = bm;				
			this.warudo = bm.level();				
			this.getResourceManager();				
			this.structureName = structureName;				
			}				
			//########## ########## ########## ##########				
			public void spawnStructureAt(BlockPos cornerstone, Direction facing) {				
			switch (facing) {				
			default:				
			case UP:				
			case DOWN:				
			case SOUTH:				
			this.rot = Rotation.NONE;				
			break;				
			case NORTH:				
			this.rot = Rotation.CLOCKWISE_180;				
			break;				
			case EAST:				
			this.rot = Rotation.COUNTERCLOCKWISE_90;				
			break;				
			case WEST:				
			this.rot = Rotation.CLOCKWISE_90;				
			break;				
			}				
			this.ci_x = cornerstone.getX();				
			this.ci_y = cornerstone.getY();				
			this.ci_z = cornerstone.getZ();				
			getBuildingBlocks(this.structureName);				
			}				
			//########## ########## ########## ##########				
			public ResourceManager getResourceManager() {				
			if (resourceManager == null)				
			if (this.warudo.isClientSide())				
			this.resourceManager = Minecraft.getInstance().getResourceManager();				
			else				
			this.resourceManager = this.warudo.getServer().getResourceManager();				
			return resourceManager;				
			}				
			// ########## ########## ########## ########## ########## ##########				
			// load blocks from nbt.file to the blockmap				
			// ########## ########## ########## ########## ########## ##########				
			public void getBuildingBlocks(String structureName) {				
			CompoundTag nbt = getBuildingNbt(structureName);				
			if (nbt == null) {				
			System.out.println(" Structure not find [" + structureName + "]");				
			return;				
			}				
			// load in blocks (list of blockPos and their palette index)				
			ListTag blocksNbt = nbt.getList("blocks", 10);				
			ArrayList<BlockState> palette = getBuildingPalette(nbt);//¿some class to convert blockstate to nbt data				
			for (int i = 0; i < blocksNbt.size(); i++) {				
			CompoundTag blockdata = blocksNbt.getCompound(i);				
			ListTag blockPosNbt = blockdata.getList("pos", 3);				
			blkstate = palette.get(blockdata.getInt("state"));				
			blkpos = new BlockPos(blockPosNbt.getInt(0), blockPosNbt.getInt(1), blockPosNbt.getInt(2));				
			// rotate				
			blkstate = rotate_blockstate(blkstate, this.rot);				
			blkpos = rotate_blockpos(blkpos, this.rot);				
			// fit to corner stone block				
			blkpos = (new BlockPos((blkpos.getX() + this.ci_x), (blkpos.getY() + this.ci_y),				
			(blkpos.getZ() + this.ci_z)));				
			// save to the hash map				
			System.out.println("NBT add to BM " + blkpos );				
			this.bm.setBlockState(blkpos, blkstate);				
			// warudo.setBlock(blkpos, blkstate, 10);				
			}				
			}				
			// ########## ########## ########## ########## ########## ##########				
			public void addBlock_to_NBT(CompoundTag nbt, BlockPos pos, BlockState blkstate) {				
			//CompoundTag nbt = getBuildingNbt(structureName);				
			if (nbt == null) {				
			// load in blocks (list of blockPos and their palette index)				
			ListTag blocksNbt = nbt.getList("blocks", 10);				
			ListTag blockdata = new ListTag();				
			CompoundTag dx = new CompoundTag();				
			CompoundTag dy = new CompoundTag();				
			CompoundTag dz = new CompoundTag();				
			dx.putInt("x", pos.getX() );				
			dy.putInt("y", pos.getX() );				
			dz.putInt("z", pos.getX() );				
			ListTag NbtPosValues = new ListTag();				
			NbtPosValues.add(dx);				
			NbtPosValues.add(dy);				
			NbtPosValues.add(dz);				
			CompoundTag NbtPos = new CompoundTag();				
			NbtPos.put("pos", NbtPosValues);				
			blockdata.add(NbtPos);				
			//blkstate = palette.get(blockNbt.getInt("state"));				
			/*				
			blockNbt.addTag(0, pos.getX());				
			itemstacktag = new CompoundTag();				
			blockdata.put("pos", 3);				
			ListTag blockPosNbt = blockNbt.getList("pos", 3);				
			blkstate = palette.get(blockNbt.getInt("state"));				
			blkpos = new BlockPos(blockPosNbt.getInt(0), blockPosNbt.getInt(1), blockPosNbt.getInt(2));				
			ArrayList<BlockState> palette = getBuildingPalette(nbt);//¿some class to convert blockstate to nbt data				
			for (int i = 0; i < blocksNbt.size(); i++) {				
			CompoundTag blockNbt = blocksNbt.getCompound(i);				
			ListTag blockPosNbt = blockNbt.getList("pos", 3);				
			blkstate = palette.get(blockNbt.getInt("state"));				
			blkpos = new BlockPos(blockPosNbt.getInt(0), blockPosNbt.getInt(1), blockPosNbt.getInt(2));				
			// rotate				
			blkstate = rotate_blockstate(blkstate, this.rot);				
			blkpos = rotate_blockpos(blkpos, this.rot);				
			// fit to corner stone block				
			blkpos = (new BlockPos((blkpos.getX() + this.ci_x), (blkpos.getY() + this.ci_y),				
			(blkpos.getZ() + this.ci_z)));				
			// save to the hash map				
			System.out.println("NBT add to BM " + blkpos );				
			this.bm.setBlockState(blkpos, blkstate);				
			// warudo.setBlock(blkpos, blkstate, 10);				
			}				
			*/				
			}				
			}				
			// ########## ########## ########## ########## ########## ##########				
			// ########## ########## ########## ########## ########## ##########				
			public CompoundTag getBuildingNbt(String structureName) {				
			try {				
			ResourceLocation rl = new ResourceLocation(this.modname, "structures/" + structureName + ".nbt");				
			Optional<Resource> rs = this.resourceManager.getResource(rl);				
			return NbtIo.readCompressed(rs.get().open());				
			} catch (Exception e) {				
			// System.out.println(e);				
			return null;				
			}				
			}				
			// ########## ########## ########## ########## ########## ##########				
			public ArrayList<BlockState> getBuildingPalette(CompoundTag nbt) {				
			ArrayList<BlockState> palette = new ArrayList<>();				
			// load in palette (list of unique blockstates)				
			ListTag paletteNbt = nbt.getList("palette", 10);				
			for (int i = 0; i < paletteNbt.size(); i++)				
			palette.add(NbtUtils.readBlockState(paletteNbt.getCompound(i)));				
			return palette;				
			}				
			// ########## ########## ########## ##########				
			public BlockState rotate_blockstate(BlockState blkstate, Rotation rot) {				
			// Direccion				
			Direction facing = null;				
			if (blkstate.hasProperty(BlockStateProperties.FACING)) {				
			facing = blkstate.getValue(BlockStateProperties.FACING);				
			}				
			if (blkstate.hasProperty(BlockStateProperties.HORIZONTAL_FACING)) {				
			facing = blkstate.getValue(BlockStateProperties.HORIZONTAL_FACING);				
			}				
			Direction.Axis axix = null;				
			if (blkstate.hasProperty(BlockStateProperties.AXIS)) {				
			axix = blkstate.getValue(BlockStateProperties.AXIS);				
			}				
			if (blkstate.hasProperty(BlockStateProperties.HORIZONTAL_AXIS)) {				
			axix = blkstate.getValue(BlockStateProperties.HORIZONTAL_AXIS);				
			}				
			if (facing != null && facing != Direction.UP && facing != Direction.DOWN) {				
			switch (rot) {				
			default:				
			// du nothing				
			break;				
			case CLOCKWISE_180:				
			facing = facing.getOpposite();				
			break;				
			case CLOCKWISE_90:				
			facing = facing.getClockWise();				
			break;				
			case COUNTERCLOCKWISE_90:				
			facing = facing.getCounterClockWise();				
			break;				
			}				
			if (blkstate.hasProperty(BlockStateProperties.FACING)) {				
			blkstate = blkstate.setValue(BlockStateProperties.FACING, facing);				
			}				
			if (blkstate.hasProperty(BlockStateProperties.HORIZONTAL_FACING)) {				
			blkstate = blkstate.setValue(BlockStateProperties.HORIZONTAL_FACING, facing);				
			}				
			}				
			// axis				
			// Direction.Axis.valueOf(value.toUpperCase())				
			if (axix != null) {				
			switch (axix) {				
			default:				
			case Y:				
			// du nuthing				
			break;				
			case X:				
			axix = Direction.Axis.Z;				
			break;				
			case Z:				
			axix = Direction.Axis.X;				
			break;				
			}				
			if (blkstate.hasProperty(BlockStateProperties.AXIS)) {				
			blkstate = blkstate.setValue(BlockStateProperties.AXIS, axix);				
			}				
			if (blkstate.hasProperty(BlockStateProperties.HORIZONTAL_AXIS)) {				
			blkstate = blkstate.setValue(BlockStateProperties.HORIZONTAL_AXIS, axix);				
			}				
			}				
			// this thing dont works on mod made blocks				
			if (axix == null && facing == null) {				
			blkstate.rotate(rot);				
			}				
			return blkstate;				
			}				
			// ########## ########## ########## ##########				
			public BlockPos rotate_blockpos(BlockPos cursor, Rotation rot) {				
			switch (rot) {				
			default:				
			// case NORTH:				
			// du nuthing				
			break;				
			case CLOCKWISE_90:				
			cursor = new BlockPos(cursor.getZ() * -1, cursor.getY(), cursor.getX());				
			break;				
			case CLOCKWISE_180:				
			cursor = new BlockPos(cursor.getX() * -1, cursor.getY(), cursor.getZ() * -1);				
			break;				
			case COUNTERCLOCKWISE_90:				
			cursor = new BlockPos(cursor.getZ(), cursor.getY(), cursor.getX() * -1);				
			break;				
			}				
			return cursor;				
			}				
			// ########## ########## ########## ########## ########## ##########				
			// ########## ########## ########## ########## ########## ##########				
			//				
			public static String get_blkfullname(BlockState blkstate) {				
			if (blkstate == null) {				
			return "NULL";				
			}				
			String nnn = "" + blkstate.getBlock().getName().getString().toLowerCase();				
			return fix_blkfullname(nnn);				
			}				
			// ########## ########## ########## ########## ########## ##########				
			//				
			public static String fix_blkfullname(String blkfullname) {				
			if (blkfullname.contains(".")) {				
			String[] split1 = blkfullname.split("\\."); // "\\."				
			if (split1.length > 1) {				
			blkfullname = split1[split1.length - 1].replaceAll("_", " ");				
			}				
			}				
			return blkfullname.toLowerCase();				
			}				
			// ########## ########## ########## ##########				
			// ########## ########## ########## ##########				
			public static BlockPos chunk_northwest_corner(Level warudo, BlockPos pos) {				
			BlockPos min = null;				
			int subx = 0;				
			int subz = 0;				
			int abs = 0;				
			int factox = 0;				
			int factoz = 0;				
			// si el valor es negativo				
			if (pos.getX() < 0) {				
			abs = Math.abs(pos.getX());				
			factox = (abs / 16);				
			factox = ((abs % 16) > 0) ? factox + 1 : factox;				
			subx = -16 * factox;				
			} else {				
			subx = pos.getX() - (pos.getX() % 16);				
			}				
			// si el valor es negativo				
			if (pos.getZ() < 0) {				
			abs = Math.abs(pos.getZ());				
			factoz = (abs / 16);				
			factoz = ((abs % 16) > 0) ? factoz + 1 : factoz;				
			subz = -16 * factoz;				
			} else {				
			subz = pos.getZ() - (pos.getZ() % 16);				
			}				
			min = new BlockPos(subx, pos.getY(), subz);				
			return min;				
			}				
			// ########## ########## ########## ##########				
			public void setBlocks(){				
			bm.find_liquids();				
			bm.setBlocks();				
			}				
			// ########## ########## ########## ########## ########## ##########				
			public BlockMap getBm() {				
			return bm;				
			}				
			public void setBm(BlockMap bm) {				
			this.bm = bm;				
			}				
			// ########## ########## ########## ########## ########## ##########				
			// ########## ########## ########## ########## ########## ##########				
			// ########## ########## ########## ########## ########## ##########				
			// ########## ########## ########## ########## ########## ##########				
			}				
			 				
			

 

 

 

 


 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

Link to comment
Share on other sites

This is why you shouldn't just copy code/paste and instead try to understand what you are doing.

The code for this can be found in:

net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager
net.minecraft.nbt.NbtIo
net.minecraft.nbt.NbtUtils

You are already using some of these for reading the data. The writes are in the same place.

BTW: What you are trying to do sounds similar to what the JigsawBlock does?

Boilerplate:

If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one.

If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install

Large files should be posted to a file sharing site like https://gist.github.com  You should also read the support forum sticky post.

Link to comment
Share on other sites

yap kinda like jigsaw
but never find a compressive guide just the one spawning the tower 
also i have an obsession for levering the terrain and set random structure's based in the resulting highs of the levered terrain and at the end i want those random structure's to surrounding whit a fence or a wall and also sewers 

an there is this thing where house variants can have or not attics and basements i do that just by swapping random assigned parts up an down 

2023-03-19-07-12-29.png

 

 

still a good guide of jiwsaw would come in handly 

 

Edited by perromercenary00
Link to comment
Share on other sites

i quite advance here i successfully made the function to read the blocks sort them into a map and use that  map to create the nbt tags and find the method to convert that to a fisical text file 

################################

Spoiler

				
			// ########## ########## ########## ########## ########## ##########				
			public void setBuildingNbt(String structureName, CompoundTag nbt) {				
			try {				
			ResourceLocation rl = new ResourceLocation(this.modname, "structures/" + structureName + ".nbt");				
			Optional<Resource> rs = this.resourceManager.getResource(rl);				
			File file = new File( rl.getNamespace() + "/structures/" + structureName + ".nbt" ); //				
			if (file.exists()) {				
			file.delete();				
			}				
			file.createNewFile();				
			System.out.println("\n########## absolute pad >" + file.getAbsolutePath() + "<");				
			NbtIo.writeCompressed(nbt, file );				
			} catch (Exception e) {				
			System.out.println(e);				
			}				
			}				
			

this works it creates the file in 

file:///home/usuario/workspace/block/forge-1.19.2-43.2.1-mdk/run/mercblk/structures/xxxxxxxxxx.nbt

 

but i want it to drop the file into mi mod structure folder 

file:///home/usuario/workspace/block/forge-1.19.2-43.2.1-mdk/src/main/resources/data/mercblk/structures/

 

or at least drop it into the same folder the minecrafts vainilla   structure_block saves it files that would be the saves folder for the current world 

file:///home/usuario/workspace/block/forge-1.19.2-43.2.1-mdk/run/saves/New_World/generated/minecraft/structures/

 

this thing here 

	File file = new File( rl.getNamespace() + "/structures/" + structureName + ".nbt" ); //
	

how do i made to get the route to mi mod data folder ? 
or to the current world saves folder 

 

the full NbtStructure class

Spoiler

				
			package mercblk.util;				
			import java.io.File;
		import java.util.ArrayList;
		import java.util.HashMap;
		import java.util.HashSet;
		import java.util.Iterator;
		import java.util.Map;
		import java.util.Optional;
		import java.util.Set;				
			import net.minecraft.client.Minecraft;
		import net.minecraft.core.BlockPos;
		import net.minecraft.core.Direction;
		import net.minecraft.nbt.CompoundTag;
		import net.minecraft.nbt.ListTag;
		import net.minecraft.nbt.NbtIo;
		import net.minecraft.nbt.NbtUtils;
		import net.minecraft.resources.ResourceLocation;
		import net.minecraft.server.packs.resources.Resource;
		import net.minecraft.server.packs.resources.ResourceManager;
		import net.minecraft.world.level.Level;
		import net.minecraft.world.level.LevelAccessor;
		import net.minecraft.world.level.block.Block;
		import net.minecraft.world.level.block.Blocks;
		import net.minecraft.world.level.block.Rotation;
		import net.minecraft.world.level.block.state.BlockState;
		import net.minecraft.world.level.block.state.properties.BlockStateProperties;
		import net.minecraft.world.level.block.state.properties.Property;				
			public class NbtStructure {				
			    public Level warudo = null;				
			    public Level getWarudo() {
		        return warudo;
		    }				
			    public void setWarudo(Level warudo) {
		        this.warudo = warudo;
		    }				
			    public String modname = "mercblk";
		    public String structureName = "";
		    public Rotation rot = Rotation.NONE;				
			    private int ci_x = 0;
		    private int ci_y = 0;
		    private int ci_z = 0;
		    
		    //########## ########## ########## ##########    
		    private Map<BlockState, ArrayList<BlockPos>> mapa = new HashMap<BlockState, ArrayList<BlockPos>>();
		    
		    //########## ##########
		    public void  add_to_mapa(Postate pstate) {
		        
		        BlockState blkstate = pstate.getBlockState();
		        BlockPos position = pstate.get_blockpos();
		        ArrayList<BlockPos> sublista;
		        
		        if( this.mapa.containsKey(blkstate) ) {
		            sublista = mapa.get(blkstate);
		            
		            if(!sublista.contains(position)) {
		                sublista.add( position );    
		            }
		        }
		        else {
		            sublista = new ArrayList<BlockPos>();
		            sublista.add(position);
		            mapa.put(blkstate, sublista);
		        }
		    }    
		        
		    //########## ##########
		    public void  print_mapa() {
		        
		        Iterator<BlockState> mapi = mapa.keySet().iterator(); // keyset is a method
		        BlockState blkstate;
		        BlockPos position;
		        ArrayList<BlockPos> sublista;				
			        while (mapi.hasNext()) {
		            blkstate = mapi.next();
		            sublista = mapa.get(blkstate);
		            
		            System.out.println("\n----- - -----");
		            System.out.println( blkstate.getBlock().getName().getString() );
		            
		            String propiedades = "";
		            for (Property<?> porp : blkstate.getProperties()) {
		                System.out.println(porp.getName() + " -> " + blkstate.getValue(porp));
		                //propiedades += String.format(",\"%1$s\":\"%2$s\"", porp.getName(), blkstate.getValue(porp));
		            }
		            
		            for( BlockPos cursor : sublista ) {
		                System.out.println( "[" + cursor.getX() + ", " + cursor.getY() + ", " + cursor.getZ() + "]");
		            }
		            System.out.println(" ");
		        }
		        
		    }
		    
		    				
			
		    // ########## ########## ########## ########## ########## ##########
		    // BlockMap part
		    // ########## ########## ########## ########## ########## ##########				
			    private BlockState blkstate = null;
		    private BlockPos blkpos = null;
		    private ResourceManager resourceManager = null;
		    private BlockMap bm = null;				
			    // ########## ########## ########## ########## ########## ##########
		    // main constructor
		    // NBT part
		    // ########## ########## ########## ########## ########## ##########
		    
		    public NbtStructure(Level warudo) {
		        this.warudo = warudo;
		        this.getResourceManager();
		        
		    }
		    
		    
		    public NbtStructure(Level warudo, String structureName) {
		        this.warudo = warudo;
		        this.getResourceManager();				
			        this.structureName = structureName;
		        getBuildingBlocks(this.structureName);
		    }				
			    public NbtStructure(Level warudo, String structureName, BlockPos cornerstone, Rotation rot) {				
			        this.warudo = warudo;
		        this.getResourceManager();				
			        this.ci_x = cornerstone.getX();
		        this.ci_y = cornerstone.getY();
		        this.ci_z = cornerstone.getZ();				
			        this.rot = rot;				
			        this.structureName = structureName;
		        getBuildingBlocks(this.structureName);
		        
		    }				
			    //########## ########## ########## ########## ########## ##########
		    //########## ########## ########## ########## ########## ##########     
		    public NbtStructure(Level warudo, String structureName, BlockPos cornerstone, Direction facing) {				
			        switch (facing) {
		        default:
		        case UP:
		        case DOWN:
		        case SOUTH:
		            this.rot = Rotation.NONE;
		            break;
		        case NORTH:
		            this.rot = Rotation.CLOCKWISE_180;
		            break;
		        case EAST:
		            this.rot = Rotation.COUNTERCLOCKWISE_90;
		            break;
		        case WEST:
		            this.rot = Rotation.CLOCKWISE_90;
		            break;
		        }				
			        this.warudo = warudo;
		        this.bm = new BlockMap(warudo);
		        this.getResourceManager();				
			        this.ci_x = cornerstone.getX();
		        this.ci_y = cornerstone.getY();
		        this.ci_z = cornerstone.getZ();				
			        this.structureName = structureName;
		        getBuildingBlocks(this.structureName);
		    }				
			    //########## ########## ########## ##########    
		    public NbtStructure(BlockMap bm, String structureName, BlockPos cornerstone, Direction facing) {
		                
		        switch (facing) {
		        default:
		        case UP:
		        case DOWN:
		        case SOUTH:
		            this.rot = Rotation.NONE;
		            break;
		        case NORTH:
		            this.rot = Rotation.CLOCKWISE_180;
		            break;
		        case EAST:
		            this.rot = Rotation.COUNTERCLOCKWISE_90;
		            break;
		        case WEST:
		            this.rot = Rotation.CLOCKWISE_90;
		            break;
		        }				
			        this.bm = bm;        
		        this.warudo = bm.level();
		        this.getResourceManager();				
			        this.ci_x = cornerstone.getX();
		        this.ci_y = cornerstone.getY();
		        this.ci_z = cornerstone.getZ();				
			        this.structureName = structureName;
		        getBuildingBlocks(this.structureName);
		    }
		    
		    //########## ########## ########## ##########    
		    public NbtStructure(BlockMap bm, String structureName) {
		        this.bm = bm;        
		        this.warudo = bm.level();
		        this.getResourceManager();
		        this.structureName = structureName;
		    }    
		    
		    //########## ########## ########## ##########    
		    public void spawnStructureAt(BlockPos cornerstone, Direction facing) {
		        
		        switch (facing) {
		        default:
		        case UP:
		        case DOWN:
		        case SOUTH:
		            this.rot = Rotation.NONE;
		            break;
		        case NORTH:
		            this.rot = Rotation.CLOCKWISE_180;
		            break;
		        case EAST:
		            this.rot = Rotation.COUNTERCLOCKWISE_90;
		            break;
		        case WEST:
		            this.rot = Rotation.CLOCKWISE_90;
		            break;
		        }				
			        this.ci_x = cornerstone.getX();
		        this.ci_y = cornerstone.getY();
		        this.ci_z = cornerstone.getZ();				
			        getBuildingBlocks(this.structureName);
		    }
		    
		    //########## ########## ########## ##########
		    public ResourceManager getResourceManager() {				
			        if (resourceManager == null)
		            if (this.warudo.isClientSide())
		                this.resourceManager = Minecraft.getInstance().getResourceManager();
		            else
		                this.resourceManager = this.warudo.getServer().getResourceManager();				
			        return resourceManager;
		    }				
			    // ########## ########## ########## ########## ########## ##########
		    // load blocks from nbt.file to the blockmap
		    // ########## ########## ########## ########## ########## ##########
		    public void getBuildingBlocks(String structureName) {
		        CompoundTag nbt = getBuildingNbt(structureName);				
			        if (nbt == null) {
		            System.out.println(" Structure not find [" + structureName + "]");
		            return;
		        }
		        
		        System.out.println( NbtUtils.prettyPrint(nbt) );
		        				
			        // load in blocks (list of blockPos and their palette index)
		        ListTag blocksNbt = nbt.getList("blocks", 10);				
			        ArrayList<BlockState> palette = getBuildingPalette(nbt);//¿some class to convert blockstate to nbt data 				
			        for (int i = 0; i < blocksNbt.size(); i++) {
		            
		            
		            CompoundTag blockdata = blocksNbt.getCompound(i);//i from  "blocks" tag
		            ListTag blockPosNbt = blockdata.getList("pos", 3);//blockdata contains pos 				
			            blkstate = palette.get(blockdata.getInt("state"));//blockdata contains state and thats the index of the block 
		            
		            
		            
		            blkpos = new BlockPos(blockPosNbt.getInt(0), blockPosNbt.getInt(1), blockPosNbt.getInt(2));				
			            // rotate
		            blkstate = rotate_blockstate(blkstate, this.rot);
		            blkpos = rotate_blockpos(blkpos, this.rot);				
			            // fit to corner stone block
		            blkpos = (new BlockPos((blkpos.getX() + this.ci_x), (blkpos.getY() + this.ci_y),
		                    (blkpos.getZ() + this.ci_z)));				
			            // save to the hash map
		            //System.out.println("NBT add to BM "  + blkpos );
		            this.bm.setBlockState(blkpos, blkstate);
		            // warudo.setBlock(blkpos, blkstate, 10);
		        }
		    }				
			    // ########## ########## ########## ########## ########## ##########
		    public void capture_blocks(BlockPos pos) {				
			        //CompoundTag nbt = getBuildingNbt(structureName);
		            Postate startpoint = new Postate(this.warudo , pos);
		            //check all non air blocks in direct contact to this
		            
		            mapa.clear();
		            ArrayList<Postate> lista = check_surroundings(startpoint);
		            
		            for(Postate pstate : lista) {
		            add_to_mapa(pstate);
		            }				
			            //##########
		            //print_mapa();
		            
		            
		            
		            //xxxxx
		            CompoundTag nbt = new CompoundTag();
		            
		            //ListTag blocksNbt = nbt.getList("blocks", 10);
		            ListTag blocksNbt;
		            if( nbt.contains("blocks") ) {
		                blocksNbt = nbt.getList("blocks", 10);
		            }else {
		                blocksNbt = new ListTag();
		            }    
		            
		            
		            //ListTag paletteNbt = nbt.getList("palette", 10);
		            ListTag paletteNbt;
		            if( nbt.contains("palette") ) {
		                paletteNbt = nbt.getList("palette", 10);
		            }else {
		                paletteNbt = new ListTag();
		            }            
		            
		                        
		            
		            Iterator<BlockState> mapi = mapa.keySet().iterator(); // keyset is a method
		            BlockState blkstate;
		            BlockPos position;
		            ArrayList<BlockPos> sublista;
		            
		            CompoundTag nbtstate;// = NbtUtils.writeBlockState(blkstate);
		            CompoundTag nbtpos;// = NbtUtils.writeBlockPos(pos);
		            CompoundTag stateindex;//
		            
		            CompoundTag blockdata;//
		            
		            int state = 0;
		            while (mapi.hasNext()) {
		                blkstate = mapi.next();
		                sublista = mapa.get(blkstate);
		                
		                nbtstate = NbtUtils.writeBlockState(blkstate);
		                paletteNbt.add(nbtstate);
		                
		                
		                
		                for( BlockPos cursor : sublista ) {
		                    blockdata = new CompoundTag();
		                    
		                    blockdata.putInt("state", state);
		                                        
		                    nbtpos = NbtUtils.writeBlockPos(cursor);
		                    
		                    blockdata.put("pos", nbtpos);
		                    
		                    
		                    //int [] p = {cursor.getX(),cursor.getY(),cursor.getZ()}  ;
		                    
		                    //blockdata.putIntArray("pos", p );
		                    
		                    blocksNbt.add(blockdata);				
			                }
		                
		                state ++;
		            }
		            
		            nbt.put("blocks", blocksNbt);
		            nbt.put("palette", paletteNbt);
		            
		            
		            System.out.println( NbtUtils.prettyPrint(nbt) );
		            
		            
		            setBuildingNbt("xxxxxxxxxx", nbt);
		            
		            
		            
		            
		            
		/*
		        // load in blocks (list of blockPos and their palette index)
		        
		        //ListTag blocksNbt = nbt.getList("blocks", 10);
		        ListTag blocksNbt;
		        if( nbt.contains("blocks") ) {
		            blocksNbt = nbt.getList("blocks", 10);
		        }else {
		            blocksNbt = new ListTag();
		        }    
		        
		        
		        //ListTag paletteNbt = nbt.getList("palette", 10);
		        ListTag paletteNbt;
		        if( nbt.contains("palette") ) {
		            paletteNbt = nbt.getList("palette", 10);
		        }else {
		            paletteNbt = new ListTag();
		        }    
		        
		        
		        CompoundTag nbtstate = NbtUtils.writeBlockState(blkstate);
		        CompoundTag nbtpos = NbtUtils.writeBlockPos(pos);
		        
		        CompoundTag nbtstateindex = new CompoundTag();
		        nbtstateindex.putInt("state", 0);
		        
		        */
		        
		        /*				
			        ListTag blockdata = new ListTag();
		        
		        CompoundTag dx = new CompoundTag();
		        CompoundTag dy = new CompoundTag();
		        CompoundTag dz = new CompoundTag();
		        
		        dx.putInt("x", pos.getX() );
		        dy.putInt("y", pos.getX() );
		        dz.putInt("z", pos.getX() );
		        
		        ListTag NbtPosValues = new ListTag();
		        
		        NbtPosValues.add(dx);
		        NbtPosValues.add(dy);
		        NbtPosValues.add(dz);
		        
		        CompoundTag NbtPos = new CompoundTag();
		        NbtPos.put("pos", NbtPosValues);
		        
		        blockdata.add(NbtPos);
		        
		        */
		        
		                //.readBlockState(
		        
		        
		        //blkstate = palette.get(blockNbt.getInt("state"));
		        
		        
		        
		        
		        /*
		        blockNbt.addTag(0, pos.getX());
		        
		        
		        
		        itemstacktag = new CompoundTag();
		        
		        blockdata.put("pos", 3);
		        
		        
		        
		        ListTag blockPosNbt = blockNbt.getList("pos", 3);				
			        blkstate = palette.get(blockNbt.getInt("state"));
		        blkpos = new BlockPos(blockPosNbt.getInt(0), blockPosNbt.getInt(1), blockPosNbt.getInt(2));				
			        
		        
		        
		        				
			        ArrayList<BlockState> palette = getBuildingPalette(nbt);//¿some class to convert blockstate to nbt data 				
			        for (int i = 0; i < blocksNbt.size(); i++) {
		            
		            
		            CompoundTag blockNbt = blocksNbt.getCompound(i);
		            ListTag blockPosNbt = blockNbt.getList("pos", 3);				
			            blkstate = palette.get(blockNbt.getInt("state"));
		            blkpos = new BlockPos(blockPosNbt.getInt(0), blockPosNbt.getInt(1), blockPosNbt.getInt(2));				
			            // rotate
		            blkstate = rotate_blockstate(blkstate, this.rot);
		            blkpos = rotate_blockpos(blkpos, this.rot);				
			            // fit to corner stone block
		            blkpos = (new BlockPos((blkpos.getX() + this.ci_x), (blkpos.getY() + this.ci_y),
		                    (blkpos.getZ() + this.ci_z)));				
			            // save to the hash map
		            System.out.println("NBT add to BM "  + blkpos );
		            this.bm.setBlockState(blkpos, blkstate);
		            // warudo.setBlock(blkpos, blkstate, 10);
		        }
		        */
		        
		    }				
			    
		    // ########## ########## ########## ##########
		    public ArrayList<Postate> check_surroundings(Postate startpoint) {
		        int maxblocks = 8192;//like two chunks 				
			        ArrayList<Postate> lista = new ArrayList<Postate>();				
			        Set<BlockPos> sub_pos_list_A = new HashSet<BlockPos>();
		        Set<BlockPos> sub_pos_list_B = new HashSet<BlockPos>();
		        Set<BlockPos> cheked_blocks = new HashSet<BlockPos>();				
			        if (check_if_valid(this.warudo, startpoint.get_blockpos()) != null) {
		            lista.add(startpoint);
		        }
		        cheked_blocks.add(startpoint.get_blockpos());
		        sub_pos_list_A.add(startpoint.get_blockpos());
		        // sub_pos_list_B.add(center.pos);				
			        while (sub_pos_list_A.size() > 0) {
		            // System.out.println(String.format("revizar %1$s blockes",
		            // sub_pos_list_A.size()));				
			            for (BlockPos cursor : sub_pos_list_A) {
		                sub_pos_list_B.addAll(check_surroundings_pos_6(cursor));
		            }				
			            sub_pos_list_A.clear();
		            for (BlockPos cursor : sub_pos_list_B) {				
			                if (cheked_blocks.add(cursor)) {// si ya fue revizado antes ignorelo
		                    Postate sub_postate = check_if_valid(warudo, cursor);
		                    if (sub_postate != null) {
		                        lista.add(sub_postate);
		                        sub_pos_list_A.add(cursor);
		                    }
		                }
		            }
		            sub_pos_list_B.clear();				
			            if (lista.size() > maxblocks) {
		                break;
		            }				
			        }				
			        return lista;
		    }				
			    // ########## ########## ########## ##########
		    public Postate check_if_valid(Level warudo, BlockPos pos) {				
			        Postate postate = new Postate(warudo, pos);
		        // BlockState blkstate = postate.getBlockState();
		        Block bloque = postate.getBlockState().getBlock();				
			        if (bloque == Blocks.AIR) {
		            return null;
		        }				
			        /*
		        if (bloque == Blocks.DIRT) {
		            System.out.println("Es tierra");
		            //return null;
		        }				
			
		        if (bloque == Blocks.GRASS_BLOCK) {
		            System.out.println("Es pasto ");
		            //return null;
		        }				
			        if (bloque == Blocks.GRASS) {
		            System.out.println("Es pasto ");
		            //return null;
		        }
		        */				
			        return postate;
		    }				
			    // ########## ########## ########## ##########
		    public ArrayList<BlockPos> check_surroundings_pos_6(BlockPos center) {
		        ArrayList<BlockPos> sub_lista = new ArrayList<BlockPos>();				
			        sub_lista.add(center.above());
		        sub_lista.add(center.below());
		        sub_lista.add(center.east());
		        sub_lista.add(center.west());
		        sub_lista.add(center.north());
		        sub_lista.add(center.south());				
			        return sub_lista;
		    }
		    
		    
		    
		    
		    
		    
		    
		    
		    
		    
		    
		    // ########## ########## ########## ########## ########## ##########
		    // ########## ########## ########## ########## ########## ##########
		    public CompoundTag getBuildingNbt(String structureName) {
		        try {
		            ResourceLocation rl = new ResourceLocation(this.modname, "structures/" + structureName + ".nbt");
		            Optional<Resource> rs = this.resourceManager.getResource(rl);
		            return NbtIo.readCompressed(rs.get().open());
		        } catch (Exception e) {
		            // System.out.println(e);
		            return null;
		        }
		    }				
			    // ########## ########## ########## ########## ########## ##########
		    public void setBuildingNbt(String structureName, CompoundTag nbt) {
		        try {
		            ResourceLocation rl = new ResourceLocation(this.modname, "structures/" + structureName + ".nbt");
		            Optional<Resource> rs = this.resourceManager.getResource(rl);
		        
		            File file = new File( rl.getNamespace() + "/structures/" + structureName + ".nbt"   ); //  
		                        
		            if (file.exists()) {
		                file.delete();
		            }
		            file.createNewFile();
		            
		            System.out.println("\n########## absolute pad >" + file.getAbsolutePath() + "<");
		            
		            NbtIo.writeCompressed(nbt, file );
		            
		        } catch (Exception e) {
		            System.out.println(e);
		        }
		    }    
		    
		    
		    // ########## ########## ########## ########## ########## ##########
		    public ArrayList<BlockState> getBuildingPalette(CompoundTag nbt) {
		        ArrayList<BlockState> palette = new ArrayList<>();
		        // load in palette (list of unique blockstates)
		        ListTag paletteNbt = nbt.getList("palette", 10);
		        for (int i = 0; i < paletteNbt.size(); i++)
		            palette.add(NbtUtils.readBlockState(paletteNbt.getCompound(i)));
		        return palette;
		    }				
			    // ########## ########## ########## ##########
		    public BlockState rotate_blockstate(BlockState blkstate, Rotation rot) {				
			        // Direccion
		        Direction facing = null;				
			        if (blkstate.hasProperty(BlockStateProperties.FACING)) {
		            facing = blkstate.getValue(BlockStateProperties.FACING);
		        }				
			        if (blkstate.hasProperty(BlockStateProperties.HORIZONTAL_FACING)) {
		            facing = blkstate.getValue(BlockStateProperties.HORIZONTAL_FACING);
		        }				
			        Direction.Axis axix = null;
		        if (blkstate.hasProperty(BlockStateProperties.AXIS)) {
		            axix = blkstate.getValue(BlockStateProperties.AXIS);
		        }				
			        if (blkstate.hasProperty(BlockStateProperties.HORIZONTAL_AXIS)) {
		            axix = blkstate.getValue(BlockStateProperties.HORIZONTAL_AXIS);
		        }				
			        if (facing != null && facing != Direction.UP && facing != Direction.DOWN) {
		            switch (rot) {
		            default:
		                // du nothing
		                break;
		            case CLOCKWISE_180:
		                facing = facing.getOpposite();
		                break;
		            case CLOCKWISE_90:
		                facing = facing.getClockWise();
		                break;
		            case COUNTERCLOCKWISE_90:
		                facing = facing.getCounterClockWise();
		                break;
		            }				
			            if (blkstate.hasProperty(BlockStateProperties.FACING)) {
		                blkstate = blkstate.setValue(BlockStateProperties.FACING, facing);
		            }				
			            if (blkstate.hasProperty(BlockStateProperties.HORIZONTAL_FACING)) {
		                blkstate = blkstate.setValue(BlockStateProperties.HORIZONTAL_FACING, facing);
		            }
		        }				
			        // axis
		        // Direction.Axis.valueOf(value.toUpperCase())				
			        if (axix != null) {				
			            switch (axix) {
		            default:
		            case Y:
		                // du nuthing
		                break;
		            case X:
		                axix = Direction.Axis.Z;
		                break;
		            case Z:
		                axix = Direction.Axis.X;
		                break;
		            }				
			            if (blkstate.hasProperty(BlockStateProperties.AXIS)) {
		                blkstate = blkstate.setValue(BlockStateProperties.AXIS, axix);
		            }				
			            if (blkstate.hasProperty(BlockStateProperties.HORIZONTAL_AXIS)) {
		                blkstate = blkstate.setValue(BlockStateProperties.HORIZONTAL_AXIS, axix);
		            }
		        }				
			        // this thing dont works on mod made blocks
		        if (axix == null && facing == null) {
		            blkstate.rotate(rot);
		        }				
			        return blkstate;
		    }				
			    // ########## ########## ########## ##########
		    public BlockPos rotate_blockpos(BlockPos cursor, Rotation rot) {
		        switch (rot) {
		        default:
		            // case NORTH:
		            // du nuthing
		            break;				
			        case CLOCKWISE_90:
		            cursor = new BlockPos(cursor.getZ() * -1, cursor.getY(), cursor.getX());
		            break;				
			        case CLOCKWISE_180:
		            cursor = new BlockPos(cursor.getX() * -1, cursor.getY(), cursor.getZ() * -1);
		            break;				
			        case COUNTERCLOCKWISE_90:
		            cursor = new BlockPos(cursor.getZ(), cursor.getY(), cursor.getX() * -1);
		            break;
		        }				
			        return cursor;
		    }				
			    // ########## ########## ########## ########## ########## ##########
		    // ########## ########## ########## ########## ########## ##########
		    //
		    public static String get_blkfullname(BlockState blkstate) {
		        if (blkstate == null) {
		            return "NULL";
		        }				
			        String nnn = "" + blkstate.getBlock().getName().getString().toLowerCase();				
			        return fix_blkfullname(nnn);
		    }				
			    // ########## ########## ########## ########## ########## ##########
		    //
		    public static String fix_blkfullname(String blkfullname) {
		        if (blkfullname.contains(".")) {
		            String[] split1 = blkfullname.split("\\."); // "\\."				
			            if (split1.length > 1) {
		                blkfullname = split1[split1.length - 1].replaceAll("_", " ");
		            }
		        }				
			        return blkfullname.toLowerCase();
		    }				
			    // ########## ########## ########## ##########
		    // ########## ########## ########## ##########
		    public static BlockPos chunk_northwest_corner(Level warudo, BlockPos pos) {
		        BlockPos min = null;				
			        int subx = 0;
		        int subz = 0;
		        int abs = 0;				
			        int factox = 0;
		        int factoz = 0;				
			        // si el valor es negativo
		        if (pos.getX() < 0) {
		            abs = Math.abs(pos.getX());				
			            factox = (abs / 16);
		            factox = ((abs % 16) > 0) ? factox + 1 : factox;
		            subx = -16 * factox;				
			        } else {
		            subx = pos.getX() - (pos.getX() % 16);
		        }				
			        // si el valor es negativo
		        if (pos.getZ() < 0) {
		            abs = Math.abs(pos.getZ());				
			            factoz = (abs / 16);
		            factoz = ((abs % 16) > 0) ? factoz + 1 : factoz;
		            subz = -16 * factoz;				
			        } else {
		            subz = pos.getZ() - (pos.getZ() % 16);
		        }				
			        min = new BlockPos(subx, pos.getY(), subz);
		        return min;
		    }				
			    
		    // ########## ########## ########## ##########
		    public void setBlocks(){
		        bm.find_liquids();
		        bm.setBlocks();    
		    }
		    
		    // ########## ########## ########## ########## ########## ##########
		    public BlockMap getBm() {
		        return bm;
		    }				
			    public void setBm(BlockMap bm) {
		        this.bm = bm;
		    }				
			    
		    // ########## ########## ########## ########## ########## ##########
		    // ########## ########## ########## ########## ########## ##########
		    // ########## ########## ########## ########## ########## ##########
		    // ########## ########## ########## ########## ########## ##########
		}
		 				
			

 

the testing item 

Spoiler

				
			
		package mercblk.item.rod;				
			import java.util.ArrayList;
		import java.util.Collections;
		import java.util.HashSet;
		import java.util.List;
		import java.util.Optional;
		import java.util.Set;				
			import mercblk.util.NbtStructure;
		import mercblk.util.Target;				
			import java.util.Map.Entry;
		import java.util.function.Predicate;				
			import net.minecraft.advancements.critereon.EntityPredicate;
		import net.minecraft.core.BlockPos;
		import net.minecraft.core.Direction;
		import net.minecraft.core.particles.ParticleTypes;
		import net.minecraft.network.chat.Component;
		import net.minecraft.resources.ResourceKey;
		import net.minecraft.server.level.ServerLevel;
		import net.minecraft.sounds.SoundEvents;
		import net.minecraft.world.InteractionHand;
		import net.minecraft.world.InteractionResultHolder;
		import net.minecraft.world.entity.Entity;
		import net.minecraft.world.entity.LivingEntity;
		import net.minecraft.world.entity.Pose;
		import net.minecraft.world.entity.ai.targeting.TargetingConditions;
		import net.minecraft.world.entity.player.Player;
		import net.minecraft.world.item.Item;
		import net.minecraft.world.item.ItemStack;
		import net.minecraft.world.item.Items;
		import net.minecraft.world.level.Level;
		import net.minecraft.world.level.block.Block;
		import net.minecraft.world.level.block.Blocks;
		import net.minecraft.world.level.block.state.BlockState;
		import net.minecraft.world.phys.AABB;
		import net.minecraft.world.phys.Vec2;
		import net.minecraft.world.phys.Vec3;
		import net.minecraftforge.registries.ForgeRegistries;				
			public class just_aButton extends Item {				
			    // ########## ########## ########## ##########
		    public just_aButton(Properties propiedad) {
		        super(propiedad);
		        // TODO Auto-generated constructor stub
		    }				
			    // ########## ########## ########## ##########
		    @Override
		    public InteractionResultHolder<ItemStack> use(Level warudo, Player pe, InteractionHand hand) {				
			        if (! warudo.isClientSide )
		        { 
		            
		            BlockPos p0 = new BlockPos( 0, 76, 5283 );
		            
		            NbtStructure nstr = new NbtStructure(warudo);
		            
		            nstr.capture_blocks(p0);
		        }				
			        return InteractionResultHolder.pass(pe.getItemInHand(hand));
		    }				
			    // ########## ########## ########## ##########
		    // ########## ########## ########## ##########
		    // ########## ########## ########## ##########
		    // ########## ########## ########## ##########				
			}				
			

some blocks i set floating in the air to capture this methods reads everything around the starting point ignoring air so  it will also reads water and crops also you must separate the extructure from the soil ol youll get 4096 blocks of dirt and stone whit the structure 
bloques-edit.gif
 

Link to comment
Share on other sites

Path worldSaveDirectory = minecraftServer.getWorldPath(LevelResource.ROOT);

Should get you the current save?

Boilerplate:

If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one.

If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install

Large files should be posted to a file sharing site like https://gist.github.com  You should also read the support forum sticky post.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hi everyone, I'm working on a mod where I need to display a custom GUI on top of the inventory screen that includes a slider. The goal is to allow the player to select a number using the slider, and then confirm the action, which will split an item stack (similar to shift-clicking, but with a custom number). I've successfully created custom GUIs before using Screen, but I’m running into a couple of issues when trying to integrate a slider into the inventory screen (AbstractContainerScreen): I found the slider in the forge package (net.minecraftforge.client.gui.widget.Slider), but I couldn’t find any usages or examples on how to properly implement it or use it in this context. My Questions: How can I properly integrate a slider into the custom gui screen ? Is net.minecraftforge.client.gui.widget.Slider the right class to use for this? If yes, are there any examples or recommended usages of this Forge slider widget? If not, what would be a good alternative to create a custom slider (maybe extending AbstractSlider or another class)? How do I ensure proper interaction between the slider and the rest of the inventory screen? Any advice, code snippets, or examples would be greatly appreciated! Thanks in advance for your help!
    • I can´t craft in minecraft because it shows: "forge empty tag", does anyone know a fix for this issue? Thank you for your time!
    • ---- Minecraft Crash Report ---- // Daisy, daisy... Time: 2024-10-13 19:15:43 Description: Exception in server tick loop java.lang.NullPointerException: Cannot invoke "com.cobblemon.mod.common.api.conditional.RegistryLikeCondition.fits(Object, net.minecraft.class_2378)" because "condition" is null     at com.cobblemon.mod.common.api.spawning.condition.SpawningCondition.fits(SpawningCondition.java:85)     at com.cobblemon.mod.common.api.spawning.condition.AreaTypeSpawningCondition.fits(AreaTypeSpawningCondition.java:30)     at com.cobblemon.mod.common.api.spawning.condition.GroundedTypeSpawningCondition.fits(GroundedTypeSpawningCondition.java:28)     at com.cobblemon.mod.common.api.spawning.condition.GroundedTypeSpawningCondition.fits(GroundedTypeSpawningCondition.java:24)     at com.cobblemon.mod.common.api.spawning.condition.SpawningCondition.isSatisfiedBy(SpawningCondition.java:68)     at com.cobblemon.mod.common.api.spawning.detail.SpawnDetail.isSatisfiedBy(SpawnDetail.java:78)     at com.cobblemon.mod.common.api.spawning.spawner.Spawner$DefaultImpls.getMatchingSpawns(Spawner.java:42)     at com.cobblemon.mod.common.api.spawning.spawner.TickingSpawner.getMatchingSpawns(TickingSpawner.java:31)     at com.cobblemon.mod.common.api.spawning.selection.FlatContextWeightedSelector.getSelectionData(FlatContextWeightedSelector.java:79)     at com.cobblemon.mod.common.api.spawning.selection.FlatContextWeightedSelector.select(FlatContextWeightedSelector.java:106)     at com.cobblemon.mod.common.api.spawning.spawner.AreaSpawner.run(AreaSpawner.java:94)     at com.cobblemon.mod.common.api.spawning.spawner.TickingSpawner.tick(TickingSpawner.java:71)     at com.cobblemon.mod.common.api.spawning.SpawnerManager.onServerTick(SpawnerManager.java:58)     at com.cobblemon.mod.common.events.ServerTickHandler.onTick(ServerTickHandler.java:20)     at com.cobblemon.mod.common.Cobblemon$initialize$7.invoke(Cobblemon.java:368)     at com.cobblemon.mod.common.Cobblemon$initialize$7.invoke(Cobblemon.java:368)     at com.cobblemon.mod.common.api.reactive.ObservableSubscription.handle(ObservableSubscription.java:16)     at com.cobblemon.mod.common.api.reactive.SimpleObservable.emit(SimpleObservable.java:39)     at com.cobblemon.mod.fabric.CobblemonFabric.initialize$lambda$8(CobblemonFabric.kt:440)     at net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents.lambda$static$2(ServerTickEvents.java:43)     at net.minecraft.server.MinecraftServer.handler$cka002$fabric-lifecycle-events-v1$onEndTick(MinecraftServer.java:6862)     at net.minecraft.server.MinecraftServer.method_3748(MinecraftServer.java:847)     at net.minecraft.server.MinecraftServer.method_29741(MinecraftServer.java:671)     at net.minecraft.server.MinecraftServer.method_29739(MinecraftServer.java:265)     at java.base/java.lang.Thread.run(Thread.java:1583) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Cobblemon -- Details:     Version: 1.5.2     Is Snapshot: false     Git Commit: df8f078 (https://gitlab.com/cable-mc/cobblemon/-/commit/df8f078d13702ab9a000438910b822ceffbb2248)     Branch: HEAD -- System Details -- Details:     Minecraft Version: 1.20.1     Minecraft Version ID: 1.20.1     Operating System: Linux (amd64) version 6.5.0-41-generic     Java Version: 21.0.4, Amazon.com Inc.     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode, sharing), Amazon.com Inc.     Memory: 3487078768 bytes (3325 MiB) / 5360320512 bytes (5112 MiB) up to 11567890432 bytes (11032 MiB)     CPUs: 2     Processor Vendor: AuthenticAMD     Processor Name: AMD Ryzen 7 5800X 8-Core Processor     Identifier: AuthenticAMD Family 25 Model 33 Stepping 0     Microarchitecture: Zen 3     Frequency (GHz): -0.00     Number of physical packages: 1     Number of physical CPUs: 8     Number of logical CPUs: 16     Graphics card #0 name: unknown     Graphics card #0 vendor: unknown     Graphics card #0 VRAM (MB): 0.00     Graphics card #0 deviceId: unknown     Graphics card #0 versionInfo: unknown     Virtual memory max (MB): 68443.22     Virtual memory used (MB): 51550.91     Swap memory total (MB): 4096.00     Swap memory used (MB): 793.75     JVM Flags: 2 total; -Xms128M -XX:MaxRAMPercentage=95.0     Fabric Mods:          a_man_with_plushies: A Man With Plushies 4.2.0         alloy_forgery: Alloy Forgery 2.1.2+1.20         almostunified: AlmostUnified 1.20.1-0.9.4         alternate-current: Alternate Current 1.9.0         amendments: Amendments 1.20-1.2.11         another_furniture: Another Furniture 1.20.1-3.0.1         appleskin: AppleSkin 2.5.1+mc1.20         architectury: Architectury 9.2.14         artifacts: Artifacts 9.5.13             cardinal-components-base: Cardinal Components API (base) 5.2.2             cardinal-components-entity: Cardinal Components API (entities) 5.2.2             expandability: ExpandAbility 9.0.4             step-height-entity-attribute: Step Height Entity Attribute 1.2.0         athena: Athena 3.1.2         attributefix: AttributeFix 21.0.4         automobility: Automobility 0.4.2+1.20.1-fabric             jsonem: JsonEM 0.2.1+1.20         bakery: [Let's Do] Bakery 1.1.15         balm-fabric: Balm 7.3.9             kuma_api: KumaAPI 20.1.8         barteringstation: Bartering Station 8.0.0         bbb: Building But Better 1.20.1-fabric-1.0.2         bcg_smp: BCG_SMP 1.0.1         bcgmusic: BCG Music 1.1.0-1.20.1         bcgutil: BCG Util 1.0.5         bclib: BCLib 3.0.14             wunderlib: WunderLib 1.1.5         beautify: Beautify 1.2.0+1.20.1         bedbenefits: BedBenefits 13.0.3         beekeeperhut: Friends&Foes - Beekeeper Hut 2.0.1         better_climbing: Better Climbing 3         bettercombat: Better Combat 1.8.6+1.20.1         betterdungeons: YUNG's Better Dungeons 1.20-Fabric-4.0.4             org_reflections_reflections: reflections 0.10.2         betterend: Better End 4.0.11         betterendisland: YUNG's Better End Island 1.20-Fabric-2.0.6         bettermineshafts: YUNG's Better Mineshafts 1.20-Fabric-4.0.4         betteroceanmonuments: YUNG's Better Ocean Monuments 1.20-Fabric-3.0.4         betterstrongholds: YUNG's Better Strongholds 1.20-Fabric-4.0.3         bitsandchisels: BitsAndChisels 2.7.3         blahaj: Blåhaj 0.3.2         boatbreakfix: Boat Break Fix 1.0.2         bookshelf: Bookshelf 20.2.13         brewery: [Let's Do] Brewery 1.1.9         bwncr: Bad Wither No Cookie Reloaded 3.17.0         candlelight: [Let's Do] Candlelight 1.2.13         cardinal-components: Cardinal Components API 5.2.2             cardinal-components-block: Cardinal Components API (blocks) 5.2.2             cardinal-components-chunk: Cardinal Components API (chunks) 5.2.2             cardinal-components-item: Cardinal Components API (items) 5.2.2             cardinal-components-level: Cardinal Components API (world saves) 5.2.2             cardinal-components-scoreboard: Cardinal Components API (scoreboard) 5.2.2             cardinal-components-world: Cardinal Components API (worlds) 5.2.2         carryon: Carry On 2.1.2.7         charmofundying: Charm of Undying 6.5.0+1.20.1         chefsdelight: Chefs Delight 1.0.3-fabric-1.20.1         chimes: Chimes 2.0.1         chipped: Chipped 3.0.6         clickadv: Clickable Advancements Mod 1.20.1-3.8         cloth-config: Cloth Config v11 11.1.136             cloth-basic-math: cloth-basic-math 0.6.1         clumps: Clumps 12.0.0.4         cobbledex: Cobbledex 1.1.0         cobbledollars: CobbleDollars 1.5.1+1.20.1         cobblemon: Cobblemon 1.5.2+1.20.1         cobblemon-ui-tweaks: Cobblemon UI Tweaks 1.0.6         cobblemon_capturexp: Cobblemon Capture EXP 1.5-fabric-1.0.1         cobblemon_counter: Cobblemon Counter 1.5-fabric-1.2.0         cobblemon_quests: Cobblemon Quests 1.1.11         cobblemon_spawn_notification: Cobblemon Spawn Notification 1.5-fabric-1.1.0         cobblemonbreakouts: Cobblemon Outbreaks fabric-1.1.4-1.20.1         cobblemontrainers: CobblemonTrainers 1.1.11+1.5.2         cobblepedia: Cobblepedia 0.6.8         cobbreeding: Cobbreeding 1.7.2         collective: Collective 7.84         comforts: Comforts 6.4.0+1.20.1         commonnetworking: Common Network 1.0.5-1.20.1         compact_storage: CompactStorage 6.0.1.64         connectivity: Connectivity Mod 1.20.1-5.8         convenientdecor: Convenient Decor 0.4.3             omega-config: OmegaConfig 1.4.0+1.20.1         copycats: Create: Copycats+ 2.1.4+mc.1.20.1-fabric         coroutil: CoroUtil 1.20.1-1.3.7         crawl: Crawl 0.12.0         create: Create 0.5.1-f-build.1417+mc1.20.1             com_google_code_findbugs_jsr305: jsr305 3.0.2             milk: Milk Lib 1.2.60                 dripstone_fluid_lib: Dripstone Fluid Lib 3.0.2             porting_lib_brewing: Porting Lib Brewing 2.3.2+1.20.1             porting_lib_client_events: Porting Lib Client Events 2.3.2+1.20.1             porting_lib_tags: Porting Lib Tags 3.0             registrate-fabric: Registrate for Fabric 1.3.62-MC1.20.1         create_cobblemon: Create: Cobblemon Industrialized 0.4         create_enchantment_industry: Create Enchantment Industry 1.2.16             create_dragon_lib: Create Dragon Lib 1.4.2         createaddition: Create Crafts & Additions 1.2.4         createbigcannons: Create Big Cannons 5.5.1+mc.1.20.1-fabric             ritchiesprojectilelib: Ritchie's Projectile Library 2.0.0-dev+mc.1.20.1-fabric-build.182                 porting_lib_utility: Porting Lib Utility 2.1.1127+1.20                     porting_lib_gametest: Porting Lib GameTest 2.1.1127+1.20         createdeco: Create Deco 2.0.2-1.20.1-fabric         creeperoverhaul: Creeper Overhaul 3.0.2         cupboard: cupboard 1.20.1-2.7         customcursorcomm: CustomCursorComm 1.2.0         dailyshop: Daily Shop 1.0.2         darkutils: DarkUtilities 17.0.5         debugify: Debugify 1.20.1+2.0         design_decor: Create: Design n' Decor 0.4.0b_fabric+1.20.1         deuf_refabricated: DEUF Refabricated 1.1.0         diagonalfences: Diagonal Fences 8.1.4         diagonalwalls: Diagonal Walls 8.0.3             diagonalblocks: Diagonal Blocks 8.0.5         diagonalwindows: Diagonal Windows 8.1.4         dimensionalsyncfixes: DimensionalSyncFixes 1.20.1-0.0.2         doapi: [Let's Do] API 1.2.15             terraform-wood-api-v1: Terraform Wood API (v1) 7.0.1         dragonfight: Dragonfight Mod 1.20.1-4.6         drippyloadingscreen: Drippy Loading Screen 3.0.2         e4mc_minecraft: e4mc 5.2.1             folk_sisby_kaleido-config: kaleido-config 0.3.1+1.3.1         easy_npc: Easy NPC 5.6.0         easyanvils: Easy Anvils 8.0.2         easymagic: Easy Magic 8.0.1         elytraslot: Elytra Slot 6.4.4+1.20.1             mixinsquared: MixinSquared 0.1.2-beta.6         emi: EMI 1.1.14+1.20.1+fabric         emi_letsdo_compat: emi-letsdo-compat 1.3         endermanoverhaul: Enderman Overhaul 1.0.4         endrem: End Remastered 5.2.4         ends_delight: End's Delight 2.1         entityculling: EntityCulling 1.7.0         everycomp: Every Compat 1.20-2.6.76             porting_lib_attributes: Porting Lib Attributes 2.3.4+1.20.1             porting_lib_common: Porting Lib Common 2.3.4+1.20.1             porting_lib_entity: Porting Lib Entity 2.3.4+1.20.1             porting_lib_extensions: Porting Lib Extensions 2.3.4+1.20.1             porting_lib_model_generators: Porting Lib Model Generators 2.3.4+1.20.1                 porting_lib_data: Porting Lib Data 2.3.4+1.20.1                 porting_lib_model_materials: Porting Lib Model Materials 2.3.4+1.20.1             porting_lib_model_loader: Porting Lib Model Loader 2.3.4+1.20.1             porting_lib_models: Porting Lib Models 2.3.4+1.20.1             porting_lib_obj_loader: Porting Lib Obj Loader 2.3.4+1.20.1             porting_lib_transfer: Porting Lib Transfer 2.3.4+1.20.1         expandeddelight: Expanded Delight 0.3.2         explorerscompass: Explorer's Compass 1.20.1-2.2.3-fabric         exposure: Exposure 1.7.7         extendedgears: Extended Cogwheels 2.1.1-1.20.1-0.5.1.f-fabric         fabric-api: Fabric API 0.92.2+1.20.1             fabric-api-base: Fabric API Base 0.4.31+1802ada577             fabric-api-lookup-api-v1: Fabric API Lookup API (v1) 1.6.36+1802ada577             fabric-biome-api-v1: Fabric Biome API (v1) 13.0.13+1802ada577             fabric-block-api-v1: Fabric Block API (v1) 1.0.11+1802ada577             fabric-block-view-api-v2: Fabric BlockView API (v2) 1.0.1+1802ada577             fabric-command-api-v1: Fabric Command API (v1) 1.2.34+f71b366f77             fabric-command-api-v2: Fabric Command API (v2) 2.2.13+1802ada577             fabric-commands-v0: Fabric Commands (v0) 0.2.51+df3654b377             fabric-containers-v0: Fabric Containers (v0) 0.1.64+df3654b377             fabric-content-registries-v0: Fabric Content Registries (v0) 4.0.11+1802ada577             fabric-convention-tags-v1: Fabric Convention Tags 1.5.5+1802ada577             fabric-crash-report-info-v1: Fabric Crash Report Info (v1) 0.2.19+1802ada577             fabric-data-attachment-api-v1: Fabric Data Attachment API (v1) 1.0.0+de0fd6d177             fabric-data-generation-api-v1: Fabric Data Generation API (v1) 12.3.4+1802ada577             fabric-dimensions-v1: Fabric Dimensions API (v1) 2.1.54+1802ada577             fabric-entity-events-v1: Fabric Entity Events (v1) 1.6.0+1c78457f77             fabric-events-interaction-v0: Fabric Events Interaction (v0) 0.6.2+1802ada577             fabric-events-lifecycle-v0: Fabric Events Lifecycle (v0) 0.2.63+df3654b377             fabric-game-rule-api-v1: Fabric Game Rule API (v1) 1.0.40+1802ada577             fabric-item-api-v1: Fabric Item API (v1) 2.1.28+1802ada577             fabric-item-group-api-v1: Fabric Item Group API (v1) 4.0.12+1802ada577             fabric-lifecycle-events-v1: Fabric Lifecycle Events (v1) 2.2.22+1802ada577             fabric-loot-api-v2: Fabric Loot API (v2) 1.2.1+1802ada577             fabric-loot-tables-v1: Fabric Loot Tables (v1) 1.1.45+9e7660c677             fabric-message-api-v1: Fabric Message API (v1) 5.1.9+1802ada577             fabric-mining-level-api-v1: Fabric Mining Level API (v1) 2.1.50+1802ada577             fabric-networking-api-v1: Fabric Networking API (v1) 1.3.11+1802ada577             fabric-networking-v0: Fabric Networking (v0) 0.3.51+df3654b377             fabric-object-builder-api-v1: Fabric Object Builder API (v1) 11.1.3+1802ada577             fabric-particles-v1: Fabric Particles (v1) 1.1.2+1802ada577             fabric-recipe-api-v1: Fabric Recipe API (v1) 1.0.21+1802ada577             fabric-registry-sync-v0: Fabric Registry Sync (v0) 2.3.3+1802ada577             fabric-rendering-data-attachment-v1: Fabric Rendering Data Attachment (v1) 0.3.37+92a0d36777             fabric-rendering-fluids-v1: Fabric Rendering Fluids (v1) 3.0.28+1802ada577             fabric-resource-conditions-api-v1: Fabric Resource Conditions API (v1) 2.3.8+1802ada577             fabric-resource-loader-v0: Fabric Resource Loader (v0) 0.11.10+1802ada577             fabric-screen-handler-api-v1: Fabric Screen Handler API (v1) 1.3.30+1802ada577             fabric-transfer-api-v1: Fabric Transfer API (v1) 3.3.5+8dd72ea377             fabric-transitive-access-wideners-v1: Fabric Transitive Access Wideners (v1) 4.3.1+1802ada577         fabric-language-kotlin: Fabric Language Kotlin 1.12.2+kotlin.2.0.20             org_jetbrains_kotlin_kotlin-reflect: kotlin-reflect 2.0.20             org_jetbrains_kotlin_kotlin-stdlib: kotlin-stdlib 2.0.20             org_jetbrains_kotlin_kotlin-stdlib-jdk7: kotlin-stdlib-jdk7 2.0.20             org_jetbrains_kotlin_kotlin-stdlib-jdk8: kotlin-stdlib-jdk8 2.0.20             org_jetbrains_kotlinx_atomicfu-jvm: atomicfu-jvm 0.25.0             org_jetbrains_kotlinx_kotlinx-coroutines-core-jvm: kotlinx-coroutines-core-jvm 1.9.0             org_jetbrains_kotlinx_kotlinx-coroutines-jdk8: kotlinx-coroutines-jdk8 1.9.0             org_jetbrains_kotlinx_kotlinx-datetime-jvm: kotlinx-datetime-jvm 0.6.1             org_jetbrains_kotlinx_kotlinx-io-bytestring-jvm: kotlinx-io-bytestring-jvm 0.5.4             org_jetbrains_kotlinx_kotlinx-io-core-jvm: kotlinx-io-core-jvm 0.5.4             org_jetbrains_kotlinx_kotlinx-serialization-cbor-jvm: kotlinx-serialization-cbor-jvm 1.7.2             org_jetbrains_kotlinx_kotlinx-serialization-core-jvm: kotlinx-serialization-core-jvm 1.7.2             org_jetbrains_kotlinx_kotlinx-serialization-json-jvm: kotlinx-serialization-json-jvm 1.7.2         fabricloader: Fabric Loader 0.16.5             mixinextras: MixinExtras 0.4.1         fancymenu: FancyMenu 3.2.3             com_github_keksuccino_japng: japng 0.5.3             com_github_rtyley_animated-gif-lib-for-java: animated-gif-lib-for-java animated-gif-lib-1.7         farmersdelight: Farmer's Delight 1.20.1-2.1.6+refabricated             mm: Manningham Mills 2.3             porting_lib_accessors: Porting Lib Accessors 2.3.4+1.20.1             porting_lib_base: Porting Lib Base 2.3.4+1.20.1                 porting_lib_core: Porting Lib Core 2.3.4+1.20.1                 porting_lib_fluids: Porting Lib Fluids 2.3.4+1.20.1                 porting_lib_mixin_extensions: Porting Lib Mixin Extensions 2.3.4+1.20.1             porting_lib_config: Porting Lib Config 2.3.4+1.20.1             porting_lib_lazy_registration: Porting Lib Lazy Register 2.3.4+1.20.1             porting_lib_loot: Porting Lib Loot 2.3.4+1.20.1             porting_lib_networking: Porting Lib Networking 2.3.4+1.20.1             porting_lib_recipe_book_categories: Porting Lib Recipe Book Categories 2.3.4+1.20.1             porting_lib_tool_actions: Porting Lib Tool Actions 2.3.4+1.20.1         farsight: Farsight Mod 1.20.1-4.3             org_jctools_jctools-core: jctools-core 4.0.1         faster-random: Faster Random 5.1.0         fastpaintings: Fast Paintings 1.20-1.2.7         ferritecore: FerriteCore 6.0.1         fightorflight: Cobblemon Fight or Flight Fabric 0.5.0         flowerymooblooms: Friends&Foes - Flowery Mooblooms 2.0.2         forgeconfigapiport: Forge Config API Port 8.0.0         framework: Framework 0.6.16             org_javassist_javassist: javassist 3.29.2-GA         friendsandfoes: Friends & Foes 3.0.3         ftbchunks: FTB Chunks 2001.3.1         ftbessentials: FTB Essentials 2001.2.2         ftblibrary: FTB Library 2001.2.4         ftbquests: FTB Quests 2001.4.8             team_reborn_energy: Energy 3.0.0         ftbteams: FTB Teams 2001.3.0         ftbultimine: FTB Ultimine 2001.1.5         ftbxmodcompat: FTB XMod Compat 2.1.1         fwaystones: Fabric Waystones 3.3.2+mc1.20.1         fzzy_config: Fzzy Config 0.5.0+1.20.1             blue_endless_jankson: jankson 1.2.3             fabric-permissions-api-v0: fabric-permissions-api 0.3.1             net_peanuuutz_tomlkt_tomlkt-jvm: tomlkt-jvm 0.3.7         geckolib: GeckoLib 4 4.4.9             com_eliotlash_mclib_mclib: mclib 20         getittogetherdrops: Get It Together, Drops! fabric-1.20-1.3.1         globalpacks: Global Data- & Resourcepacks 1.16.1_fabric         go-fish: Go Fish 1.6.3+1.20.1         gpumemleakfix: Gpu memory leak fix mod 1.20.1-1.8         grindenchantments: Grind Enchantments 3.1.2+1.20             codec-config-api: Codec Config API 1.0.2+1.19.3         guarding: Guarding 2.4.0             scribe: Scribe 1.20.1-0.5.0-alpha         guardvillagers: GuardVillagers 2.0.9-1.20.1         gymbadges: GymBadges 1.0         hamsters: Hamsters fabric-1.0.3-1.20.1         handcrafted: Handcrafted 3.0.6         healingcampfire: Healing Campfire 6.1         herbalbrews: [Let's Do] HerbalBrews 1.0.8.1         herdspanic: Herds Panic 1.1.0         horseexpert: Horse Expert 8.1.1         icarus: Icarus 2.10.0         idwtialsimmoedm: idwtialsimmoedm 0.3.1+1.20         illagerinvasion: Illager Invasion 8.0.6             extensibleenums: Extensible Enums 7.0.1         immersive_aircraft: Immersive Aircraft 1.1.2+1.20.1             org_mariuszgromada_math_mathparser_org-mxparser: MathParser.org-mXparser 5.2.1         immersive_paintings: Immersive Paintings 0.6.7+1.20.1         incantationem: Incantationem 1.2.1+1.20         incendium: Incendium 5.3.5         item_obliterator: Item Obliterator 2.3.0         itemcollectors: Item Collectors 1.1.10         itemfilters: Item Filters 2001.1.0-build.59         jade: Jade 11.11.0+fabric         java: OpenJDK 64-Bit Server VM 21         jmi: JourneyMapIntegration 1.20.1-0.14-48         journeymap: Journeymap 5.10.2             journeymap-api-fabric: JourneyMap API 1.20-1.9-fabric-SNAPSHOT         jumpoverfences: Jump Over Fences 1.3.1         konkrete: Konkrete 1.8.1         leavesbegone: Leaves Be Gone 8.0.0         letmedespawn: Let Me Despawn 1.3.2b         lithium: Lithium 0.11.2         lmft: Load My F***ing Tags 1.0.2+1.20         logbegone: Log Begone 1.0.8         lootintegrations: Loot integration Mod 1.20.1-3.7         lootr: Lootr 0.7.34.84         luphieclutteredmod: Cluttered 2.1.0+1.20.1         magnumtorch: Magnum Torch 8.0.2         man_of_many_planes: Man of Many Planes 0.2.0+1.20.1         mavapi: More Axolotl Variants API 1.1.4         mavm: More Axolotl Variants Mod 1.2.6         mcwbridges: Macaw's Bridges 3.0.0         mcwdoors: Macaw's Doors 1.1.1         mcwfences: Macaw's Fences and Walls 1.1.2         mcwfurnitures: Macaw's Furniture 3.3.0         mcwholidays: Macaw's Holidays 1.1.0         mcwlights: Macaw's Lights and Lamps 1.1.1         mcwpaths: Macaw's Paths and Pavings 1.0.5         mcwroofs: Macaw's Roofs 2.3.1         mcwtrpdoors: Macaw's Trapdoors 1.1.3         mcwwindows: Macaw's Windows 2.3.0         megamons: Ascension Megamons 1.5.0+1.20.1-forge+fabric-75b66fa         melody: Melody 1.0.3         memoryleakfix: Memory Leak Fix 1.1.2         mighty_mail: Mighty Mail 1.0.14         mine-spawners: mine-spawners 1.0         minecraft: Minecraft 1.20.1         mixintrace: MixinTrace 1.1.1+1.17         modernfix: ModernFix 5.19.4+mc1.20.1         moonlight: Moonlight 1.20-2.13.2         more-axolotl: More Axolotl 2.0.1         mr_remove_terralithintromessage: Remove Terralith Intro Message 1.0         mss: Moog's Soaring Structures 1.1.2-1.20-fabric         mvs: Moog's Voyager Structures 4.1.4-1.20-fabric         mythicmetals: Mythic Metals 0.19.9+1.20.1             additionalentityattributes: Additional Entity Attributes 1.7.3+1.20.0             common-protection-api: Common Protection API 1.0.0             reach-entity-attributes: Reach Entity Attributes 2.4.0         mythsandlegends: Myths and Legends 1.5-HOTFIX             com_moandjiezana_toml_toml4j: toml4j 0.7.2         naturalist: Naturalist 4.0.3         naturescompass: Nature's Compass 1.20.1-2.2.3-fabric         necronomicon: Necronomicon 1.6.0         neruina: Neruina 2.1.2             com_fasterxml_jackson_core_jackson-annotations: jackson-annotations 2.17.0             com_fasterxml_jackson_core_jackson-core: jackson-core 2.17.0             com_fasterxml_jackson_core_jackson-databind: jackson-databind 2.17.0             org_apache_maven_maven-artifact: maven-artifact 3.8.1             org_kohsuke_github-api: github-api 1.318         netherportalfix: NetherPortalFix 13.0.1         nightlights: Night Lights 1.1         nochatreports: No Chat Reports 1.20.1-v2.2.2         notenoughanimations: NotEnoughAnimations 1.7.6         oceansdelight: Ocean's Delight fdrf-fabric-1.0.2-1.20         owo: oωo 0.11.2+1.20         packetfixer: Packet Fixer 1.4.2         patchouli: Patchouli 1.20.1-84-FABRIC             fiber: fiber 0.23.0-2         pehkui: Pehkui 3.8.3+1.14.4-1.21             kanos_config: Kanos Config 0.4.1+1.14.4-1.19.4         permanentsponges: Permanent Sponges 8.1.2         pigpen: PigPen 15.0.2         ping-wheel: Ping Wheel 1.9.1         player-animator: Player Animator 1.0.2-rc1+1.20         plushies: Plushie Mod 1.4.0         polymorph: Polymorph 0.49.7+1.20.1             spectrelib: SpectreLib 0.13.17+1.20.1         puzzleslib: Puzzles Lib 8.1.23             puzzlesaccessapi: Puzzles Access Api 8.0.7         railways: Create: Steam 'n' Rails 1.6.4+fabric-mc1.20.1         reacharound: Reacharound 1.3.0         recipeessentials: recipeessentials Mod 1.20.1-3.6         resourcefulconfig: Resourcefulconfig 2.1.2         resourcefullib: Resourceful Lib 2.1.29             com_teamresourceful_bytecodecs: bytecodecs 1.0.2             com_teamresourceful_yabn: yabn 1.0.3         ribbits: Ribbits 1.20.1-Fabric-3.0.0         runelic: Runelic 18.0.2         seasons: Fabric Seasons 2.3+1.20         seasonsdelightcompat: Fabric Seasons: Delight Compat 1.0-1.3.9         seasonsterralithcompat: Fabric Seasons: Terralith Compat 1.0-2.3.7         sellingbin: Selling Bin 1.0.4         serverredirect: Server Redirect 1.4.5         shadertoggle: Shader Toggle 1.0         simpletms: Cobblemon: Simple TM's 1.1.2         simplyswords: Simply Swords 1.56.0-1.20.1         sliceanddice: Create Slice & Dice 3.3.1         smallships: Small Ships 2.0.0-b1.4         spark: spark 1.10.53         spiceoffabric: Spice of Fabric 1.6.2+mc1.20.1             capsaicin: Capsaicin 1.3.3+mc1.20.1             tweed4_annotated: tweed4_annotated 1.3.1+mc1.20-pre1             tweed4_base: tweed4_base 1.7.1+mc1.20-pre1             tweed4_data: tweed4_data 1.2.1+mc1.20-pre1             tweed4_data_hjson: tweed4_data_hjson 1.1.1+mc1.20-pre1             tweed4_tailor_lang_json_descriptions: tweed4_tailor_lang_json_descriptions 1.1.0+mc1.20-pre1         stacc: Stacc 1.7.0         starterkit: Starter Kit 7.1         strawstatues: Straw Statues 8.0.3             puzzlesapi: Puzzles Api 8.1.4         structory: Structory 1.3.5         structory_towers: Structory: Towers 1.0.7         structureessentials: Structure Essentials Mod 1.20.1-3.4         supermartijn642configlib: SuperMartijn642's Config Lib 1.1.8+a         supermartijn642corelib: SuperMartijn642's Core Lib 1.1.17+a         supplementaries: Supplementaries 1.20-2.8.17         suppsquared: Supplementaries Squared 1.20-1.1.15         terrablender: TerraBlender 3.0.1.7             com_electronwill_night-config_core: core 3.6.7             com_electronwill_night-config_toml: toml 3.6.7         terralith: Terralith 2.5.4         thiccpackets: Extra Thicc Packets 1.17-1.19+         things: Things 0.3.3+1.20             lavender: Lavender 0.1.0-pre.18+1.20                 lavender-md: lavender-md 0.1.0-pre.3+1.20                 lavender-md-owo-ui: lavender-md-owo-ui 0.1.0-pre.3+1.20         toms_storage: Tom's Simple Storage Mod 1.6.8         toolstats: ToolStats 16.0.9         trade_cycling: Trade Cycling 1.20.1-1.0.7         tradingpost: Trading Post 8.0.2         trashcans: Trash Cans 1.0.18         travelersbackpack: Traveler's Backpack 9.1.17         trinkets: Trinkets 3.7.2         tutorialmod: Fullers Pokecenters 1.0.0             structurized-reborn: Structurized Reborn 1.20.1-01         ubesdelight: Ube's Delight 0.2.0             midnightlib: MidnightLib 1.4.1             porting_lib_registries: Porting Lib Registries 2.3.4+1.20.1         universal_shops: Universal Shops 1.3.2+1.20.1             common-economy-api: Common Economy API 1.1.1             placeholder-api: Placeholder API 2.1.1+1.20             polymer-core: Polymer (Core) 0.5.3+1.20.1                 polymer-networking: Polymer (Networking) 0.5.3+1.20.1                 polymer-registry-sync-manipulator: Polymer (Registry Sync Manipulator) 0.5.3+1.20.1             polymer-resource-pack: Polymer (Resource Pack) 0.5.3+1.20.1                 polymer-common: Polymer (Common) 0.5.3+1.20.1             polymer-virtual-entity: Polymer (Virtual Entity) 0.5.3+1.20.1             server_translations_api: Server Translations API 2.0.0+1.20                 packet_tweaker: Packet Tweaker 0.4.0+1.19.4             sgui: sgui 1.2.2+1.20         vanityslots: Vanity Slots 1.2.9         villagernames: Villager Names 8.1         vinery: [Let's Do] Vinery 1.4.28         visualworkbench: Visual Workbench 8.0.0         voicechat: Simple Voice Chat 1.20.1-2.5.23         wands: Building Wands 2.6.9-release         watut: What Are They Up To 1.20.1-1.1.3         xercamusic: Music Maker Mod fabric-1.20.1-1.0.2         xercapaint: Joy of Painting fabric-1.20.1-1.0.1         yet_another_config_lib_v3: YetAnotherConfigLib 3.5.0+1.20.1-fabric             com_twelvemonkeys_common_common-image: common-image 3.10.0             com_twelvemonkeys_common_common-io: common-io 3.10.0             com_twelvemonkeys_common_common-lang: common-lang 3.10.0             com_twelvemonkeys_imageio_imageio-core: imageio-core 3.10.0             com_twelvemonkeys_imageio_imageio-metadata: imageio-metadata 3.10.0             com_twelvemonkeys_imageio_imageio-webp: imageio-webp 3.10.0             org_quiltmc_parsers_gson: gson 0.2.1             org_quiltmc_parsers_json: json 0.2.1         yigd: You're in Grave Danger 2.0.9             libgui: LibGui 8.1.1+1.20.1                 jankson: Jankson 6.0.0+j1.2.3                 libninepatch: LibNinePatch 1.2.0         yosbr: YOSBR 0.1.2         ysns: You Shall Not Spawn 2.0.1         yungsapi: YUNG's API 1.20-Fabric-4.0.6         yungsextras: YUNG's Extras 1.20-Fabric-4.0.3     Server Running: true     Player Count: 3 / 20; [class_3222['TreverForever'/674, l='ServerLevel[world]', x=-524.99, y=124.62, z=-103.03], class_3222['Shadowknight3420'/675, l='ServerLevel[world]', x=-180.57, y=65.48, z=216.34], class_3222['XThatSamuraiGuyX'/1223, l='ServerLevel[world]', x=-78.28, y=65.00, z=220.26]]     Data Packs: vanilla, Everycomp Generated Pack, Supplementaries Generated Pack, Suppsquared Generated Pack, fabric, file/AlphabetSoup-v2.1, file/AshiMons_ver1.3, file/BCG Cobblemon Loot, file/BCG Datapack, file/BCG x AllTheMons 1.1.0, file/Cobblemon Village, file/Genomons [1.5.1], file/HiddenMons [Cobblemon] v0.5.3, file/Kale's Collection [v1.7], file/LackingMons-ReleaseCanditate-1, file/MissingMon_v3.0 [METALIC MADNESS], file/NotSoCobblemon, file/PigeonPack, file/Project Eevolve Data (incompatible), file/SaltMons v2.0, file/Vivillon Pride Patterns v1.0, file/Wavimons1.1, file/cobble_cats, file/diance, file/CobblemonLoot-v1.1.1, file/CobblemonPokeLoot 1.5, file/Legendary Structures v1.1.1, file/Poké Costume [2.0], file/Pokémon Fishing v1.1.4 [1.20.1-v1.4+], file/MythsandLegends-Datapack-v1.0.2     Enabled Feature Flags: minecraft:vanilla     World Generation: Stable     Is Modded: Definitely; Server brand changed to 'fabric'     Type: Dedicated Server (map_server.txt)
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.