Jump to content

Recommended Posts

Posted (edited)

I want to creat Underground Biomes and i use for this custom Air Blocks

when the Block generated he will check some conditions and the there will place costum blocks.

It worked fine then i add a new condition and now i get this error: (down)

 

the reason why i use this way is i want to create a gamerule which controls the generation of the cave biomes

this should also be able to be switched on after generating the world so that cave biomes can be generated later. (when the world is already load)

 

net.minecraft.crash.ReportedException: Exception ticking world
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:890) ~[?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:822) ~[?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:87) ~[?:?] {re:classloading,pl:runtimedistcleaner:A}
	at net.minecraft.server.MinecraftServer.func_240802_v_(MinecraftServer.java:665) ~[?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.lambda$func_240784_a_$0(MinecraftServer.java:231) ~[?:?] {re:classloading,pl:accesstransformer:B}
	at java.lang.Thread.run(Thread.java:832) [?:?] {}
Caused by: java.lang.IllegalArgumentException: Cannot set property BooleanProperty{name=north, clazz=class java.lang.Boolean, values=[true, false]} as it does not exist in Block{cave:moss_air}
	at net.minecraft.state.StateHolder.with(StateHolder.java:106) ~[?:?] {re:classloading}
	at net.minecraft.block.VineBlock.func_196544_a(VineBlock.java:237) ~[?:?] {re:classloading}
	at net.minecraft.block.VineBlock.randomTick(VineBlock.java:221) ~[?:?] {re:classloading}
	at net.minecraft.block.AbstractBlock$AbstractBlockState.randomTick(AbstractBlock.java:709) ~[?:?] {re:classloading}
	at net.minecraft.world.server.ServerWorld.tickEnvironment(ServerWorld.java:504) ~[?:?] {re:classloading}
	at net.minecraft.world.server.ServerChunkProvider.lambda$tickChunks$5(ServerChunkProvider.java:368) ~[?:?] {re:classloading,pl:accesstransformer:B}
	at java.util.ArrayList.forEach(ArrayList.java:1511) ~[?:?] {}
	at net.minecraft.world.server.ServerChunkProvider.tickChunks(ServerChunkProvider.java:352) ~[?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.server.ServerChunkProvider.tick(ServerChunkProvider.java:327) ~[?:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.server.ServerWorld.tick(ServerWorld.java:329) ~[?:?] {re:classloading}
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:886) ~[?:?] {re:classloading,pl:accesstransformer:B}
	... 5 more

 

does someone know another way to enable this

or is there an error in the code

 

and this is the code of my air class:

 

package net.luis.cave.blocks.caves.moss;

import java.util.Random;

import net.luis.cave.init.CaveBlocks;
import net.minecraft.block.AirBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.material.Material;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biomes;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.registries.ForgeRegistries;

public class MossAir extends AirBlock {

	public MossAir() {
		
		super(Block.Properties.create(Material.AIR)
				.noDrops()
				.tickRandomly());

	}
	
	// checkPos[] 0 = pos, 1 = pos.up, 2 = pos.down, 3 = pos.north, 4 = pos.east, 5 = pos.south, 6 = pos.west
 	public static void BlockChecker(World world, BlockPos pos, BlockState state, BlockState replace, boolean[] checkPos) {
 		
 		if (checkPos[0] == true) {
 			
 			if (world.getBlockState(pos).getBlock() == replace.getBlock()) {
 				
 				world.setBlockState(pos, state);
 				
 			}
 			
 		}
 		
 		if (checkPos[1] == true) {
 			
 			if (world.getBlockState(pos.up()).getBlock() == replace.getBlock()) {
 				
 				world.setBlockState(pos.up(), state);
 				
 			}
 			
 		}
 		
 		if (checkPos[2] == true) {
 			
 			if (world.getBlockState(pos.down()).getBlock() == replace.getBlock()) {
 				
 				world.setBlockState(pos.down(), state);
 				
 			}
 			
 		}
 		
 		if (checkPos[3] == true) {
 			
 			if (world.getBlockState(pos.north()).getBlock() == replace.getBlock()) {
 				
 				world.setBlockState(pos.north(), state);
 				
 			}
 			
 		}
 		
 		if (checkPos[4] == true) {
 			
 			if (world.getBlockState(pos.east()).getBlock() == replace.getBlock()) {
 				
 				world.setBlockState(pos.east(), state);
 				
 			}
 			
 		}
 		
 		if (checkPos[5] == true) {
 			
 			if (world.getBlockState(pos.south()).getBlock() == replace.getBlock()) {
 				
 				world.setBlockState(pos.south(), state);
 				
 			}
 			
 		}
 		
 		if (checkPos[6] == true) {
 			
 			if (world.getBlockState(pos.west()).getBlock() == replace.getBlock()) {
 				
 				world.setBlockState(pos.west(), state);
 				
 			}
 			
 		}
		
	}
	
	// bolean[] 0 = Moss Block, 1 = Vine, 2 =  Tree, 3 =  Clay, 4 = Spore Bloosom
	// int[] 0 = Moss Block, 1 = Vine, 2 = Tree, 3 = Clay, 4 = Spore Bloosom
	// double[] 0 = Vine, 1 = Tree
	private static void genMossCaveBiome(World world, BlockPos pos, boolean[] genMossElements, int[] countMossElements, double[] chanceMossElements) {
		
		Random random = new Random();
		int[] RanomChance = new int[5];
		
		for (int i = 0; i < 5; i++) {
			
			//Check Gen Element true 0 = Moss Block, 1 = Vine, 2 =  Tree, 3 =  Clay, 4 = Spore Bloosom
			if (genMossElements[i] == true) {
				
				RanomChance[i] = random.nextInt(countMossElements[i]);
				
			}
			
			//Gen Elements
			switch (i) {
			case 0: if (genMossElements[0] == true) {
				
				switch (RanomChance[0]) {
					case 0:
						
						BlockChecker(world, pos, CaveBlocks.MOSS_BLOCK.get().getDefaultState(), Blocks.STONE.getDefaultState(), 
									new boolean[] {false, true, true, true, true, true, true}); break;

				default: break;}
				
			}break;
					
			case 1: if (genMossElements[1] == true) {
				
				switch (RanomChance[1]) {
					case 0: if (Math.random() >= chanceMossElements[0]) {
						
						if (world.getBlockState(pos.up()).getBlock() == Blocks.STONE |
							world.getBlockState(pos.up()).getBlock() == CaveBlocks.MOSS_BLOCK.get()) {
							
							BlockChecker(world, pos, CaveBlocks.MOSS_VINE.get().getDefaultState(), CaveBlocks.MOSS_AIR.get().getDefaultState(), 
									new boolean[] {true, false, false, false, false, false, false}); break;
							
						}
						
					}
					
				default: break;}
				
			}break;
			
			case 2: if (genMossElements[2] == true) {
				
				switch (RanomChance[2]) {
					case 0: if (Math.random() >= chanceMossElements[1]) {
						
						if (world.getBlockState(pos.down()).getBlock() == Blocks.STONE |
								world.getBlockState(pos.down()).getBlock() == CaveBlocks.MOSS_BLOCK.get()) {
								
							BlockChecker(world, pos, CaveBlocks.AZELEA_TREE.get().getDefaultState(), CaveBlocks.MOSS_AIR.get().getDefaultState(), 
									new boolean[] {true, false, false, false, false, false, false}); break;
								
							}
						
					}
					
				default: break;}
				
			}break;
			
			case 3: if (genMossElements[3] == true) {
				
				switch (RanomChance[3]) {
					case 0:
						
						BlockChecker(world, pos, Blocks.CLAY.getDefaultState(), Blocks.STONE.getDefaultState(), 
									new boolean[] {false, false, true, true, true, true, true}); break;

				default: break;}
				
			}break;
			
			case 4: if (genMossElements[4] == true) {
				
				switch (RanomChance[4]) {
					case 0: if (world.getBlockState(pos.up()).getBlock() == Blocks.STONE) {
						
						BlockChecker(world, pos, CaveBlocks.SPORE_BLOSSOM.get().getDefaultState(), CaveBlocks.MOSS_AIR.get().getDefaultState(), 
								new boolean[] {true, false, false, false, false, false, false}); break;
						
					}

				default: break;}
				
			}break;

			default: break;}
			
		}
		
		if (world.getBlockState(pos).getBlock() == CaveBlocks.MOSS_AIR.get()) {
			
			world.setBlockState(pos, Blocks.CAVE_AIR.getDefaultState(), 3);
		
		}
		
	}

	@Override
	public void tick(BlockState state, ServerWorld world, BlockPos pos, Random rand) {
		
		int tick = rand.nextInt(50);
		
		switch (tick) {
		case 0: if (ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.PLAINS.getRegistryName() |
					ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.SUNFLOWER_PLAINS.getRegistryName()) {
			
					genMossCaveBiome(world, pos, new boolean[] {true, true, true, false, false}, new int[] {2, 10, 25, 0, 0}, new double[] {0.4, 0.5});
				
				} else if (ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.JUNGLE.getRegistryName() |
						ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.JUNGLE_EDGE.getRegistryName() |
						ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.JUNGLE_HILLS.getRegistryName() |
						ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.BAMBOO_JUNGLE.getRegistryName() |
						ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.BAMBOO_JUNGLE_HILLS.getRegistryName() |
						ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.MODIFIED_JUNGLE.getRegistryName() |
						ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.MODIFIED_JUNGLE_EDGE.getRegistryName()) {
				
					genMossCaveBiome(world, pos, new boolean[] {true, true, true, false, true}, new int[] {2, 10, 20, 0, 10}, new double[] {0.5, 0.6});
				
				} else if (ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.SWAMP.getRegistryName() |
						ForgeRegistries.BIOMES.getKey(world.getBiome(pos)) == Biomes.SWAMP_HILLS.getRegistryName()) {
				

					genMossCaveBiome(world, pos, new boolean[] {true, true, false, true, false}, new int[] {4, 10, 0, 6, 0}, new double[] {0.6, 0.9});
				
				}break;

		default: break; }
		
	}
	
}

 

Edited by Luis_ST
Posted

Do you know Java?

This is my Forum Signature, I am currently attempting to transform it into a small guide for fixing easier issues using spoiler blocks to keep things tidy.

 

As the most common issue I feel I should put this outside the main bulk:

The only official source for Forge is https://files.minecraftforge.net, and the only site I trust for getting mods is CurseForge.

If you use any site other than these, please take a look at the StopModReposts project and install their browser extension, I would also advise running a virus scan.

 

For players asking for assistance with Forge please expand the spoiler below and read the appropriate section(s) in its/their entirety.

  Reveal hidden contents

 

Posted

Look up fillStateContainer

This is my Forum Signature, I am currently attempting to transform it into a small guide for fixing easier issues using spoiler blocks to keep things tidy.

 

As the most common issue I feel I should put this outside the main bulk:

The only official source for Forge is https://files.minecraftforge.net, and the only site I trust for getting mods is CurseForge.

If you use any site other than these, please take a look at the StopModReposts project and install their browser extension, I would also advise running a virus scan.

 

For players asking for assistance with Forge please expand the spoiler below and read the appropriate section(s) in its/their entirety.

  Reveal hidden contents

 

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



×
×
  • Create New...

Important Information

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