package com.austinv11.peripheralsplusplus.turtles;
import com.austinv11.collectiveframework.minecraft.reference.ModIds;
import com.austinv11.peripheralsplusplus.reference.Config;
import com.austinv11.peripheralsplusplus.reference.Reference;
import com.austinv11.peripheralsplusplus.utils.FakeTurtlePlayer;
import com.austinv11.peripheralsplusplus.utils.TurtleUtil;
import com.austinv11.peripheralsplusplus.utils.Util;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import dan200.computercraft.api.peripheral.IPeripheral;
import dan200.computercraft.api.turtle.*;
import net.minecraft.entity.Entity;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Facing;
import net.minecraft.util.IIcon;
import java.util.List;
//Mostly based on the project red upgrades
public abstract class TurtleBluePower extends TurtleDropCollector implements ITurtleUpgrade {
public abstract int getID();
public abstract ToolType getToolType();
public abstract ToolMaterial getToolMaterial();
public ItemStack getItem() {
return getBluePowerTool(getToolType(), getToolMaterial());
}
public static ItemStack getBluePowerTool(ToolType toolType, ToolMaterial toolMaterial) {
String name = toolMaterial.getName()+"_"+toolType.getName();
return new ItemStack(GameRegistry.findItem(ModIds.BluePower, name));
}
@Override
public int getUpgradeID() {
return Reference.BASE_BLUEPOWER_UPGRADE + getID();
}
@Override
public String getUnlocalisedAdjective() {
return getToolType().getAdj();
}
@Override
public TurtleUpgradeType getType() {
return TurtleUpgradeType.Tool;
}
@Override
public ItemStack getCraftingItem() {
if (Config.enableRedPowerLikeTurtles)
return getItem();
return null;
}
@Override
public IPeripheral createPeripheral(ITurtleAccess turtle, TurtleSide side) {
return null;
}
@Override
public TurtleCommandResult useTool(ITurtleAccess turtle, TurtleSide side, TurtleVerb verb, int direction) {
if (!Config.enableRedPowerLikeTurtles)
return TurtleCommandResult.failure("RedPower-like turtles have been disabled");
FakeTurtlePlayer player = new FakeTurtlePlayer(turtle);
switch (verb) {
case Attack:
List<Entity> entities = TurtleUtil.getEntitiesNearTurtle(turtle, player, direction);
Entity ent = TurtleUtil.getClosestEntity(entities, player);
if (ent != null)
if (ent.canAttackWithItem() && !ent.hitByEntity(player)) {
addEntity(turtle, ent);
double damage = player.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue();
damage *= Util.getDamageAttribute(getItem());
if(damage > 0.0F && ent.attackEntityFrom(DamageSource.causePlayerDamage(player), (float)damage)) {
return TurtleCommandResult.success();
}
}
return TurtleCommandResult.failure();
case Dig:
if (getToolType() == ToolType.HOE) {
int x = turtle.getPosition().posX+Facing.offsetsXForSide[direction];
int y = turtle.getPosition().posY+Facing.offsetsYForSide[direction];
int z = turtle.getPosition().posZ+Facing.offsetsZForSide[direction];
float hitX = 0.5F + (float)Facing.offsetsXForSide[direction] * 0.5F;
float hitY = 0.5F + (float)Facing.offsetsYForSide[direction] * 0.5F;
float hitZ = 0.5F + (float)Facing.offsetsZForSide[direction] * 0.5F;
if(Math.abs(hitY - 0.5F) < 0.01F)
hitY = 0.45F;
if (getItem().getItem().onItemUse(getItem(), player, turtle.getWorld(), x, y, z, Facing.oppositeSide[direction], hitX, hitY, hitZ))
return TurtleCommandResult.success();
}else {
List<ItemStack> items = TurtleUtil.harvestBlock(turtle, player, direction, getItem());
if (items != null) {
TurtleUtil.addItemListToInv(items, turtle);
return TurtleCommandResult.success();
}
}
return TurtleCommandResult.failure();
}
return TurtleCommandResult.failure("An unknown error has occurred, please tell the mod author");
}
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(ITurtleAccess turtle, TurtleSide side) {
return getItem().getItem().getIconIndex(getItem());
}
@Override
public void update(ITurtleAccess turtle, TurtleSide side) {}
public static enum ToolType {
SWORD("upgrade.minecraft:diamond_sword.adjective", "sword"),AXE("upgrade.minecraft:diamond_axe.adjective", "axe"),SHOVEL("upgrade.minecraft:diamond_shovel.adjective", "shovel"),PICKAXE("upgrade.minecraft:diamond_pickaxe.adjective", "pickaxe"),HOE("upgrade.minecraft:diamond_hoe.adjective", "hoe"),UNKNOWN("ERROR", "ERROR");
private String adj;
private String name;
public String getAdj(){
return adj;
}
public String getName() {
return name;
}
private ToolType(String s, String s2) {
adj = s;
name = s2;
}
}
public static enum ToolMaterial {
AMETHYST("amethyst"),RUBY("ruby"),SAPPHIRE("sapphire"), UNKNOWN("ERROR");
private String name;
public String getName(){
return name;
}
private ToolMaterial(String s) {
name = s;
}
}
}