Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

(1.10.2) Questions concerning a custom BiomeProvider


Recommended Posts

Hi, I am attempting to update my dimension from 1.8.9, and have a few questions/concerns on something I am doing wrong involving the BiomeProvider, or perhaps maybe even the WorldProvider itself. I have a multibiome dimension with all custom biomes, and yet everytime I try to set the BiomeProvider for it, I seemingly end up with a world that is only made up of Plains and Ocean biomes. My working understanding of how world generation works has led me to believe that the world is defaulting to these biomes because it cannot get the list of new biomes, whiiiich is where I run into trouble.

Also for reference, I have tried plugging in the BiomeProviderSingle class with all of my custom biomes, and it works flawlessly, save for of course only being the single biome, so I know my problem lies somewhere within the realm of my new biomeprovider.




My guess is that I am missing something pretty obvious, or there has been some kind of major change to the world generation code other than the WorldChunkManager becoming the BiomeProvider that I have completely overlooked.



Below is the relevant code from each of the files. I didn't figure the rest of it needed to be included as it is either vanilla, or does not pertain to the generation of the dimension itself.




public class WorldProviderCustom extends WorldProvider{

public IChunkGenerator createChunkGenerator() {
return new ChunkProviderCustom(this.worldObj, this.worldObj.getSeed(), true, worldObj.getWorldInfo().getGeneratorOptions());

protected void createBiomeProvider()
   this.biomeProvider = new BiomeProviderCustom(worldObj.getWorldInfo().getSeed(), worldObj.getWorldInfo().getTerrainType(), "");

//Vanilla things






public class BiomeProviderCustom extends BiomeProvider
public static List<Biome> newBiomes = Lists.newArrayList(CustomBiomes.ruins,CustomBiomes.volcano,CustomBiomes.crag);

    private GenLayer genBiomes;
    private GenLayer biomeIndexLayer;
    private final BiomeCache biomeCache;
    private final List<Biome> biomesToSpawnIn;

    protected BiomeProviderCustom()
        this.biomeCache = new BiomeCache(this);
        this.biomesToSpawnIn = Lists.newArrayList(newBiomes);

    public BiomeProviderCustom(long seed, WorldType worldTypeIn, String options)
        GenLayer[] agenlayer = GenLayerCustom.makeTheWorld(seed, worldTypeIn); //At the moment is just a copy of GenLayerIsland, so no issues there...

        agenlayer = getModdedBiomeGenerators(worldTypeIn, seed, agenlayer);
        this.genBiomes = agenlayer[0];
        this.biomeIndexLayer = agenlayer[1];

    public BiomeProviderCustom(WorldInfo info)
        this(info.getSeed(), info.getTerrainType(), info.getGeneratorOptions());  

//Vanilla things





At this point in time, is just more or less a straight copy from vanilla and shouldn't be causing any issues, but I can provide it should I have missed something that's changed here that might be causing my problem.



Disclaimer: It's entirely likely that I have missed something pretty obvious, as my programming skills are certainly not the best, but this is the first issue I have actually had with dimensions since first making one around 1.6 or so, so if I have missed something obvious please try not to beat me over the head too much :)


Thank you in advanced for any insight you all may have in this matter!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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.


  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Buttons are client side only, you must send a packet to the server saying "this button was pressed."
    • Hello, I came to ask you to help me how to fix the crash at the beginning of the launch I tried to check the modpack via curseforge, I reinstalled java, I reinstalled the modpack and also I erased the cache folder of Minecraft launcher. No resolution of the problem.   The error is showing this:  "The game crashed whilst initializing game Error: java.lang.NullPointerException: Initializing game Exit code: -1" I made a pastebin link for you to see, here is the pastebin link: https://pastebin.com/dpEnzy01  
    • hi guys, i need help  with tileentitys. i have a button in my tileentity and i want if i press the butten, a function should be called up in the in the tileentityclass.  More precisely said the brewBlackout() class my Init in the Screen: @Override protected void init() { this.addButton(new ImageButton(this.guiLeft + 10, this.height + 30, 20, 18, 0, 0, 19, CONTINUE_BUTTON, (button) -> { ((ImageButton)button).setPosition(this.guiLeft + 20, this.height / 2 - 49); })); } and my tileentity package net.the_goldbeards.lootdebugs.tileentity; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.*; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; import net.the_goldbeards.lootdebugs.init.ModBlocks; import net.the_goldbeards.lootdebugs.init.ModItems; import net.the_goldbeards.lootdebugs.init.ModTileEntities; import javax.annotation.Nonnull; public class PubTile extends TileEntity implements ITickableTileEntity { private final ItemStackHandler itemHandler = createHandler(); private final LazyOptional<IItemHandler> handler = LazyOptional.of(() -> itemHandler); public PubTile(TileEntityType<?> tileEntityTypeIn) { super(tileEntityTypeIn); } public PubTile() { this(ModTileEntities.PUB_TILE.get()); } @Override public void read(BlockState state, CompoundNBT nbt) { itemHandler.deserializeNBT(nbt.getCompound("pub")); super.read(state, nbt); } @Override public CompoundNBT write(CompoundNBT compound) { compound.put("pub", itemHandler.serializeNBT()); return super.write(compound); } private ItemStackHandler createHandler() { return new ItemStackHandler(6) { @Override protected void onContentsChanged(int slot) { brewBlackout(); markDirty(); } @Override public boolean isItemValid(int slot, @Nonnull ItemStack stack) { switch (slot) { case 0: return stack.getItem() == Items.WATER_BUCKET || stack.getItem() == Items.BUCKET;//Water Insert case 1: return stack.getItem() == Items.REDSTONE;//Barley Bulb case 2: return stack.getItem() == Items.WARPED_DOOR;// Yeast Cone case 3: return stack.getItem() == Items.MAGENTA_BANNER;//Malz Stars case 4: return stack.getItem() == ModItems.BARLEY_BULB.get();//Starch Nut case 5: return stack.getItem() == ModItems.MUG.get() || stack.getItem() == ModItems.OILY_OAF.get() || stack.getItem() == ModItems.SKULL_CRUSHER.get() || stack.getItem() == ModItems.OILY_OAF.get();//Output -> Mug or Mug with Liquid default: return false; } } @Override protected int getStackLimit(int slot, @Nonnull ItemStack stack) { if (slot == 5) { return 1; } if (slot == 0) { return 5; } else { return 64; } } @Nonnull @Override public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { if (!isItemValid(slot, stack)) { return stack; } return super.insertItem(slot, stack, simulate); } }; } @Nonnull @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap) { if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { return handler.cast(); } return super.getCapability(cap); } public void brewBlackout() { boolean isWaterInSlot = this.itemHandler.getStackInSlot(0).getCount() == 1 && this.itemHandler.getStackInSlot(0).getItem() == Items.WATER_BUCKET; boolean isMugInSlot = this.itemHandler.getStackInSlot(5).getCount() == 1 && this.itemHandler.getStackInSlot(5).getItem() == ModItems.MUG.get(); boolean isIngredients = this.itemHandler.getStackInSlot(4).getCount() >= 3 && this.itemHandler.getStackInSlot(4).getItem() == ModItems.BARLEY_BULB.get(); if (isMugInSlot && isIngredients && isWaterInSlot) { this.itemHandler.getStackInSlot(0).shrink(1); this.itemHandler.insertItem(0, new ItemStack(Items.BUCKET, 1), false); this.itemHandler.getStackInSlot(4).shrink(3); this.itemHandler.getStackInSlot(5).shrink(1); this.itemHandler.insertItem(5, new ItemStack(ModBlocks.OILY_OAF.get(), 1), false); } } /* private void craft() { Inventory inv = new Inventory(itemHandler.getSlots()); for (int i = 0; i < itemHandler.getSlots(); i++) { inv.setInventorySlotContents(i, itemHandler.getStackInSlot(i)); } Optional<PubRecipe> recipe = world.getRecipeManager() .getRecipe(ModRecipeTypes.PUB_RECIPE, inv, world); recipe.ifPresent(iRecipe -> { ItemStack output = iRecipe.getRecipeOutput(); craftTheItem(output); markDirty(); }); } private void craftTheItem(ItemStack output) { itemHandler.extractItem(0, 1,false); itemHandler.insertItem(0, new ItemStack(Items.BUCKET,1),false); } */ @Override public void tick() { // if(world.isRemote) // {return;} // craft(); }  
  • Topics

  • Who's Online (See full list)

  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.