package com.austinv11.peripheralsplusplus.turtles;
import com.austinv11.peripheralsplusplus.entities.EntityRidableTurtle;
import com.austinv11.peripheralsplusplus.init.ModBlocks;
import com.austinv11.peripheralsplusplus.reference.Config;
import com.austinv11.peripheralsplusplus.reference.Reference;
import com.austinv11.peripheralsplusplus.turtles.peripherals.PeripheralRidable;
import dan200.computercraft.api.peripheral.IPeripheral;
import dan200.computercraft.api.turtle.ITurtleAccess;
import dan200.computercraft.api.turtle.ITurtleUpgrade;
import dan200.computercraft.api.turtle.TurtleCommandResult;
import dan200.computercraft.api.turtle.TurtleSide;
import dan200.computercraft.api.turtle.TurtleUpgradeType;
import dan200.computercraft.api.turtle.TurtleVerb;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import java.util.List;
public class TurtleRidable implements ITurtleUpgrade {
@Override
public int getUpgradeID() {
return Reference.RIDABLE_UPGRADE;
}
@Override
public String getUnlocalisedAdjective() {
return Reference.MOD_ID.toLowerCase() + ".turtleUpgrade.ridable";
}
@Override
public TurtleUpgradeType getType() {
return TurtleUpgradeType.Peripheral;
}
@Override
public ItemStack getCraftingItem() {
if (Config.enableRidableTurtle) {
return new ItemStack(Items.saddle);
}
return null;
}
@Override
public IPeripheral createPeripheral(ITurtleAccess turtle, TurtleSide side) {
return new PeripheralRidable(turtle);
}
@Override
public TurtleCommandResult useTool(ITurtleAccess turtle, TurtleSide side, TurtleVerb verb, int direction) {
return null;
}
@Override
public IIcon getIcon(ITurtleAccess turtle, TurtleSide side) {
return ModBlocks.dummyBlock.getIcon(0, 4);
}
@Override
public void update(ITurtleAccess turtle, TurtleSide side) {
if (!Config.enableRidableTurtle) {
return;
}
World world = turtle.getWorld();
if (!world.isRemote) {
try {
getEntity(turtle);
} catch (Exception e) {
EntityRidableTurtle ridableTurtle = new EntityRidableTurtle(world);
ridableTurtle.setPosition(turtle.getPosition().posX + 0.5, turtle.getPosition().posY,
turtle.getPosition().posZ + 0.5);
ridableTurtle.setTurtle(turtle);
world.spawnEntityInWorld(ridableTurtle);
}
}
}
public static EntityRidableTurtle getEntity(ITurtleAccess turtle) throws Exception {
List entities = getNearbyEntities(turtle, 0, 1, EntityRidableTurtle.class);
if (entities.size() < 1)
throw new Exception("No entity bound to turtle.");
return (EntityRidableTurtle) entities.get(0);
}
public static List getNearbyEntities(ITurtleAccess turtle, int radiusStart, int radiusEnd, Class entityType) {
World world = turtle.getWorld();
AxisAlignedBB bb = AxisAlignedBB.getBoundingBox(
turtle.getPosition().posX - radiusStart, turtle.getPosition().posY - radiusStart,
turtle.getPosition().posZ - radiusStart, turtle.getPosition().posX + radiusEnd,
turtle.getPosition().posY + radiusEnd, turtle.getPosition().posZ + radiusEnd);
return world.getEntitiesWithinAABB(entityType, bb);
}
}