Jump to content

[ 1.14+ ] Change blockstate when its Raining and Not Raining.


Recommended Posts

Posted

Hello! I'm trying to make my custom campfire to unlit when it is raining and lit automatically when it is not raining.

This is my code, the thing is, it only works when I start the world, not otherwise. I'm still learning coding don't be harsh on me thanks!

 

	public void litWhenRaining(World worldIn, BlockPos pos) {
		      if (worldIn.rand.nextInt(10) == 1 && worldIn.isRaining()) {
		            BlockState blockstate = worldIn.getBlockState(pos);
		            worldIn.setBlockState(pos, blockstate.cycle(LIT), 1);
		         } if (worldIn.rand.nextInt(10) == 1 && !worldIn.isRaining()){
		        	 BlockState blockstate = worldIn.getBlockState(pos);
		               worldIn.setBlockState(pos, blockstate.cycle(LIT), 0);
		            }
		      }

 

Posted

Where are you actually running your code?

If you want it to change instantly you'll have to make a ticking tile entity (see how the daylight sensor works). Since that's not good for performance, you may want to just override the Block#tick method and let it update randomly (like how farmland and leaves works).

I'm eager to learn and am prone to mistakes. Don't hesitate to tell me how I can improve.

Posted
1 hour ago, imacatlolol said:

Where are you actually running your code?

If you want it to change instantly you'll have to make a ticking tile entity (see how the daylight sensor works). Since that's not good for performance, you may want to just override the Block#tick method and let it update randomly (like how farmland and leaves works).

Well I made the part where it changes when raining by looking at the cauldron - fillWithRain. I just need a way to make it change back when it stops raining.

Posted (edited)
15 minutes ago, Kikoz said:

Well I made the part where it changes when raining by looking at the cauldron - fillWithRain. I just need a way to make it change back when it stops raining.

Oh! Neat, I didn't recognize that as a vanilla method.

Actually, looking at your code a little closer, you're misusing World#setBlockState and BlockState#cycle entirely. The integer parameter is for flags which are used for updating and syncing. You should use a flag of 11 for both lighting and un-lighting the block.

As for the BlockState, you should use the with method instead of cycle.

Edited by imacatlolol
Typo

I'm eager to learn and am prone to mistakes. Don't hesitate to tell me how I can improve.

Posted
37 minutes ago, imacatlolol said:

Oh! Neat, I didn't recognize that as a vanilla method.

Actually, looking at your code a little closer, you're misusing World#setBlockState and BlockState#cycle entirely. The integer parameter is for flags which are used for updating and syncing. You should use a flag of 11 for both lighting and un-lighting the block.

As for the BlockState, you should use the with method instead of cycle.

Now after looking into Farmland, I've changed it to this:

  public void ChangeWhenClear(BlockState stateIn, World worldIn, BlockPos pos, Random rand) {
     if (!worldIn.isRaining()) {
        if (rand.nextInt(5) == 1) {
           BlockState blockstate = worldIn.getBlockState(pos);
           if (blockstate.get(LIT) == true) {
	    		  worldIn.setBlockState(pos, blockstate.with(LIT, Boolean.valueOf(false)));
	      }
        }
     }
  }

But it still is not working, the fillWithRain works well. 

Posted
   public void ChangeWhenClear(BlockState state, World worldIn, BlockPos pos, Random rand) {
    	  
         if (!worldIn.isRainingAt(pos.up()) && rand.nextInt(5) == 1) { 
                 worldIn.setBlockState(pos, state.with(LIT, Boolean.valueOf(false)));
            }
      }

Still can't get it to work.. Am I blind?

Posted
8 minutes ago, diesieben07 said:

Could you, idk, show that code so we can debug the problem...?

package com.spcmf.pete11.objects.custommodels;

import java.util.Random;
import java.util.stream.IntStream;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.HorizontalBlock;
import net.minecraft.block.IWaterLoggable;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.fluid.Fluids;
import net.minecraft.fluid.IFluidState;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.pathfinding.PathType;
import net.minecraft.state.BooleanProperty;
import net.minecraft.state.DirectionProperty;
import net.minecraft.state.EnumProperty;
import net.minecraft.state.StateContainer;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.state.properties.Half;
import net.minecraft.state.properties.StairsShape;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.Mirror;
import net.minecraft.util.Rotation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.shapes.VoxelShapes;
import net.minecraft.world.Explosion;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;


public class CustomCampfire extends Block implements IWaterLoggable {
   public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING;
   public static final EnumProperty<Half> HALF = BlockStateProperties.HALF;
   public static final EnumProperty<StairsShape> SHAPE = BlockStateProperties.STAIRS_SHAPE;
   public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
   
   public static final BooleanProperty LIT = BlockStateProperties.LIT;
   
   protected static final VoxelShape AABB_SLAB_TOP = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
   protected static final VoxelShape AABB_SLAB_BOTTOM = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
   
   protected static final VoxelShape NWD_CORNER = Block.makeCuboidShape(0.0D, 10.0D, 0.0D, 8.0D, 15.0D, 8.0D);
   protected static final VoxelShape SWD_CORNER = Block.makeCuboidShape(0.0D, 10.0D, 8.0D, 8.0D, 15.0D, 16.0D);
   protected static final VoxelShape NED_CORNER = Block.makeCuboidShape(8.0D, 10.0D, 0.0D, 16.0D, 15.0D, 8.0D);
   protected static final VoxelShape SED_CORNER = Block.makeCuboidShape(8.0D, 10.0D, 8.0D, 16.0D, 15.0D, 16.0D);

   protected static final VoxelShape[] SLAB_TOP_SHAPES = makeShapes(AABB_SLAB_TOP, NWD_CORNER, NED_CORNER, SWD_CORNER, SED_CORNER);
   protected static final VoxelShape[] SLAB_BOTTOM_SHAPES = makeShapes(AABB_SLAB_BOTTOM, NWD_CORNER, NED_CORNER, SWD_CORNER, SED_CORNER);
   private static final int[] field_196522_K = new int[]{12, 5, 3, 10, 14, 13, 7, 11, 13, 7, 11, 14, 8, 4, 1, 2, 4, 1, 2, 8};

   private final Block modelBlock;
   private final BlockState modelState;

   private static VoxelShape[] makeShapes(VoxelShape slabShape, VoxelShape nwCorner, VoxelShape neCorner, VoxelShape swCorner, VoxelShape seCorner) {
      return IntStream.range(0, 16).mapToObj((p_199780_5_) -> {
         return combineShapes(p_199780_5_, slabShape, nwCorner, neCorner, swCorner, seCorner);
      }).toArray((p_199778_0_) -> {
         return new VoxelShape[p_199778_0_];
      });
   }

   /**
    * combines the shapes according to the mode set in the bitfield
    */
   private static VoxelShape combineShapes(int bitfield, VoxelShape slabShape, VoxelShape nwCorner, VoxelShape neCorner, VoxelShape swCorner, VoxelShape seCorner) {
      VoxelShape voxelshape = slabShape;
      if ((bitfield & 1) != 0) {
         voxelshape = VoxelShapes.or(slabShape, nwCorner);
      }

      if ((bitfield & 2) != 0) {
         voxelshape = VoxelShapes.or(voxelshape, neCorner);
      }

      if ((bitfield & 4) != 0) {
         voxelshape = VoxelShapes.or(voxelshape, swCorner);
      }

      if ((bitfield & 8) != 0) {
         voxelshape = VoxelShapes.or(voxelshape, seCorner);
      }

      return voxelshape;
   }

   // Forge: Use the other constructor that takes a Supplier

   public CustomCampfire(BlockState state, Block.Properties properties) {
      super(properties);
      this.setDefaultState(this.stateContainer.getBaseState().with(LIT, Boolean.valueOf(false)).with(FACING, Direction.NORTH).with(HALF, Half.BOTTOM).with(SHAPE, StairsShape.STRAIGHT).with(WATERLOGGED, Boolean.valueOf(false)));
      this.modelBlock = state.getBlock();
      this.modelState = state;
      this.stateSupplier = () -> state;
   }


   
   
   public CustomCampfire(java.util.function.Supplier<BlockState> state, Block.Properties properties) {
      super(properties);
      this.setDefaultState(this.stateContainer.getBaseState().with(LIT, Boolean.valueOf(false)).with(FACING, Direction.NORTH).with(HALF, Half.BOTTOM).with(SHAPE, StairsShape.STRAIGHT).with(WATERLOGGED, Boolean.valueOf(false)));
      this.modelBlock = Blocks.AIR; // These are unused, fields are redirected
      this.modelState = Blocks.AIR.getDefaultState();
      this.stateSupplier = state;
   }

   public boolean func_220074_n(BlockState state) {
      return true;
   }
   
   /**
    * Update the provided state given the provided neighbor facing and neighbor state, returning a new state.
    * For example, fences make their connections to the passed in state if possible, and wet concrete powder immediately
    * returns its solidified counterpart.
    * Note that this method should ideally consider only the specific face passed in.
    */
   @SuppressWarnings("deprecation")
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) {
      if (stateIn.get(WATERLOGGED)) {
         worldIn.getPendingFluidTicks().scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickRate(worldIn));
         worldIn.getPendingBlockTicks().scheduleTick(currentPos, this, 1);
      }

      
      
      return facing.getAxis().isHorizontal() ? stateIn.with(SHAPE, getShapeProperty(stateIn, worldIn, currentPos)) : super.updatePostPlacement(stateIn, facing, facingState, worldIn, currentPos, facingPos);
   }
   

   
   public void fillWithRain(World worldIn, BlockPos pos) {
	      if (worldIn.rand.nextInt(5) == 1) {
	         float f = worldIn.getBiome(pos).func_225486_c(pos);
	         if (!(f < 0.15F)) {
	            BlockState blockstate = worldIn.getBlockState(pos);
	            if (blockstate.get(LIT) == false) {
	               worldIn.setBlockState(pos, blockstate.with(LIT, Boolean.valueOf(true)));
	            }

	         }
	      }
	   }
   
  @SuppressWarnings("deprecation")
public void tick(BlockState state, World worldIn, BlockPos pos, Random random) {
	     this.modelBlock.tick(state, worldIn, pos, random);}



  
   public void randomDisplayTick(BlockState state, World worldIn, BlockPos pos, Random rand) {
    	  
         if (!worldIn.isRainingAt(pos.up()) && rand.nextInt(5) == 1) { 
                 worldIn.setBlockState(pos, state.with(LIT, Boolean.valueOf(false)));
            }
      }
   



public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
      return (state.get(HALF) == Half.TOP ? SLAB_TOP_SHAPES : SLAB_BOTTOM_SHAPES)[field_196522_K[this.func_196511_x(state)]];
   }

   private int func_196511_x(BlockState state) {
      return state.get(SHAPE).ordinal() * 4 + state.get(FACING).getHorizontalIndex();
   }

   /**
    * Called periodically clientside on blocks near the player to show effects (like furnace fire particles). Note that
    * this method is unrelated to {@link randomTick} and {@link #needsRandomTick}, and will always be called regardless
    * of whether the block can receive random update ticks
    */
   @OnlyIn(Dist.CLIENT)
   public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) {
      this.modelBlock.animateTick(stateIn, worldIn, pos, rand);
   }

   public void onBlockClicked(BlockState state, World worldIn, BlockPos pos, PlayerEntity player) {
      this.modelState.onBlockClicked(worldIn, pos, player);
   }

   /**
    * Called after a player destroys this Block - the posiiton pos may no longer hold the state indicated.
    */
   public void onPlayerDestroy(IWorld worldIn, BlockPos pos, BlockState state) {
      this.modelBlock.onPlayerDestroy(worldIn, pos, state);
   }

   /**
    * Returns how much this block can resist explosions from the passed in entity.
    */
   public float getExplosionResistance() {
      return this.modelBlock.getExplosionResistance();
   }

   /**
    * Gets the render layer this block will render on. SOLID for solid blocks, CUTOUT or CUTOUT_MIPPED for on-off
    * transparency (glass, reeds), TRANSLUCENT for fully blended transparency (stained glass)
    */
   public BlockRenderLayer getRenderLayer() {
      return this.modelBlock.getRenderLayer();
   }

   /**
    * How many world ticks before ticking
    */
   public int tickRate(IWorldReader worldIn) {
      return this.modelBlock.tickRate(worldIn);
   }

   public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
      if (state.getBlock() != state.getBlock()) {
         this.modelState.neighborChanged(worldIn, pos, Blocks.AIR, pos, false);
         this.modelBlock.onBlockAdded(this.modelState, worldIn, pos, oldState, false);
      }
   }

   public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
      if (state.getBlock() != newState.getBlock()) {
         this.modelState.onReplaced(worldIn, pos, newState, isMoving);
      }
   }

   /**
    * Called when the given entity walks on this Block
    */
   public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn) {
      this.modelBlock.onEntityWalk(worldIn, pos, entityIn);
   }



   public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
      return this.modelState.onBlockActivated(worldIn, player, handIn, hit);
   }

   /**
    * Called when this Block is destroyed by an Explosion
    */
   public void onExplosionDestroy(World worldIn, BlockPos pos, Explosion explosionIn) {
      this.modelBlock.onExplosionDestroy(worldIn, pos, explosionIn);
   }

   public BlockState getStateForPlacement(BlockItemUseContext context) {
      Direction direction = context.getFace();
      BlockPos blockpos = context.getPos();
      IFluidState ifluidstate = context.getWorld().getFluidState(blockpos);
      BlockState blockstate = this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing()).with(HALF, direction != Direction.DOWN && (direction == Direction.UP || !(context.getHitVec().y - (double)blockpos.getY() > 0.5D)) ? Half.BOTTOM : Half.TOP).with(WATERLOGGED, Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER));
      return blockstate.with(SHAPE, getShapeProperty(blockstate, context.getWorld(), blockpos));
   }



   /**
    * Returns a stair shape property based on the surrounding stairs from the given blockstate and position
    */
   private static StairsShape getShapeProperty(BlockState state, IBlockReader worldIn, BlockPos pos) {
      Direction direction = state.get(FACING);
      BlockState blockstate = worldIn.getBlockState(pos.offset(direction));
      if (isBlockStairs(blockstate) && state.get(HALF) == blockstate.get(HALF)) {
         Direction direction1 = blockstate.get(FACING);
         if (direction1.getAxis() != state.get(FACING).getAxis() && isDifferentStairs(state, worldIn, pos, direction1.getOpposite())) {
            if (direction1 == direction.rotateYCCW()) {
               return StairsShape.OUTER_LEFT;
            }

            return StairsShape.OUTER_RIGHT;
         }
      }

      BlockState blockstate1 = worldIn.getBlockState(pos.offset(direction.getOpposite()));
      if (isBlockStairs(blockstate1) && state.get(HALF) == blockstate1.get(HALF)) {
         Direction direction2 = blockstate1.get(FACING);
         if (direction2.getAxis() != state.get(FACING).getAxis() && isDifferentStairs(state, worldIn, pos, direction2)) {
            if (direction2 == direction.rotateYCCW()) {
               return StairsShape.INNER_LEFT;
            }

            return StairsShape.INNER_RIGHT;
         }
      }

      return StairsShape.STRAIGHT;
   }

   private static boolean isDifferentStairs(BlockState state, IBlockReader worldIn, BlockPos pos, Direction face) {
      BlockState blockstate = worldIn.getBlockState(pos.offset(face));
      return !isBlockStairs(blockstate) || blockstate.get(FACING) != state.get(FACING) || blockstate.get(HALF) != state.get(HALF);
   }

   public static boolean isBlockStairs(BlockState state) {
      return state.getBlock() instanceof CustomCampfire;
   }

   /**
    * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed
    * blockstate.
    * @deprecated call via {@link IBlockState#withRotation(Rotation)} whenever possible. Implementing/overriding is
    * fine.
    */
   public BlockState rotate(BlockState state, Rotation rot) {
      return state.with(FACING, rot.rotate(state.get(FACING)));
   }

   /**
    * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed
    * blockstate.
    * @deprecated call via {@link IBlockState#withMirror(Mirror)} whenever possible. Implementing/overriding is fine.
    */
   public BlockState mirror(BlockState state, Mirror mirrorIn) {
      Direction direction = state.get(FACING);
      StairsShape stairsshape = state.get(SHAPE);
      switch(mirrorIn) {
      case LEFT_RIGHT:
         if (direction.getAxis() == Direction.Axis.Z) {
            switch(stairsshape) {
            case INNER_LEFT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_RIGHT);
            case INNER_RIGHT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_LEFT);
            case OUTER_LEFT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_RIGHT);
            case OUTER_RIGHT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_LEFT);
            default:
               return state.rotate(Rotation.CLOCKWISE_180);
            }
         }
         break;
      case FRONT_BACK:
         if (direction.getAxis() == Direction.Axis.X) {
            switch(stairsshape) {
            case INNER_LEFT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_LEFT);
            case INNER_RIGHT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_RIGHT);
            case OUTER_LEFT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_RIGHT);
            case OUTER_RIGHT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_LEFT);
            case STRAIGHT:
               return state.rotate(Rotation.CLOCKWISE_180);
            }
         }
      }

      return super.mirror(state, mirrorIn);
   }

   protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
      builder.add(LIT, FACING, HALF, SHAPE, WATERLOGGED);
   }

   public IFluidState getFluidState(BlockState state) {
      return state.get(WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : super.getFluidState(state);
   }

   public boolean allowsMovement(BlockState state, IBlockReader worldIn, BlockPos pos, PathType type) {
      return false;
   }

   private final java.util.function.Supplier<BlockState> stateSupplier;
   private Block getModelBlock() {
       return getModelState().getBlock();
   }
   private BlockState getModelState() {
       return stateSupplier.get();
   }
}

 

Posted
3 minutes ago, diesieben07 said:

The code you posted does not contain the phrase "ChangeWhenClear".

Therefor this statement is incorrect:

 

Please show the place where you are actually calling this method.

I've just tried to rename it to 

   public void randomDisplayTick(BlockState state, World worldIn, BlockPos pos, Random rand) {
    	  
         if (!worldIn.isRainingAt(pos.up()) && rand.nextInt(5) == 1) { 
                 worldIn.setBlockState(pos, state.with(LIT, Boolean.valueOf(false)));
            }
      }
   

 

Posted
2 minutes ago, diesieben07 said:

Great.

It's really helpful when you change the name of the method we are talking about from one post to the next, that really helps with following the conversation. Especially when you don't tell anyone that you have done this.

 

Again though, the code you posted contains exactly zero calls to the randomDisplayTick method (it only contains the method itself).

So again, this statement is false:

 

I'm sorry, how do I call the randomDisplayTick method?

Posted
1 minute ago, diesieben07 said:

You must be calling it somewhere.

At least you were at some point, because otherwise it's code would never run...

Which it did though, because:

 

That means it ran at least once...

So, please use your IDE to find where you call this method.

That was meant for the fillWithRain method which works. Not for the one that should change the LIT to false.

Posted
8 minutes ago, diesieben07 said:

Okay... well, there is no event for weather change. So you probably need a tile entity which checks every tick.

So this is not working ?   !worldIn.isRainingAt(pos.up())

Posted
Just now, Kikoz said:

So this is not working ?   !worldIn.isRainingAt(pos.up())

Where are you calling that from?

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
Just now, Draco18s said:

Where are you calling that from?

 

26 minutes ago, Kikoz said:

I've just tried to rename it to 


   public void randomDisplayTick(BlockState state, World worldIn, BlockPos pos, Random rand) {
    	  
         if (!worldIn.isRainingAt(pos.up()) && rand.nextInt(5) == 1) { 
                 worldIn.setBlockState(pos, state.with(LIT, Boolean.valueOf(false)));
            }
      }
   

 

 

1 hour ago, Kikoz said:

package com.spcmf.pete11.objects.custommodels;

import java.util.Random;
import java.util.stream.IntStream;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.HorizontalBlock;
import net.minecraft.block.IWaterLoggable;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.fluid.Fluids;
import net.minecraft.fluid.IFluidState;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.pathfinding.PathType;
import net.minecraft.state.BooleanProperty;
import net.minecraft.state.DirectionProperty;
import net.minecraft.state.EnumProperty;
import net.minecraft.state.StateContainer;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.state.properties.Half;
import net.minecraft.state.properties.StairsShape;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.Mirror;
import net.minecraft.util.Rotation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.shapes.ISelectionContext;
import net.minecraft.util.math.shapes.VoxelShape;
import net.minecraft.util.math.shapes.VoxelShapes;
import net.minecraft.world.Explosion;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.IWorldReader;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;


public class CustomCampfire extends Block implements IWaterLoggable {
   public static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING;
   public static final EnumProperty<Half> HALF = BlockStateProperties.HALF;
   public static final EnumProperty<StairsShape> SHAPE = BlockStateProperties.STAIRS_SHAPE;
   public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
   
   public static final BooleanProperty LIT = BlockStateProperties.LIT;
   
   protected static final VoxelShape AABB_SLAB_TOP = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
   protected static final VoxelShape AABB_SLAB_BOTTOM = Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
   
   protected static final VoxelShape NWD_CORNER = Block.makeCuboidShape(0.0D, 10.0D, 0.0D, 8.0D, 15.0D, 8.0D);
   protected static final VoxelShape SWD_CORNER = Block.makeCuboidShape(0.0D, 10.0D, 8.0D, 8.0D, 15.0D, 16.0D);
   protected static final VoxelShape NED_CORNER = Block.makeCuboidShape(8.0D, 10.0D, 0.0D, 16.0D, 15.0D, 8.0D);
   protected static final VoxelShape SED_CORNER = Block.makeCuboidShape(8.0D, 10.0D, 8.0D, 16.0D, 15.0D, 16.0D);

   protected static final VoxelShape[] SLAB_TOP_SHAPES = makeShapes(AABB_SLAB_TOP, NWD_CORNER, NED_CORNER, SWD_CORNER, SED_CORNER);
   protected static final VoxelShape[] SLAB_BOTTOM_SHAPES = makeShapes(AABB_SLAB_BOTTOM, NWD_CORNER, NED_CORNER, SWD_CORNER, SED_CORNER);
   private static final int[] field_196522_K = new int[]{12, 5, 3, 10, 14, 13, 7, 11, 13, 7, 11, 14, 8, 4, 1, 2, 4, 1, 2, 8};

   private final Block modelBlock;
   private final BlockState modelState;

   private static VoxelShape[] makeShapes(VoxelShape slabShape, VoxelShape nwCorner, VoxelShape neCorner, VoxelShape swCorner, VoxelShape seCorner) {
      return IntStream.range(0, 16).mapToObj((p_199780_5_) -> {
         return combineShapes(p_199780_5_, slabShape, nwCorner, neCorner, swCorner, seCorner);
      }).toArray((p_199778_0_) -> {
         return new VoxelShape[p_199778_0_];
      });
   }

   /**
    * combines the shapes according to the mode set in the bitfield
    */
   private static VoxelShape combineShapes(int bitfield, VoxelShape slabShape, VoxelShape nwCorner, VoxelShape neCorner, VoxelShape swCorner, VoxelShape seCorner) {
      VoxelShape voxelshape = slabShape;
      if ((bitfield & 1) != 0) {
         voxelshape = VoxelShapes.or(slabShape, nwCorner);
      }

      if ((bitfield & 2) != 0) {
         voxelshape = VoxelShapes.or(voxelshape, neCorner);
      }

      if ((bitfield & 4) != 0) {
         voxelshape = VoxelShapes.or(voxelshape, swCorner);
      }

      if ((bitfield & 8) != 0) {
         voxelshape = VoxelShapes.or(voxelshape, seCorner);
      }

      return voxelshape;
   }

   // Forge: Use the other constructor that takes a Supplier

   public CustomCampfire(BlockState state, Block.Properties properties) {
      super(properties);
      this.setDefaultState(this.stateContainer.getBaseState().with(LIT, Boolean.valueOf(false)).with(FACING, Direction.NORTH).with(HALF, Half.BOTTOM).with(SHAPE, StairsShape.STRAIGHT).with(WATERLOGGED, Boolean.valueOf(false)));
      this.modelBlock = state.getBlock();
      this.modelState = state;
      this.stateSupplier = () -> state;
   }


   
   
   public CustomCampfire(java.util.function.Supplier<BlockState> state, Block.Properties properties) {
      super(properties);
      this.setDefaultState(this.stateContainer.getBaseState().with(LIT, Boolean.valueOf(false)).with(FACING, Direction.NORTH).with(HALF, Half.BOTTOM).with(SHAPE, StairsShape.STRAIGHT).with(WATERLOGGED, Boolean.valueOf(false)));
      this.modelBlock = Blocks.AIR; // These are unused, fields are redirected
      this.modelState = Blocks.AIR.getDefaultState();
      this.stateSupplier = state;
   }

   public boolean func_220074_n(BlockState state) {
      return true;
   }
   
   /**
    * Update the provided state given the provided neighbor facing and neighbor state, returning a new state.
    * For example, fences make their connections to the passed in state if possible, and wet concrete powder immediately
    * returns its solidified counterpart.
    * Note that this method should ideally consider only the specific face passed in.
    */
   @SuppressWarnings("deprecation")
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) {
      if (stateIn.get(WATERLOGGED)) {
         worldIn.getPendingFluidTicks().scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickRate(worldIn));
         worldIn.getPendingBlockTicks().scheduleTick(currentPos, this, 1);
      }

      
      
      return facing.getAxis().isHorizontal() ? stateIn.with(SHAPE, getShapeProperty(stateIn, worldIn, currentPos)) : super.updatePostPlacement(stateIn, facing, facingState, worldIn, currentPos, facingPos);
   }
   

   
   public void fillWithRain(World worldIn, BlockPos pos) {
	      if (worldIn.rand.nextInt(5) == 1) {
	         float f = worldIn.getBiome(pos).func_225486_c(pos);
	         if (!(f < 0.15F)) {
	            BlockState blockstate = worldIn.getBlockState(pos);
	            if (blockstate.get(LIT) == false) {
	               worldIn.setBlockState(pos, blockstate.with(LIT, Boolean.valueOf(true)));
	            }

	         }
	      }
	   }
   
  @SuppressWarnings("deprecation")
public void tick(BlockState state, World worldIn, BlockPos pos, Random random) {
	     this.modelBlock.tick(state, worldIn, pos, random);}



  
   public void randomDisplayTick(BlockState state, World worldIn, BlockPos pos, Random rand) {
    	  
         if (!worldIn.isRainingAt(pos.up()) && rand.nextInt(5) == 1) { 
                 worldIn.setBlockState(pos, state.with(LIT, Boolean.valueOf(false)));
            }
      }
   



public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
      return (state.get(HALF) == Half.TOP ? SLAB_TOP_SHAPES : SLAB_BOTTOM_SHAPES)[field_196522_K[this.func_196511_x(state)]];
   }

   private int func_196511_x(BlockState state) {
      return state.get(SHAPE).ordinal() * 4 + state.get(FACING).getHorizontalIndex();
   }

   /**
    * Called periodically clientside on blocks near the player to show effects (like furnace fire particles). Note that
    * this method is unrelated to {@link randomTick} and {@link #needsRandomTick}, and will always be called regardless
    * of whether the block can receive random update ticks
    */
   @OnlyIn(Dist.CLIENT)
   public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) {
      this.modelBlock.animateTick(stateIn, worldIn, pos, rand);
   }

   public void onBlockClicked(BlockState state, World worldIn, BlockPos pos, PlayerEntity player) {
      this.modelState.onBlockClicked(worldIn, pos, player);
   }

   /**
    * Called after a player destroys this Block - the posiiton pos may no longer hold the state indicated.
    */
   public void onPlayerDestroy(IWorld worldIn, BlockPos pos, BlockState state) {
      this.modelBlock.onPlayerDestroy(worldIn, pos, state);
   }

   /**
    * Returns how much this block can resist explosions from the passed in entity.
    */
   public float getExplosionResistance() {
      return this.modelBlock.getExplosionResistance();
   }

   /**
    * Gets the render layer this block will render on. SOLID for solid blocks, CUTOUT or CUTOUT_MIPPED for on-off
    * transparency (glass, reeds), TRANSLUCENT for fully blended transparency (stained glass)
    */
   public BlockRenderLayer getRenderLayer() {
      return this.modelBlock.getRenderLayer();
   }

   /**
    * How many world ticks before ticking
    */
   public int tickRate(IWorldReader worldIn) {
      return this.modelBlock.tickRate(worldIn);
   }

   public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
      if (state.getBlock() != state.getBlock()) {
         this.modelState.neighborChanged(worldIn, pos, Blocks.AIR, pos, false);
         this.modelBlock.onBlockAdded(this.modelState, worldIn, pos, oldState, false);
      }
   }

   public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
      if (state.getBlock() != newState.getBlock()) {
         this.modelState.onReplaced(worldIn, pos, newState, isMoving);
      }
   }

   /**
    * Called when the given entity walks on this Block
    */
   public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn) {
      this.modelBlock.onEntityWalk(worldIn, pos, entityIn);
   }



   public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
      return this.modelState.onBlockActivated(worldIn, player, handIn, hit);
   }

   /**
    * Called when this Block is destroyed by an Explosion
    */
   public void onExplosionDestroy(World worldIn, BlockPos pos, Explosion explosionIn) {
      this.modelBlock.onExplosionDestroy(worldIn, pos, explosionIn);
   }

   public BlockState getStateForPlacement(BlockItemUseContext context) {
      Direction direction = context.getFace();
      BlockPos blockpos = context.getPos();
      IFluidState ifluidstate = context.getWorld().getFluidState(blockpos);
      BlockState blockstate = this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing()).with(HALF, direction != Direction.DOWN && (direction == Direction.UP || !(context.getHitVec().y - (double)blockpos.getY() > 0.5D)) ? Half.BOTTOM : Half.TOP).with(WATERLOGGED, Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER));
      return blockstate.with(SHAPE, getShapeProperty(blockstate, context.getWorld(), blockpos));
   }



   /**
    * Returns a stair shape property based on the surrounding stairs from the given blockstate and position
    */
   private static StairsShape getShapeProperty(BlockState state, IBlockReader worldIn, BlockPos pos) {
      Direction direction = state.get(FACING);
      BlockState blockstate = worldIn.getBlockState(pos.offset(direction));
      if (isBlockStairs(blockstate) && state.get(HALF) == blockstate.get(HALF)) {
         Direction direction1 = blockstate.get(FACING);
         if (direction1.getAxis() != state.get(FACING).getAxis() && isDifferentStairs(state, worldIn, pos, direction1.getOpposite())) {
            if (direction1 == direction.rotateYCCW()) {
               return StairsShape.OUTER_LEFT;
            }

            return StairsShape.OUTER_RIGHT;
         }
      }

      BlockState blockstate1 = worldIn.getBlockState(pos.offset(direction.getOpposite()));
      if (isBlockStairs(blockstate1) && state.get(HALF) == blockstate1.get(HALF)) {
         Direction direction2 = blockstate1.get(FACING);
         if (direction2.getAxis() != state.get(FACING).getAxis() && isDifferentStairs(state, worldIn, pos, direction2)) {
            if (direction2 == direction.rotateYCCW()) {
               return StairsShape.INNER_LEFT;
            }

            return StairsShape.INNER_RIGHT;
         }
      }

      return StairsShape.STRAIGHT;
   }

   private static boolean isDifferentStairs(BlockState state, IBlockReader worldIn, BlockPos pos, Direction face) {
      BlockState blockstate = worldIn.getBlockState(pos.offset(face));
      return !isBlockStairs(blockstate) || blockstate.get(FACING) != state.get(FACING) || blockstate.get(HALF) != state.get(HALF);
   }

   public static boolean isBlockStairs(BlockState state) {
      return state.getBlock() instanceof CustomCampfire;
   }

   /**
    * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed
    * blockstate.
    * @deprecated call via {@link IBlockState#withRotation(Rotation)} whenever possible. Implementing/overriding is
    * fine.
    */
   public BlockState rotate(BlockState state, Rotation rot) {
      return state.with(FACING, rot.rotate(state.get(FACING)));
   }

   /**
    * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed
    * blockstate.
    * @deprecated call via {@link IBlockState#withMirror(Mirror)} whenever possible. Implementing/overriding is fine.
    */
   public BlockState mirror(BlockState state, Mirror mirrorIn) {
      Direction direction = state.get(FACING);
      StairsShape stairsshape = state.get(SHAPE);
      switch(mirrorIn) {
      case LEFT_RIGHT:
         if (direction.getAxis() == Direction.Axis.Z) {
            switch(stairsshape) {
            case INNER_LEFT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_RIGHT);
            case INNER_RIGHT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_LEFT);
            case OUTER_LEFT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_RIGHT);
            case OUTER_RIGHT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_LEFT);
            default:
               return state.rotate(Rotation.CLOCKWISE_180);
            }
         }
         break;
      case FRONT_BACK:
         if (direction.getAxis() == Direction.Axis.X) {
            switch(stairsshape) {
            case INNER_LEFT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_LEFT);
            case INNER_RIGHT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.INNER_RIGHT);
            case OUTER_LEFT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_RIGHT);
            case OUTER_RIGHT:
               return state.rotate(Rotation.CLOCKWISE_180).with(SHAPE, StairsShape.OUTER_LEFT);
            case STRAIGHT:
               return state.rotate(Rotation.CLOCKWISE_180);
            }
         }
      }

      return super.mirror(state, mirrorIn);
   }

   protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
      builder.add(LIT, FACING, HALF, SHAPE, WATERLOGGED);
   }

   public IFluidState getFluidState(BlockState state) {
      return state.get(WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : super.getFluidState(state);
   }

   public boolean allowsMovement(BlockState state, IBlockReader worldIn, BlockPos pos, PathType type) {
      return false;
   }

   private final java.util.function.Supplier<BlockState> stateSupplier;
   private Block getModelBlock() {
       return getModelState().getBlock();
   }
   private BlockState getModelState() {
       return stateSupplier.get();
   }
}

 

 

Posted

Ok, so:

  1. That method is only called on the client side and can't actually change the block state.
  2. That method is not called every tick. Its called randomly.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
Just now, Draco18s said:

Ok, so:

  1. That method is only called on the client side and can't actually change the block state.
  2. That method is not called every tick. Its called randomly.

1. FarmlandBlock uses it to change the block state, I just want it to randomly lit to false when it is not raining. Is there no other way to do it without a ticking entity?

 

Posted (edited)

...noooo, it uses the tick method (updateTick from previous versions). I'm looking at it right now.

 

Which...is also called randomly or by schedule, depending on the block. Farmland is random.

 

Also also, randomDisplayTick doesn't exist any more either, its now called animateTick. Put @Override on your damn methods.

Edited by Draco18s

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
  @Override
   public void tick(BlockState state, World worldIn, BlockPos pos, Random rand) {
    	  
         if (!worldIn.isRainingAt((pos)) && rand.nextInt(1) == 1) { 
                 worldIn.setBlockState(pos, state.with(LIT, Boolean.valueOf(false)));
            }
      }
   

So this should work?

Posted

Well.

Do you call .tickRandomly() on your BlockProperties?

If yes: then it will tick at random

If no: where are you scheduling your next tick?

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
8 minutes ago, Draco18s said:

Well.

Do you call .tickRandomly() on your BlockProperties?

If yes: then it will tick at random

If no: where are you scheduling your next tick?

THANK YOU ❤️ 

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

    • Try this build: https://www.curseforge.com/minecraft/mc-mods/dynamictrees/files/5978131
    • Does it work without betternether?
    • Try different builds of Rubidium/Embeddium or Oculus
    • Add crash-reports with sites like https://mclo.gs/ Maybe an issue with modernfix
    • [02:17:17] [main/INFO]: Loading ImmediateWindowProvider fmlearlywindow [02:17:17] [main/INFO]: Trying GL version 4.6 [02:17:17] [main/INFO]: Requested GL version 4.6 got version 4.6 [02:17:17] [main/INFO]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/C:/Users/Sami/curseforge/minecraft/Install/libraries/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar%23100!/ Service=ModLauncher Env=CLIENT [02:17:17] [pool-2-thread-1/INFO]: GL info: NVIDIA GeForce RTX 2070 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 566.36, NVIDIA Corporation [02:17:17] [main/INFO]: Found mod file [1.20.1-forge]-Epic-Knights-9.21.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file [1.20.1-forge]-Epic-Knights-Ice-and-Fire-1.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file [1.20.1-forge]-Epic-Knights-Ores-and-Alloys-1.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file [1.20.x-forge]-Epic-Knights-Addon-1.22.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file [1.20.x-forge]-Epic-Knights-Antique-Legacy-1.8.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file [1.20.x-forge]-Epic-Knights-Slavic-Armory-1.5.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file alexsmobs-1.22.9.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file almanac-1.20.x-forge-1.0.2.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file AmbientSounds_FORGE_v6.1.4_mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file amendments-1.20-1.2.14.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file appleskin-forge-mc1.20.1-2.5.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file architectury-9.2.14-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file astikorcarts-1.20.1-1.1.8.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file bettercombat-forge-1.8.6+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file biomemakeover-FORGE-1.20.1-1.11.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file BiomesOPlenty-1.20.1-18.0.0.592.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file blockui-1.20.1-1.0.156-RELEASE.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Bookshelf-Forge-1.20.1-20.2.13.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Bountiful-6.0.4+1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file carryon-forge-1.20.1-2.1.2.7.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file citadel-2.6.1-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file cloth-config-11.1.136-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Clumps-forge-1.20.1-12.0.0.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file comforts-forge-6.4.0+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Controlling-forge-1.20.1-12.0.2.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Corgilib-Forge-1.20.1-4.0.3.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file CreativeCore_FORGE_v2.12.30_mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file cristellib-1.1.6-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file cupboard-1.20.1-2.7.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file curios-forge-5.11.1+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file curiosbackslot-4.0.6-nc.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file decorative_blocks-forge-1.20.1-4.1.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file domum_ornamentum-1.20.1-1.0.186-RELEASE-universal.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file dragonseeker-1.2.0-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file dungeons_enhanced-1.20.1-5.3.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file embeddium-0.3.31+mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file EnchantmentDescriptions-Forge-1.20.1-17.1.19.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file entityculling-forge-1.7.2-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Explorify v1.6.2 f10-48.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Fallingleaves-1.20.1-2.1.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file FarmersDelight-1.20.1-1.2.6.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file ferritecore-6.0.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file framework-forge-1.20.1-0.7.12.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file geckolib-forge-1.20.1-4.7.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Geophilic v3.2 f15-61.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file GlitchCore-forge-1.20.1-0.0.1.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file goblintraders-forge-1.20.1-1.9.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file gravestone-forge-1.20.1-1.0.24.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file guardvillagers-1.20.1-1.6.10.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file handcrafted-forge-1.20.1-3.0.6.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file iceandfire-2.1.13-1.20.1-beta-5.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file immersive_weathering-1.20.1-2.0.3-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Jade-1.20.1-Forge-11.12.2.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file jei-1.20.1-forge-15.12.2.51.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file JustEnoughResources-1.20.1-1.4.0.247.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Kambrik-6.1.1+1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Kobolds-2.12.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file kotlinforforge-4.11.0-all.jar of type LIBRARY with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file kubejs-forge-2001.6.5-build.16.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file LeavesBeGone-v8.0.0-1.20.1-Forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file leawind_third_person-v2.2.0-mc1.20-1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letmedespawn-1.20.x-forge-1.4.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-API-forge-1.2.15-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-bakery-forge-1.1.15.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-brewery-forge-1.1.9.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-candlelight-forge-1.2.13.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-meadow-forge-1.3.19.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-vinery-forge-1.4.37.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file libraryferret-forge-1.20.1-4.0.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file map_atlases-1.20-6.0.12.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-bridges-3.0.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-doors-1.1.1forge-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-fences-1.1.2-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-furniture-3.3.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-lights-1.1.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-paintings-1.0.5-1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-paths-1.0.5-1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-roofs-2.3.1-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-trapdoors-1.1.4-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-windows-2.3.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file medieval_boomsticks-1.01.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file modernfix-forge-5.20.0+mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file moonlight-1.20-2.13.51-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file MouseTweaks-forge-mc1.20.1-2.25.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mowziesmobs-1.6.5.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file NaturesCompass-1.20.1-1.11.2-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file oculus-mc1.20.1-1.8.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Oh-The-Trees-Youll-Grow-forge-1.20.1-1.3.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Patchouli-1.20.1-84-FORGE.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Placebo-1.20.1-8.6.2.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file player-animation-lib-forge-1.0.2-rc1+1.20.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file polymorph-forge-0.49.8+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file PuzzlesLib-v8.1.25-1.20.1-Forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file realmrpg_seadwellers_2.9.9_forge_1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file realmrpg_skeletons-1.1.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file recruits-1.20.1-1.12.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file resourcefullib-forge-1.20.1-2.1.29.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file rhino-forge-2001.2.3-build.6.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file right-click-harvest-3.2.3+1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file rubidium-extra-0.5.4.4+mc1.20.1-build.131.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Searchables-forge-1.20.1-1.0.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file SereneSeasons-forge-1.20.1-9.1.0.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file SimplyDesirePaths-1.0.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file smallships-forge-1.20.1-2.0.0-b1.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file snowundertrees-1.20.1-1.4.6.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file spark-1.10.53-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file structure_gel-1.20.1-2.16.2.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file structurize-1.20.1-1.0.742-RELEASE.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file supplementaries-1.20-3.1.11.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file TerraBlender-forge-1.20.1-3.0.1.7.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Terralith_1.20.x_v2.5.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Towns-and-Towers-1.12-Fabric+Forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file weaponmaster_ydm-forge-1.20.1-4.2.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file zmedievalmusic-1.20.1-2.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/WARN]: Mod file C:\Users\Sami\curseforge\minecraft\Install\libraries\net\minecraftforge\fmlcore\1.20.1-47.3.12\fmlcore-1.20.1-47.3.12.jar is missing mods.toml file [02:17:17] [main/WARN]: Mod file C:\Users\Sami\curseforge\minecraft\Install\libraries\net\minecraftforge\javafmllanguage\1.20.1-47.3.12\javafmllanguage-1.20.1-47.3.12.jar is missing mods.toml file [02:17:17] [main/WARN]: Mod file C:\Users\Sami\curseforge\minecraft\Install\libraries\net\minecraftforge\lowcodelanguage\1.20.1-47.3.12\lowcodelanguage-1.20.1-47.3.12.jar is missing mods.toml file [02:17:17] [main/WARN]: Mod file C:\Users\Sami\curseforge\minecraft\Install\libraries\net\minecraftforge\mclanguage\1.20.1-47.3.12\mclanguage-1.20.1-47.3.12.jar is missing mods.toml file [02:17:17] [main/INFO]: Found mod file fmlcore-1.20.1-47.3.12.jar of type LIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:17] [main/INFO]: Found mod file javafmllanguage-1.20.1-47.3.12.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:17] [main/INFO]: Found mod file lowcodelanguage-1.20.1-47.3.12.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:17] [main/INFO]: Found mod file mclanguage-1.20.1-47.3.12.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:17] [main/INFO]: Found mod file client-1.20.1-20230612.114412-srg.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:17] [main/INFO]: Found mod file forge-1.20.1-47.3.12-universal.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:18] [main/WARN]: Attempted to select two dependency jars from JarJar which have the same identification: Mod File:  and Mod File: . Using Mod File: [02:17:18] [main/INFO]: Found 16 dependencies adding them to mods collection [02:17:18] [main/INFO]: Found mod file mixinextras-forge-0.4.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file mixinsquared-forge-0.1.2-beta.5.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file jankson-1.2.3.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file yabn-1.0.3.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file kfflang-4.11.0.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file spectrelib-forge-0.13.17+1.20.1.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file taniwha-forge-1.20.0-5.4.4.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file MixinSquared-0.1.2-beta.5.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file mclib-20.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file puzzlesaccessapi-forge-8.0.7.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file kfflib-4.11.0.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file kffmod-4.11.0.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file bytecodecs-1.0.2.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file NanoLiveConfig-1.2.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file MixinExtras-0.4.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file jcpp-1.4.14.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:20] [main/INFO]: Compatibility level set to JAVA_17 [02:17:20] [main/INFO]: Launching target 'forgeclient' with arguments [--version, forge-47.3.12, --gameDir, C:\Users\Sami\curseforge\minecraft\Instances\bals 2, --assetsDir, C:\Users\Sami\curseforge\minecraft\Install\assets, --uuid, be779ab0d8dd4d16a1f1aa5b21c9f2f3, --username, Kaiserwaffe, --assetIndex, 5, --accessToken, ????????, --clientId, ODk4Y2EyYTAtMTA2OC00MmYwLThiOGItMGU1MzRlMDdjZjQ2, --xuid, 2535449048843979, --userType, msa, --versionType, release, --width, 854, --height, 480, --quickPlayPath, C:\Users\Sami\curseforge\minecraft\Install\quickPlay\java\1737271034449.json] [02:17:20] [main/INFO]: Loaded configuration file for ModernFix 5.20.0+mc1.20.1: 86 options available, 0 override(s) found [02:17:20] [main/INFO]: Applying Nashorn fix [02:17:20] [main/INFO]: Applied Forge config corruption patch [02:17:20] [main/INFO]: Loaded configuration file for Embeddium: 167 options available, 3 override(s) found [02:17:20] [main/INFO]: Searching for graphics cards... [02:17:20] [main/INFO]: Found graphics card: GraphicsAdapterInfo[vendor=NVIDIA, name=NVIDIA GeForce RTX 2070 SUPER, version=DriverVersion=32.0.15.6636] [02:17:20] [main/WARN]: Embeddium has applied one or more workarounds to prevent crashes or other issues on your system: [NVIDIA_THREADED_OPTIMIZATIONS] [02:17:20] [main/WARN]: This is not necessarily an issue, but it may result in certain features or optimizations being disabled. You can sometimes fix these issues by upgrading your graphics driver. [02:17:20] [main/WARN]: Reference map 'handcrafted-forge-1.20.1-forge-refmap.json' for handcrafted.mixins.json could not be read. If this is a development environment you can ignore this message [02:17:20] [main/WARN]: Reference map 'smallships-forge-refmap.json' for smallships.mixins.json could not be read. If this is a development environment you can ignore this message [02:17:20] [main/WARN]: Reference map 'CuriosBackSlot.refmap.json' for curiosbackslot.mixins.json could not be read. If this is a development environment you can ignore this message [02:17:20] [main/WARN]: Reference map 'mixins.epic_knights_ice_and_fire.refmap.json' for mixins.epic_knights_ice_and_fire.json could not be read. If this is a development environment you can ignore this message [02:17:20] [main/INFO]: Loaded configuration file for Sodium Extra: 35 options available, 0 override(s) found [02:17:20] [main/INFO]: Loading 121 mods:     - alexsmobs 1.22.9     - almanac 1.0.2     - ambientsounds 6.1.4     - amendments 1.20-1.2.14     - antiquelegacy 1.8     - appleskin 2.5.1+mc1.20.1     - architectury 9.2.14     - astikorcarts 1.1.8     - bakery 1.1.15     - bettercombat 1.8.6+1.20.1     - biomemakeover 1.20.1-1.11.4         \-- taniwha 1.20.0-5.4.4     - biomesoplenty 18.0.0.592     - blockui 1.20.1-1.0.156-RELEASE     - bookshelf 20.2.13     - bountiful 6.0.4+1.20.1     - brewery 1.1.9     - candlelight 1.2.13     - carryon 2.1.2.7     - citadel 2.6.1     - cloth_config 11.1.136     - clumps 12.0.0.4     - comforts 6.4.0+1.20.1     - controlling 12.0.2     - corgilib 4.0.3.3     - creativecore 2.12.30     - cristellib 1.1.6     - cupboard 1.20.1-2.7     - curios 5.11.1+1.20.1     - curiosbackslot 4.0.6-nc     - decorative_blocks 4.1.3     - doapi 1.2.15         \-- terraform 7.0.1     - domum_ornamentum 1.20.1-1.0.186-RELEASE     - dragonseeker 1.2.0-1.20.1     - dungeons_enhanced 5.3.0     - embeddium 0.3.31+mc1.20.1         \-- rubidium 0.7.1     - embeddium_extra 0.5.4.4+mc1.20.1-build.131     - enchdesc 17.1.19     - entityculling 1.7.2     - epic_knights_ice_and_fire 1.0     - epic_knights_ores_and_alloys 1.1     - explorify 1.6.2     - fallingleaves 2.1.0     - farmersdelight 1.20.1-1.2.6     - ferritecore 6.0.1     - forge 47.3.12     - framework 0.7.12     - geckolib 4.7     - geophilic 3.2     - glitchcore 0.0.1.1     - goblintraders 1.9.3     - gravestone 1.20.1-1.0.24     - guardvillagers 1.20.1-1.6.10     - handcrafted 3.0.6     - iceandfire 2.1.13-1.20.1     - immersive_weathering 1.20.1-2.0.3     - jade 11.12.2+forge     - jei 15.12.2.51     - jeresources 1.4.0.247     - kambrik 6.1.1+1.20.1     - kobolds 2.12.0     - kotlinforforge 4.11.0     - kubejs 2001.6.5-build.16     - leavesbegone 8.0.0     - leawind_third_person 2.2.0     - letmedespawn 1.4.4     - libraryferret 4.0.0     - magistuarmory 9.21     - magistuarmoryaddon 1.22     - map_atlases 1.20-6.0.12         \-- mixinextras 0.4.1     - mcwbridges 3.0.0     - mcwdoors 1.1.1     - mcwfences 1.1.2     - mcwfurnitures 3.3.0     - mcwlights 1.1.0     - mcwpaintings 1.0.5     - mcwpaths 1.0.5     - mcwroofs 2.3.1     - mcwtrpdoors 1.1.4     - mcwwindows 2.3.0     - meadow 1.3.19         \-- mixinsquared 0.1.2-beta.5     - medieval_boomsticks 1.01     - medievalmusic 1.20.1-2.1     - minecraft 1.20.1     - modernfix 5.20.0+mc1.20.1     - moonlight 1.20-2.13.51     - mousetweaks 2.25.1     - mowziesmobs 1.6.4     - naturescompass 1.20.1-1.11.2-forge     - oculus 1.8.0     - ohthetreesyoullgrow 1.20.1-1.3.4     - patchouli 1.20.1-84-FORGE     - paths 1.0.0     - placebo 8.6.2     - playeranimator 1.0.2-rc1+1.20     - polymorph 0.49.8+1.20.1         \-- spectrelib 0.13.17+1.20.1     - puzzleslib 8.1.25         \-- puzzlesaccessapi 8.0.7     - realmrpg_skeletons 1.1.0     - recruits 1.12.3     - resourcefullib 2.1.29     - rhino 2001.2.3-build.6     - rightclickharvest 3.2.3+1.20.1-forge     - seadwellers 2.9.9     - searchables 1.0.3     - sereneseasons 9.1.0.0     - slavicarmory 1.5     - smallships 2.0.0-b1.4     - snowundertrees 1.4.6     - spark 1.10.53     - structure_gel 2.16.2     - structurize 1.20.1-1.0.742-RELEASE     - supplementaries 1.20-3.1.11     - t_and_t 0.0NONE     - terrablender 3.0.1.7     - terralith 2.5.4     - vinery 1.4.37     - weaponmaster_ydm 4.2.3 [02:17:20] [main/WARN]: Reference map 'cristellib-forge-refmap.json' for cristellib.mixins.json could not be read. If this is a development environment you can ignore this message [02:17:20] [main/INFO]: Patching IForgeItemStack#getEnchantmentLevel [02:17:20] [main/INFO]: Patching IForgeItemStack#getEnchantmentLevel [02:17:21] [main/WARN]: Error loading class: net/raphimc/immediatelyfast/feature/map_atlas_generation/MapAtlasTexture (java.lang.ClassNotFoundException: net.raphimc.immediatelyfast.feature.map_atlas_generation.MapAtlasTexture) [02:17:21] [main/WARN]: Error loading class: mekanism/client/render/entity/RenderFlame (java.lang.ClassNotFoundException: mekanism.client.render.entity.RenderFlame) [02:17:21] [main/WARN]: Error loading class: mekanism/client/render/armor/MekaSuitArmor (java.lang.ClassNotFoundException: mekanism.client.render.armor.MekaSuitArmor) [02:17:21] [main/WARN]: Error loading class: mezz/modnametooltip/TooltipEventHandler (java.lang.ClassNotFoundException: mezz.modnametooltip.TooltipEventHandler) [02:17:21] [main/WARN]: Error loading class: me/shedaniel/rei/impl/client/ClientHelperImpl (java.lang.ClassNotFoundException: me.shedaniel.rei.impl.client.ClientHelperImpl) [02:17:21] [main/WARN]: Error loading class: twilightforest/TFMagicMapData$TFMapDecoration (java.lang.ClassNotFoundException: twilightforest.TFMagicMapData$TFMapDecoration) [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.world.sky.WorldRendererMixin' as rule 'mixin.features.render.world.sky' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.world.sky.ClientWorldMixin' as rule 'mixin.features.render.world.sky' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.world.sky.BackgroundRendererMixin' as rule 'mixin.features.render.world.sky' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.gui.font.GlyphRendererMixin' as rule 'mixin.features.render.gui.font' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.gui.font.FontSetMixin' as rule 'mixin.features.render.gui.font' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.shadows.EntityRenderDispatcherMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.remove_streams.ModelPartMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.remove_streams.HierarchicalModelMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.fast_render.ModelPartMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.fast_render.CuboidMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.cull.EntityRendererMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/INFO]: Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.4.1). [02:17:22] [main/INFO]: Patching IForgeItemStack#getEnchantmentLevel [02:17:22] [main/INFO]: Patching IForgeItemStack#getEnchantmentLevel [02:17:22] [main/WARN]: Static binding violation: PRIVATE @Overwrite method m_216202_ in modernfix-forge.mixins.json:perf.tag_id_caching.TagOrElementLocationMixin cannot reduce visibiliy of PUBLIC target method, visibility will be upgraded. [02:17:23] [pool-4-thread-1/INFO]: ModernFix reached bootstrap stage (9.268 s after launch) [02:17:23] [pool-4-thread-1/WARN]: @Final field delegatesByName:Ljava/util/Map; in modernfix-forge.mixins.json:perf.forge_registry_alloc.ForgeRegistryMixin should be final [02:17:23] [pool-4-thread-1/WARN]: @Final field delegatesByValue:Ljava/util/Map; in modernfix-forge.mixins.json:perf.forge_registry_alloc.ForgeRegistryMixin should be final [02:17:24] [pool-4-thread-1/INFO]: Vanilla bootstrap took 968 milliseconds [02:17:24] [pool-4-thread-1/INFO]: Patching IForgeItemStack#getEnchantmentLevel [02:17:24] [pool-4-thread-1/INFO]: Patching IForgeItemStack#getEnchantmentLevel
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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