package com.austinv11.peripheralsplusplus.pocket;
import com.austinv11.collectiveframework.minecraft.utils.NBTHelper;
import com.austinv11.collectiveframework.utils.LogicUtils;
import com.austinv11.peripheralsplusplus.hooks.ComputerCraftHooks;
import com.austinv11.peripheralsplusplus.hooks.ComputerCraftRegistry;
import com.austinv11.peripheralsplusplus.hooks.IPocketComputerUpgrade;
import com.austinv11.peripheralsplusplus.init.ModBlocks;
import com.austinv11.peripheralsplusplus.pocket.peripherals.PeripheralPeripheralContainer;
import com.austinv11.peripheralsplusplus.reference.Reference;
import dan200.computercraft.api.peripheral.IPeripheral;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class PocketPeripheralContainer implements IPocketComputerUpgrade {
@Override
public int getUpgradeID() {
return Reference.PERIPHERAL_CONTAINER;
}
@Override
public String getUnlocalisedAdjective() {
return "peripheralsplusplus.pocketUpgrade.peripheralContainer";
}
@Override
public ItemStack getCraftingItem() {
return new ItemStack(ModBlocks.peripheralContainer);
}
@Override
public IPeripheral createPeripheral(Entity entity, ItemStack stack) {
return new PeripheralPeripheralContainer(stack);
}
@Override
public void update(Entity entity, ItemStack stack, IPeripheral peripheral) {
int id = NBTHelper.getInt(stack, "computerID");
if (NBTHelper.hasTag(stack, "upgrades")) {
List<IPocketComputerUpgrade> upgrades = getUpgrades(stack);
HashMap<Integer, IPeripheral> peripherals = ComputerCraftHooks.cachedExtraPeripherals.get(id);
for (IPocketComputerUpgrade upgrade : upgrades) {
if (peripherals.containsKey(upgrade.getUpgradeID()))
upgrade.update(entity, stack, peripherals.get(upgrade.getUpgradeID()));
}
}
}
@Override
public boolean onRightClick(World world, EntityPlayer player, ItemStack stack, IPeripheral peripheral) {
List<Boolean> results = new ArrayList<Boolean>();
List<IPocketComputerUpgrade> upgrades = getUpgrades(stack);
for (IPocketComputerUpgrade upgrade : upgrades)
results.add(upgrade.onRightClick(world, player, stack, peripheral));
boolean[] boolArray = new boolean[results.size()];
for (int i = 0; i < results.size(); i++)
boolArray[i] = results.get(i);
return LogicUtils.or(boolArray);
}
public List<IPocketComputerUpgrade> getUpgrades(ItemStack item) {
ArrayList<IPocketComputerUpgrade> upgrades = new ArrayList<IPocketComputerUpgrade>();
if (NBTHelper.hasTag(item, "upgrades")) {
NBTTagList list = NBTHelper.getList(item, "upgrades", Constants.NBT.TAG_FLOAT);
for (int i = 0; i < list.tagCount(); i++) {
int id = (int)list.func_150308_e(i);
upgrades.add(ComputerCraftRegistry.pocketUpgrades.get(id));
}
}
return upgrades;
}
}