/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive 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 Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.world; import matteroverdrive.data.world.GenPositionWorldData; import matteroverdrive.data.world.WorldPosition2D; import matteroverdrive.handler.ConfigurationHandler; import matteroverdrive.init.MatterOverdriveBlocks; import matteroverdrive.tile.TileEntityGravitationalAnomaly; import matteroverdrive.util.IConfigSubscriber; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; import net.minecraftforge.common.config.Property; import java.util.HashSet; import java.util.Random; /** * Created by Simeon on 5/18/2015. */ public class WorldGenGravitationalAnomaly extends WorldGenerator implements IConfigSubscriber { private HashSet<Integer> blacklist = new HashSet<>(); private HashSet<Integer> whitelist = new HashSet<>(); private float defaultChance; private float chance; private int minMatter; private int maxMatter; private String name; public WorldGenGravitationalAnomaly(String name,float chance,int minMatter,int maxMatter) { this.defaultChance = chance; this.chance = chance; this.minMatter = minMatter; this.maxMatter = maxMatter; this.name = name; } @Override public boolean generate(World world, Random random, int x, int y, int z) { if (isWorldValid(world) && random.nextFloat() < chance) { if (world.setBlock(x,y,z, MatterOverdriveBlocks.gravitational_anomaly)) { TileEntityGravitationalAnomaly anomaly = new TileEntityGravitationalAnomaly(minMatter + random.nextInt(maxMatter - minMatter)); world.setTileEntity(x,y,z,anomaly); GenPositionWorldData data = MOWorldGen.getWorldPositionData(world); data.addPosition(name,new WorldPosition2D(x,y)); } } return false; } private boolean isWorldValid(World world) { if (whitelist.size() > 0) { return whitelist.contains(world.provider.dimensionId) && !blacklist.contains(world.provider.dimensionId); } return !blacklist.contains(world.provider.dimensionId); } @Override public void onConfigChanged(ConfigurationHandler config) { chance = config.config.getFloat(ConfigurationHandler.KEY_GRAVITATIONAL_ANOMALY_SPAWN_CHANCE, ConfigurationHandler.CATEGORY_WORLD_GEN + "." + "gravitational_anomaly",defaultChance,0,1,"Spawn Chance of Gravity Anomaly pre chunk"); loadWhitelist(config); loadBlacklist(config); } private void loadWhitelist(ConfigurationHandler configurationHandler) { whitelist.clear(); Property whitelistProp = configurationHandler.config.get(ConfigurationHandler.CATEGORY_WORLD_GEN + "." + "gravitational_anomaly","whitelist",new int[]{-1,0,2}); whitelistProp.comment = "Gravitational Anomaly Dimension ID whitelist"; int[] dimentions = whitelistProp.getIntList(); for (int i = 0;i < dimentions.length;i++) { whitelist.add(dimentions[i]); } } private void loadBlacklist(ConfigurationHandler configurationHandler) { blacklist.clear(); Property blacklistProp = configurationHandler.config.get(ConfigurationHandler.CATEGORY_WORLD_GEN + "." + "gravitational_anomaly","blacklist",new int[]{}); blacklistProp.comment = "Gravitational Anomaly Dimension ID blacklist"; int[] dimentions = blacklistProp.getIntList(); for (int i = 0;i < dimentions.length;i++) { blacklist.add(dimentions[i]); } } }