package javastory.channel.client;
import java.awt.Point;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javastory.channel.movement.AbsoluteLifeMovement;
import javastory.channel.movement.LifeMovement;
import javastory.channel.movement.LifeMovementFragment;
import javastory.db.Database;
import javastory.game.data.ItemInfoProvider;
public class Pet implements Serializable {
private static final long serialVersionUID = 9179541993413738569L;
private String name;
private int foothold = 0, stance = 0, fullness = 100, level = 1, closeness = 0, uniqueId;
private final int petItemId;
private Point pos;
private short inventoryPosition = 0;
private boolean summoned;
private Pet(final int itemId) {
this.petItemId = itemId;
}
private Pet(final int petItemId, final int uniqueId, final short inventorypos) {
this.petItemId = petItemId;
this.uniqueId = uniqueId;
this.summoned = false;
this.inventoryPosition = inventorypos;
}
public static Pet loadFromDb(final int itemId, final int petid, final short inventorypos) {
try {
final Pet ret = new Pet(itemId, petid, inventorypos);
final Connection con = Database.getConnection();
// Get pet details..
final PreparedStatement ps = con.prepareStatement("SELECT * FROM pets WHERE petid = ?");
ps.setInt(1, petid);
final ResultSet rs = ps.executeQuery();
rs.next();
ret.setName(rs.getString("name"));
ret.setCloseness(rs.getInt("closeness"));
ret.setLevel(rs.getInt("level"));
ret.setFullness(rs.getInt("fullness"));
rs.close();
ps.close();
return ret;
} catch (final SQLException ex) {
Logger.getLogger(Pet.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
public final void saveToDb() {
try {
final PreparedStatement ps = Database.getConnection().prepareStatement(
"UPDATE pets SET name = ?, level = ?, closeness = ?, fullness = ? WHERE petid = ?");
ps.setString(1, this.name); // Set name
ps.setInt(2, this.level); // Set Level
ps.setInt(3, this.closeness); // Set Closeness
ps.setInt(4, this.fullness); // Set Fullness
ps.setInt(5, this.uniqueId); // Set ID
ps.executeUpdate(); // Execute statement
ps.close();
} catch (final SQLException ex) {
ex.printStackTrace();
}
}
public static Pet createPet(final int petItemId) {
int ret;
try { // Commit to db first
final PreparedStatement ps = Database.getConnection().prepareStatement("INSERT INTO pets (name, level, closeness, fullness) VALUES (?, ?, ?, ?)",
Statement.RETURN_GENERATED_KEYS);
ps.setString(1, ItemInfoProvider.getInstance().getName(petItemId));
ps.setInt(2, 1);
ps.setInt(3, 0);
ps.setInt(4, 100);
ps.executeUpdate();
final ResultSet rs = ps.getGeneratedKeys();
rs.next();
ret = rs.getInt(1);
rs.close();
ps.close();
} catch (final SQLException ex) {
ex.printStackTrace();
return null;
}
final Pet pet = new Pet(petItemId);
pet.setName(ItemInfoProvider.getInstance().getName(petItemId));
pet.setLevel(1);
pet.setCloseness(0);
pet.setFullness(100);
pet.setUniqueId(ret);
return pet;
}
public final String getName() {
return this.name;
}
public final void setName(final String name) {
this.name = name;
}
public final boolean isSummoned() {
return this.summoned;
}
public final void setSummoned(final boolean summoned) {
this.summoned = summoned;
}
public final short getInventoryPosition() {
return this.inventoryPosition;
}
public final void setInventoryPosition(final short inventorypos) {
this.inventoryPosition = inventorypos;
}
public int getUniqueId() {
return this.uniqueId;
}
public void setUniqueId(final int id) {
this.uniqueId = id;
}
public final int getCloseness() {
return this.closeness;
}
public final void setCloseness(final int closeness) {
this.closeness = closeness;
}
public final int getLevel() {
return this.level;
}
public final void setLevel(final int level) {
this.level = level;
}
public final int getFullness() {
return this.fullness;
}
public final void setFullness(final int fullness) {
this.fullness = fullness;
}
public final int getFoothold() {
return this.foothold;
}
public final void setFoothold(final int Fh) {
this.foothold = Fh;
}
public final Point getPosition() {
return this.pos;
}
public final void setPosition(final Point pos) {
this.pos = pos;
}
public final int getStance() {
return this.stance;
}
public final void setStance(final int stance) {
this.stance = stance;
}
public final int getPetItemId() {
return this.petItemId;
}
public final boolean canConsume(final int itemId) {
final ItemInfoProvider mii = ItemInfoProvider.getInstance();
for (final int petId : mii.petsCanConsume(itemId)) {
if (petId == itemId) {
return true;
}
}
return false;
}
public final void updatePosition(final List<LifeMovementFragment> movement) {
for (final LifeMovementFragment move : movement) {
if (move instanceof LifeMovement) {
if (move instanceof AbsoluteLifeMovement) {
this.setPosition(((LifeMovement) move).getPosition());
}
this.setStance(((LifeMovement) move).getNewstate());
}
}
}
}