package com.amadornes.framez.movement;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import uk.co.qmunity.lib.vec.Vec3d;
import uk.co.qmunity.lib.vec.Vec3i;
import com.amadornes.framez.api.movement.IMovement;
import com.amadornes.framez.api.movement.IMovement.IMovementSlide;
import com.amadornes.framez.api.movement.IMotor;
import com.amadornes.framez.tile.TileMotor;
public class MovementSlide implements IMovementSlide {
private ForgeDirection direction;
public MovementSlide(ForgeDirection direction) {
this.direction = direction;
}
@Override
public MovementType getMovementType() {
return MovementType.SLIDE;
}
@Override
public ForgeDirection getDirection() {
return direction;
}
@Override
public void setDirection(ForgeDirection direction) {
this.direction = direction;
}
@Override
public Vec3i transform(Vec3i position) {
return position.getRelative(getDirection());
}
@Override
public Vec3d transform(Vec3d position, double progress) {
return position.clone()
.add(getDirection().offsetX * progress, getDirection().offsetY * progress, getDirection().offsetZ * progress);
}
@Override
public boolean rotate(IMotor mover, ForgeDirection axis) {
TileMotor te = (TileMotor) mover;
ForgeDirection face = te.getFace().getRotation(axis);
ForgeDirection direction = getDirection().getRotation(axis);
System.out.println(face + " " + direction);
if (face == direction || face == direction.getOpposite() || face.getOpposite() == direction)
return false;
this.direction = direction;
te.setFace(face);
return true;
}
@Override
public boolean clashes(ForgeDirection direction) {
return direction == getDirection() || direction == getDirection().getOpposite();
}
@Override
public IMovement clone() {
return new MovementSlide(getDirection());
}
@Override
public void writeToNBT(NBTTagCompound tag) {
tag.setInteger("direction", direction.ordinal());
}
@Override
public void readFromNBT(NBTTagCompound tag) {
direction = ForgeDirection.getOrientation(tag.getInteger("direction"));
}
@Override
public boolean debug(World world, int x, int y, int z, ForgeDirection face, EntityPlayer player) {
player.addChatMessage(new ChatComponentText("Movement direction: " + direction.name().toLowerCase()));
return true;
}
}