/** * Copyright (c) 22/Feb/2015 Davide Cossu & Matthew Albrecht. * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 3 of the License, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, see <http://www.gnu.org/licenses>. */ package com.minestellar.utils.world.gen; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; import net.minecraft.world.ChunkPosition; import net.minecraft.world.biome.BiomeCache; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.biome.WorldChunkManager; import net.minecraft.world.gen.layer.IntCache; public abstract class WorldChunkManagerMinestellar extends WorldChunkManager { private final BiomeCache biomeCache; private final List<BiomeGenBase> biomesToSpawnIn; public WorldChunkManagerMinestellar() { this.biomeCache = new BiomeCache(this); this.biomesToSpawnIn = new ArrayList<BiomeGenBase>(); this.biomesToSpawnIn.add(this.getBiome()); } @Override public List<BiomeGenBase> getBiomesToSpawnIn() { return this.biomesToSpawnIn; } @Override public BiomeGenBase getBiomeGenAt(int par1, int par2) { return this.getBiome(); } @Override public float[] getRainfall(float[] par1ArrayOfFloat, int par2, int par3, int par4, int par5) { if (par1ArrayOfFloat == null || par1ArrayOfFloat.length < par4 * par5) { par1ArrayOfFloat = new float[par4 * par5]; } Arrays.fill(par1ArrayOfFloat, 0, par4 * par5, 0.0F); return par1ArrayOfFloat; } @Override public float getTemperatureAtHeight(float par1, int par2) { return par1; } @Override public BiomeGenBase[] getBiomesForGeneration(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5) { IntCache.resetIntCache(); if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5) { par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5]; } for (int var7 = 0; var7 < par4 * par5; ++var7) { par1ArrayOfBiomeGenBase[var7] = this.getBiome(); } return par1ArrayOfBiomeGenBase; } @Override public BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5) { return this.getBiomeGenAt(par1ArrayOfBiomeGenBase, par2, par3, par4, par5, true); } @Override public BiomeGenBase[] getBiomeGenAt(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5, boolean par6) { IntCache.resetIntCache(); if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5) { par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5]; } if (par6 && par4 == 16 && par5 == 16 && (par2 & 15) == 0 && (par3 & 15) == 0) { final BiomeGenBase[] var9 = this.biomeCache.getCachedBiomes(par2, par3); System.arraycopy(var9, 0, par1ArrayOfBiomeGenBase, 0, par4 * par5); return par1ArrayOfBiomeGenBase; } else { for (int var8 = 0; var8 < par4 * par5; ++var8) { par1ArrayOfBiomeGenBase[var8] = this.getBiome(); } return par1ArrayOfBiomeGenBase; } } @SuppressWarnings("rawtypes") @Override public boolean areBiomesViable(int par1, int par2, int par3, List par4List) { return par4List.contains(this.getBiome()); } @SuppressWarnings("rawtypes") @Override public ChunkPosition findBiomePosition(int par1, int par2, int par3, List par4List, Random par5Random) { final int var6 = par1 - par3 >> 2; final int var7 = par2 - par3 >> 2; final int var8 = par1 + par3 >> 2; final int var10 = var8 - var6 + 1; final int var16 = var6 + 0 % var10 << 2; final int var17 = var7 + 0 / var10 << 2; return new ChunkPosition(var16, 0, var17); } @Override public void cleanupCache() { this.biomeCache.cleanupCache(); } public abstract BiomeGenBase getBiome(); }