package zmaster587.advancedRocketry.mission; import java.util.LinkedList; import java.util.List; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.oredict.OreDictionary; import zmaster587.advancedRocketry.api.Configuration; import zmaster587.advancedRocketry.api.DataStorage.DataType; import zmaster587.advancedRocketry.api.IInfrastructure; import zmaster587.advancedRocketry.entity.EntityRocket; import zmaster587.advancedRocketry.item.ItemAsteroidChip; import zmaster587.libVulpes.util.BlockPosition; public class MissionOreMining extends MissionResourceCollection { public MissionOreMining() { super(); } public MissionOreMining(long l, EntityRocket entityRocket, LinkedList<IInfrastructure> connectedInfrastructure) { super(l, entityRocket, connectedInfrastructure); } @Override public void onMissionComplete() { if(rocketStats.getDrillingPower() != 0f) { int distanceData, compositionData, massData, maxData; ItemStack stack = rocketStorage.getGuidanceComputer().getStackInSlot(0); if(stack != null && stack.getItem() instanceof ItemAsteroidChip) { distanceData = ((ItemAsteroidChip)stack.getItem()).getData(stack,DataType.DISTANCE); compositionData = ((ItemAsteroidChip)stack.getItem()).getData(stack,DataType.COMPOSITION); massData = ((ItemAsteroidChip)stack.getItem()).getData(stack,DataType.MASS); maxData = ((ItemAsteroidChip)stack.getItem()).getMaxData(stack); //fill the inventory of the rocket if(distanceData/(double)maxData > Math.random()) { int totalStacks = (int) ((1+(massData/100f))*Configuration.asteroidMiningMult*(Math.random()/0.5f + 0.5f)*5); ItemStack[] stacks = new ItemStack[totalStacks]; for (int i = 0; i < totalStacks; i++) { if((compositionData/(double)maxData)*0.9d > Math.random()) { String oreDictName = Configuration.standardAsteroidOres.get((int)(Math.random()*Configuration.standardAsteroidOres.size())); List<ItemStack> ores = OreDictionary.getOres(oreDictName); if(ores != null && !ores.isEmpty()) { stacks[i] = ores.get(0).copy(); stacks[i].stackSize = stacks[i].getMaxStackSize(); continue; } } stacks[i] = new ItemStack(Blocks.stone,64); } for(int i = 0, g = 0; i < rocketStorage.getInventoryTiles().size(); i++) { IInventory tile = (IInventory) rocketStorage.getInventoryTiles().get(i); for(int offset = 0; offset < tile.getSizeInventory() && g < totalStacks; offset++, g++) { if(tile.getStackInSlot(offset) == null) tile.setInventorySlotContents(offset, stacks[g]); } } } } } rocketStorage.getGuidanceComputer().setInventorySlotContents(0, null); EntityRocket rocket = new EntityRocket(DimensionManager.getWorld(launchDimension), rocketStorage, rocketStats, x, 999, z); World world = DimensionManager.getWorld(launchDimension); world.spawnEntityInWorld(rocket); rocket.setInOrbit(true); rocket.setInFlight(true); rocket.motionY = -1.0; for(BlockPosition i : infrastructureCoords) { TileEntity tile = world.getTileEntity(i.x, i.y, i.z); if(tile instanceof IInfrastructure) { ((IInfrastructure)tile).unlinkMission(); rocket.linkInfrastructure(((IInfrastructure)tile)); } } } }