/*
* 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.MatterOverdrive;
import matteroverdrive.Reference;
import matteroverdrive.api.quest.QuestStack;
import matteroverdrive.blocks.BlockTritaniumCrate;
import matteroverdrive.blocks.BlockWeaponStation;
import matteroverdrive.init.MatterOverdriveBlocks;
import matteroverdrive.init.MatterOverdriveQuests;
import matteroverdrive.tile.TileEntityHoloSign;
import matteroverdrive.tile.TileEntityWeaponStation;
import matteroverdrive.util.MOInventoryHelper;
import matteroverdrive.util.WeaponFactory;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.IInventory;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraft.world.World;
import net.minecraftforge.common.ChestGenHooks;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.Random;
/**
* Created by Simeon on 11/26/2015.
*/
public class MOWorldGenCrashedSpaceShip extends MOWorldGenBuilding
{
private static final int MIN_DISTANCE_APART = 256;
private String[] holoTexts;
public MOWorldGenCrashedSpaceShip(String name)
{
super(name,new ResourceLocation(Reference.PATH_WORLD_TEXTURES + "crashed_space_ship.png"),11,35);
holoTexts = new String[]{"Critical\nError","Contacting\nSection 9","System\nFailure","Emergency\nPower\nOffline","System\nReboot\nFailure","Help Me","I Need\nWater"};
setyOffset(-1);
addMapping(0x38c8df, MatterOverdriveBlocks.decorative_clean);
addMapping(0x187b8b,MatterOverdriveBlocks.decorative_vent_bright);
addMapping(0xaa38df,MatterOverdriveBlocks.forceGlass);
addMapping(0x00ff78, Blocks.grass);
addMapping(0xd8ff00,MatterOverdriveBlocks.holoSign);
addMapping(0xaccb00,MatterOverdriveBlocks.holoSign);
addMapping(0x3896df,MatterOverdriveBlocks.decorative_tritanium_plate);
addMapping(0xdfd938,MatterOverdriveBlocks.decorative_tritanium_plate_stripe);
addMapping(0x5d89ab,MatterOverdriveBlocks.decorative_holo_matrix);
addMapping(0x77147d,MatterOverdriveBlocks.weapon_station);
addMapping(0xb04a90,MatterOverdriveBlocks.tritaniumCrate);
addMapping(0x94deea,MatterOverdriveBlocks.decorative_separator);
addMapping(0xff9c00,MatterOverdriveBlocks.decorative_coils);
addMapping(0xaca847,MatterOverdriveBlocks.decorative_matter_tube);
addMapping(0x0c3b60,MatterOverdriveBlocks.decorative_carbon_fiber_plate);
addMapping(0xc5ced0,Blocks.air);
}
@Override
public void onBlockPlace(World world, Block block, int x, int y, int z, Random random, int color)
{
if (block == MatterOverdriveBlocks.holoSign) {
if (colorsMatch(color, 0xd8ff00)) {
world.setBlockMetadataWithNotify(x, y, z, ForgeDirection.EAST.ordinal(), 3);
} else if (colorsMatch(color, 0xaccb00)) {
world.setBlockMetadataWithNotify(x, y, z, ForgeDirection.WEST.ordinal(), 3);
}
TileEntity tileEntity = world.getTileEntity(x,y,z);
if (tileEntity instanceof TileEntityHoloSign)
{
if (random.nextInt(100) < 30) {
((TileEntityHoloSign) tileEntity).setText(holoTexts[random.nextInt(holoTexts.length)]);
}
}
}else if (block instanceof BlockTritaniumCrate)
{
TileEntity tileEntity = world.getTileEntity(x,y,z);
if (tileEntity instanceof IInventory) {
WeightedRandomChestContent.generateChestContents(random, ChestGenHooks.getInfo(Reference.CHEST_GEN_ANDROID_HOUSE).getItems(random), (IInventory) tileEntity, random.nextInt(10) + 10);
QuestStack questStack = MatterOverdrive.questFactory.generateQuestStack(random, MatterOverdriveQuests.crashLanding);
questStack.getTagCompound().setIntArray("Pos",new int[]{x,y,z});
MOInventoryHelper.insertItemStackIntoInventory((IInventory)tileEntity,questStack.getContract(),0);
}
}else if (block instanceof BlockWeaponStation)
{
TileEntity tileEntity = world.getTileEntity(x,y,z);
if (tileEntity instanceof TileEntityWeaponStation)
{
if (random.nextInt(200) < 10) {
((TileEntityWeaponStation) tileEntity).setInventorySlotContents(((TileEntityWeaponStation) tileEntity).INPUT_SLOT, MatterOverdrive.weaponFactory.getRandomDecoratedEnergyWeapon(new WeaponFactory.WeaponGenerationContext(3,null,true)));
}
}
}
}
@Override
protected void onGeneration(Random random, World world, int x, int y, int z)
{
}
@Override
protected boolean shouldGenerate(Random random,World world, int x, int y, int z)
{
return world.provider.dimensionId == 0 && isFarEnoughFromOthers(world,x,z,MIN_DISTANCE_APART);
}
@Override
public void onGenerationWorkerCreated(WorldGenBuildingWorker worldGenBuildingWorker) {
}
}