package com.austinv11.peripheralsplusplus.items;
import com.austinv11.collectiveframework.minecraft.utils.NBTHelper;
import com.austinv11.peripheralsplusplus.PeripheralsPlusPlus;
import com.austinv11.peripheralsplusplus.entities.EntityNanoBotSwarm;
import com.austinv11.peripheralsplusplus.entities.NanoProperties;
import com.austinv11.peripheralsplusplus.reference.Config;
import com.austinv11.peripheralsplusplus.tiles.TileEntityAntenna;
import net.minecraft.block.BlockDispenser;
import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
import net.minecraft.dispenser.IBlockSource;
import net.minecraft.dispenser.IPosition;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
public class ItemNanoSwarm extends ItemPPP {
public ItemNanoSwarm() {
super();
this.setMaxStackSize(16);
this.setUnlocalizedName("nanoSwarm");
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if (NBTHelper.hasTag(stack, "identifier")) {
if (!world.isRemote) {
EntityNanoBotSwarm swarm = new EntityNanoBotSwarm(world, player);
swarm.antennaIdentifier = UUID.fromString(NBTHelper.getString(stack, "identifier"));
if (NBTHelper.hasTag(stack, "label"))
swarm.label = NBTHelper.getString(stack, "label");
world.spawnEntityInWorld(swarm);
}
stack.stackSize--;
}
return stack;
}
public static void addSwarmForEntity(EntityNanoBotSwarm swarm, Entity hit) {
if (TileEntityAntenna.antenna_registry.containsKey(swarm.antennaIdentifier)) {
TileEntityAntenna antenna = TileEntityAntenna.antenna_registry.get(swarm.antennaIdentifier);
if (!antenna.associatedEntities.contains(hit)) {
antenna.associatedEntities.add(hit);
}
NanoProperties properties = (NanoProperties)hit.getExtendedProperties(NanoProperties.IDENTIFIER);
properties.numOfBots += Config.numberOfInstructions;
properties.antennaID = swarm.antennaIdentifier;
}
}
public static boolean doInstruction(UUID identifier, Entity performer) {
if (!performer.isDead)
if (TileEntityAntenna.antenna_registry.containsKey(identifier)) {
TileEntityAntenna antenna = TileEntityAntenna.antenna_registry.get(identifier);
if (antenna.associatedEntities.contains(performer)) {
NanoProperties properties = (NanoProperties)performer.getExtendedProperties(NanoProperties.IDENTIFIER);
properties.numOfBots--;
if (properties.numOfBots == 0)
antenna.associatedEntities.remove(performer);
return true;
}
}
return false; //Do not do the instruction
}
public static class BehaviorNanoSwarm extends BehaviorDefaultDispenseItem { //Copied mostly from BehaviorProjectileDispense
public ItemStack dispenseStack(IBlockSource blockSource, ItemStack stack) {
if (NBTHelper.hasTag(stack, "identifier")) {
World world = blockSource.getWorld();
IPosition iposition = BlockDispenser.func_149939_a(blockSource);
EnumFacing enumfacing = BlockDispenser.func_149937_b(blockSource.getBlockMetadata());
EntityNanoBotSwarm iprojectile = new EntityNanoBotSwarm(world, iposition.getX(), iposition.getY(), iposition.getZ());
iprojectile.antennaIdentifier = UUID.fromString(NBTHelper.getString(stack, "identifier"));
if (NBTHelper.hasTag(stack, "label"))
iprojectile.label = NBTHelper.getString(stack, "label");
iprojectile.setThrowableHeading((double) enumfacing.getFrontOffsetX(), (double) ((float) enumfacing.getFrontOffsetY()+0.1F), (double) enumfacing.getFrontOffsetZ(), this.func_82500_b(), this.func_82498_a());
world.spawnEntityInWorld(iprojectile);
stack.splitStack(1);
} else {
return super.dispenseStack(blockSource, stack);
}
return stack;
}
protected void playDispenseSound(IBlockSource blockSource) {
blockSource.getWorld().playAuxSFX(1002, blockSource.getXInt(), blockSource.getYInt(), blockSource.getZInt(), 0);
}
protected float func_82498_a() {
return 6.0F;
}
protected float func_82500_b() {
return 1.1F;
}
}
}