二丫骑士
       从数据库已经把经验值读取出来了,但是在前台同步的时候绿条没有改变。我用的是player.setExperience()和player.setExp()两个方法试了一下都没效果。求大佬指点。
     下面是我写的代码:
package com.github.donna;
import Util.ConnectionUtil;
import entity.PlayerInfo;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class PlayerInfoListener implements Listener {
    private  PlayerPlugin plugin;
    public PlayerInfoListener(PlayerPlugin plugin) {
        this.plugin = plugin;
        Bukkit.getPluginManager().registerEvents(this,plugin);
    }
    Connection conn = ConnectionUtil.getConnection();
    ResultSet rs=null;
    PreparedStatement pstm=null;
    PlayerInfo p = null;
    @EventHandler
    public void OnLogin(PlayerLoginEvent e){
        Player player = e.getPlayer();
        String uniqueId = player.getUniqueId().toString();
        String name = player.getName();
        try{
            //判断是否是新玩家
            String sql="select * from playerInfo where uniqueId=?";
            pstm = conn.prepareStatement(sql);
            pstm.setString(1,uniqueId);
            rs = pstm.executeQuery();
            while(rs.next()){
              p=  new PlayerInfo(rs.getString("name"),
                        rs.getString("uniqueId")
                ,rs.getInt("totalExperience"));
            }
            //如果是新玩家则插入数据
            if(p==null){
                sql="insert into playerInfo(name,uniqueId,totalExperience) values(?,?,?)";
                pstm = conn.prepareStatement(sql);
                pstm.setString(1,name);
                pstm.setString(2,uniqueId);
                pstm.setInt(3,0);
                int i = pstm.executeUpdate();
                if(i>0){
                    System.out.println("添加成功!");
                }else{
                    System.out.println("添加失败!");
                }
            }
            //如果是旧玩家,则把经验值显示出来
            else{
                int totalExperience = p.getTotalExperience();
                player.giveExp(totalExperience);
                System.out.println("gexp"+player.getExp());
            }
        }catch (Exception exc){
            exc.printStackTrace();
        }finally {

        }
    }
    @EventHandler
    public void OnExit(PlayerQuitEvent e){
        //当玩家退出的时候,把玩家经验值更新到数据库
        Player player = e.getPlayer();
        String uniqueId = player.getUniqueId().toString();
        int totalExperience = player.getTotalExperience();
        String sql="update playerInfo set totalExperience=? where uniqueId=?";
        try {
            pstm = conn.prepareStatement(sql);
            pstm.setInt(1,totalExperience);
            pstm.setString(2,uniqueId);
            int i = pstm.executeUpdate();
            System.out.println("更新一条记录"+i);
            player.giveExp(totalExperience);
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    }
}




2021.12 数据,可能有更多内容    从数据库已经把经验值读取出来了,但是在前台同步的时候绿条没有改变。我用的是player.setExperience()和player.setExp()两个方法试了一下都没效果。求大佬指点。
  下面是我写的代码:
package com.github.donna;
import Util.ConnectionUtil;
import entity.PlayerInfo;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class PlayerInfoListener implements Listener {
    privatePlayerPlugin plugin;
    public PlayerInfoListener(PlayerPlugin plugin) {
  this.plugin = plugin;
  Bukkit.getPluginManager().registerEvents(this,plugin);
    }
    Connection conn = ConnectionUtil.getConnection();
    ResultSet rs=null;
    PreparedStatement pstm=null;
    PlayerInfo p = null;
    @EventHandler
    public void OnLogin(PlayerLoginEvent e){
  Player player = e.getPlayer();
  String uniqueId = player.getUniqueId().toString();
  String name = player.getName();
  try{
   //判断是否是新玩家
   String sql="select * from playerInfo where uniqueId=?";
   pstm = conn.prepareStatement(sql);
   pstm.setString(1,uniqueId);
   rs = pstm.executeQuery();
   while(rs.next()){
  p=new PlayerInfo(rs.getString("name"),
   rs.getString("uniqueId")
    ,rs.getInt("totalExperience"));
   }
   //如果是新玩家则插入数据
   if(p==null){
    sql="insert into playerInfo(name,uniqueId,totalExperience) values(?,?,?)";
    pstm = conn.prepareStatement(sql);
    pstm.setString(1,name);
    pstm.setString(2,uniqueId);
    pstm.setInt(3,0);
    int i = pstm.executeUpdate();
    if(i>0){
  System.out.println("添加成功!");
    }else{
  System.out.println("添加失败!");
    }
   }
   //如果是旧玩家,则把经验值显示出来
   else{
    int totalExperience = p.getTotalExperience();
    player.giveExp(totalExperience);
    System.out.println("gexp"+player.getExp());
   }
  }catch (Exception exc){
   exc.printStackTrace();
  }finally {


  }
    }
    @EventHandler
    public void OnExit(PlayerQuitEvent e){
  //当玩家退出的时候,把玩家经验值更新到数据库
  Player player = e.getPlayer();
  String uniqueId = player.getUniqueId().toString();
  int totalExperience = player.getTotalExperience();
  String sql="update playerInfo set totalExperience=? where uniqueId=?";
  try {
   pstm = conn.prepareStatement(sql);
   pstm.setInt(1,totalExperience);
   pstm.setString(2,uniqueId);
   int i = pstm.executeUpdate();
   System.out.println("更新一条记录"+i);
   player.giveExp(totalExperience);
  } catch (SQLException e1) {
   e1.printStackTrace();
  }
    }
}