package dk.thoerup.bukkit.hoeruputils.message; import java.util.List; import java.util.logging.Level; import javax.persistence.PersistenceException; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.plugin.Plugin; import org.bukkit.scheduler.BukkitScheduler; import com.avaje.ebean.EbeanServer; import java.sql.Timestamp; public class MessageWrapper implements Listener { EbeanServer server; Plugin plugin; public MessageWrapper(Plugin plugin, Runnable installer) { this.plugin = plugin; server = plugin.getDatabase(); try { server.find(MessageBean.class).findRowCount(); //probe } catch (Exception e) { installer.run(); } } @EventHandler public void onPlayerLogin(final PlayerLoginEvent event) { final Player player = event.getPlayer(); Runnable messagehandler = new Runnable() { @Override public void run() { List beans = server.find( MessageBean.class) .where() .eq("player", player.getName() ) .eq("isread", 0) .findList(); for(MessageBean msg : beans) { player.sendMessage( msg.getMessage() ); msg.setIsread(true); msg.setReadtime( new Timestamp(System.currentTimeMillis()) ); server.save(msg); } } }; BukkitScheduler sched = plugin.getServer().getScheduler(); sched.scheduleSyncDelayedTask(plugin, messagehandler, 20*4); } public void sendMessage(String from, OfflinePlayer player, String message) { if (player.isOnline()) { Player online = (Player) player; online.sendMessage(message); } else { queueMessage(from, player.getName(), message); } } protected void queueMessage(String from, String player, String message) { MessageBean msg = new MessageBean(); msg.setFromplayer(from); msg.setPlayer(player); msg.setMessage(message); msg.setCreatetimeNow();; try { server.save(msg); } catch (PersistenceException e) { plugin.getLogger().log(Level.SEVERE, "MessageWrapper.queueMessage() failed:" + e.getMessage() ); } } }