Jump to content

[1.8] Special Biome Grass Color


Cloud

Recommended Posts

I'm trying to create a biome with a nice light blue tint to grass, similar to the Mystic Grove from Biomes o' Pleanty. But what I've found is either I'm not using this.setcolor() or some other biome color-izer correctly, or it is impossible without a custom foliage file. So what do I have to do to get this to work the way I want it to? Thanks!

 

Here's my code for the biome:

 

package com.camp.world;

import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class BiomeMysticForest extends BiomeGenBase {

private static final Height biomeHeight = new Height(0.1F, 0.2F);

public BiomeMysticForest(int id) {
	super(id);

	this.setHeight(biomeHeight);
        this.setColor(6937835);
        this.setTemperatureRainfall(0.7F, 1.0F);
	this.waterColorMultiplier = 8874485;

	this.theBiomeDecorator.treesPerChunk = 9;
	this.theBiomeDecorator.grassPerChunk = 15;
}

    public int getBiomeGrassColor(int p_150558_1_, int p_150558_2_, int p_150558_3_)
    {
	return 6937835;
}

    public int getBiomeFoliageColor(int x, int y, int z)
{
	return 5954640;
}

Link to comment
Share on other sites

My first post helping others :D so proud rn.

 

Anyways. when you extend the BiomeGenBase, you get something called this.topBlock

What this.topBlock does is sets the block on the (lol) first layer of the biome, aka the top, to a block you specify. If you want to make this a different colored grass, you should make another class and create a block called DarkGrass (or something) and make it extend BlockGrass, or if that's not a thing, then give it the properties of a grass block, which shouldn't be that hard.

 

 

You would use this.topBlock like this: this.topBlock = BlockManager.yourCustomBlock.getDefaultState();

 

Sorry if this is confusing, I'm writing this while playing euchre and without access to my computer right now lol

Link to comment
Share on other sites

Alright! Thanks a ton for the help! :D In the meantime if anybody knows if it's possible to accomplish this with vanilla grass, I would appreciate the help! Thanks again Ytt!

 

Override the

BiomeGenBase#getGrassColorAtPos

method that Failender mentioned.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Alright! Thanks a ton for the help! :D In the meantime if anybody knows if it's possible to accomplish this with vanilla grass, I would appreciate the help! Thanks again Ytt!

Np, I'm sure there's an easier way to accomplish this though

 

Override the

BiomeGenBase#getGrassColorAtPos

method that Failender mentioned.

;-; never looked at that in the BiomeGenBase class. Would it change the color of the entire block or just the top layer (green)?

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • They were already updated, and just to double check I even did a cleanup and fresh update from that same page. I'm quite sure drivers are not the problem here. 
    • i tried downloading the drivers but it says no AMD graphics hardware has been detected    
    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
  • Topics

×
×
  • Create New...

Important Information

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