diff --git a/src/main/java/module/playeranalysis/skillCompare/Player.java b/src/main/java/module/playeranalysis/skillCompare/Player.java index af2a09fe5..d07486dda 100644 --- a/src/main/java/module/playeranalysis/skillCompare/Player.java +++ b/src/main/java/module/playeranalysis/skillCompare/Player.java @@ -1,5 +1,6 @@ package module.playeranalysis.skillCompare; +import core.constants.player.PlayerSkill; import core.model.HOVerwaltung; import core.model.player.IMatchRoleID; @@ -12,6 +13,13 @@ public class Player { private core.model.player.Player m_Player; + + /** + * Player ratings are cached in the rating prediction model. + * A new instance of the player has to be created each time skills are changed + */ + private core.model.player.Player m_PlayerChangedSkills = null; + private String m_FirstName; private String m_NickName; private String m_LastName; @@ -340,7 +348,7 @@ public void setNewSkillValues(int skill, int wert) public void setOldPositionValues() { var ratingPredictionModel = HOVerwaltung.instance().getModel().getRatingPredictionModel(); - setOldPos_GK((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, KEEPER)); + setOldPosVal_GK((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, KEEPER)); setOldPosVal_CD((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.CENTRAL_DEFENDER)); setOldPosVal_CD_TW((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.CENTRAL_DEFENDER_TOWING)); setOldPosVal_CD_O((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.CENTRAL_DEFENDER_OFF)); @@ -365,30 +373,63 @@ public void setOldPositionValues() public void setNewPositionValues() { + if (m_PlayerChangedSkills==null){ + m_PlayerChangedSkills=new core.model.player.Player(); + m_PlayerChangedSkills.setPlayerId(m_ID); + m_PlayerChangedSkills.setFirstName(m_FirstName); + m_PlayerChangedSkills.setLastName(m_LastName); + m_PlayerChangedSkills.setAge(m_Age); + m_PlayerChangedSkills.setTsi(m_TSI); + m_PlayerChangedSkills.setNationalityId(m_Nationality); + m_PlayerChangedSkills.setTeamInfoSmilie(m_Group); + m_PlayerChangedSkills.setSpecialty(m_Speciality); + m_PlayerChangedSkills.setHomeGrown(m_Player.isHomeGrown()); + + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.KEEPER, m_Keeping); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.DEFENDING, m_Defending); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.PLAYMAKING, m_Playmaking); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.WINGER, m_Winger); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.SCORING, m_Scoring); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.PASSING, m_Passing); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.SETPIECES, m_SetPieces); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.FORM, m_Form); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.LOYALTY, m_Loyalty); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.LEADERSHIP, m_Leadership); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.STAMINA, m_Stamina); + setPlayerSkill(m_PlayerChangedSkills, PlayerSkill.EXPERIENCE, m_Experience); + } var ratingPredictionModel = HOVerwaltung.instance().getModel().getRatingPredictionModel(); - setPosVal_GK((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, KEEPER)); - setPosVal_CD((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.CENTRAL_DEFENDER)); - setPosVal_CD_TW((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.CENTRAL_DEFENDER_TOWING)); - setPosVal_CD_O((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.CENTRAL_DEFENDER_OFF)); - setPosVal_WB((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.BACK)); - setPosVAL_WB_TM((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.BACK_TOMID)); - setPosVal_WB_O((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.BACK_OFF)); - setPosVAL_WB_D((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.BACK_DEF)); - setPosVal_IM((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.MIDFIELDER)); - setPosVal_IM_O((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.MIDFIELDER_OFF)); - setPosVal_IM_D((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.MIDFIELDER_DEF)); - setPosVal_IM_TW((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.MIDFIELDER_TOWING)); - setPosVal_W((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.WINGER)); - setPosVal_W_D((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.WINGER_DEF)); - setPosVal_W_TM((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.WINGER_TOMID)); - setPosVal_W_O((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.WINGER_OFF)); - setPosVal_F((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.FORWARD)); - setPosVal_F_D((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.FORWARD_DEF)); - setPosVal_F_TW((float)ratingPredictionModel.getPlayerMatchAverageRating(m_Player, IMatchRoleID.FORWARD_TOWING)); - setBestPositionRating((float)m_Player.getIdealPositionRating()); + setPosVal_GK((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, KEEPER)); + setPosVal_CD((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.CENTRAL_DEFENDER)); + setPosVal_CD_TW((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.CENTRAL_DEFENDER_TOWING)); + setPosVal_CD_O((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.CENTRAL_DEFENDER_OFF)); + setPosVal_WB((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.BACK)); + setPosVAL_WB_TM((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.BACK_TOMID)); + setPosVal_WB_O((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.BACK_OFF)); + setPosVAL_WB_D((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.BACK_DEF)); + setPosVal_IM((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.MIDFIELDER)); + setPosVal_IM_O((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.MIDFIELDER_OFF)); + setPosVal_IM_D((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.MIDFIELDER_DEF)); + setPosVal_IM_TW((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.MIDFIELDER_TOWING)); + setPosVal_W((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.WINGER)); + setPosVal_W_D((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.WINGER_DEF)); + setPosVal_W_TM((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.WINGER_TOMID)); + setPosVal_W_O((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.WINGER_OFF)); + setPosVal_F((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.FORWARD)); + setPosVal_F_D((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.FORWARD_DEF)); + setPosVal_F_TW((float)ratingPredictionModel.getPlayerMatchAverageRating(m_PlayerChangedSkills, IMatchRoleID.FORWARD_TOWING)); + setBestPositionRating((float)m_PlayerChangedSkills.getIdealPositionRating()); changePlayerSkillValues(false); } + private void setPlayerSkill(core.model.player.Player mPlayerChangedSkills, PlayerSkill playerSkill, int value) { + mPlayerChangedSkills.setSkillValue(playerSkill, value); + if (value == m_Player.getValue4Skill(playerSkill)){ + // Skill level not changed, take the subskill from original player + mPlayerChangedSkills.setSubskill4PlayerSkill(playerSkill, m_Player.getSub4Skill(playerSkill)); + } + } + public int getAge() { return m_Age; } @@ -422,6 +463,7 @@ public int getExperience() { return m_Experience; } public void setExperience(int val) { + if ( val != m_Experience ) m_PlayerChangedSkills = null; m_Experience = val; } public int getOldExperience() { @@ -434,6 +476,7 @@ public int getWinger() { return m_Winger; } public void setWinger(int val) { + if ( val != m_Winger ) m_PlayerChangedSkills = null; m_Winger = val; } public int getOldWinger() { @@ -446,6 +489,7 @@ public int getForm() { return m_Form; } public void setForm(int form) { + if ( form != m_Form ) m_PlayerChangedSkills = null; m_Form = form; } public int getOldForm() { @@ -458,6 +502,7 @@ public int getLeadership() { return m_Leadership; } public void setLeadership(int val) { + if ( val != m_Leadership ) m_PlayerChangedSkills = null; m_Leadership = val; } public int getWages() { @@ -482,6 +527,7 @@ public int getStamina() { return m_Stamina; } public void setStamina(int val) { + if ( val != m_Stamina ) m_PlayerChangedSkills = null; m_Stamina = val; } public int getOldStamina() { @@ -736,13 +782,14 @@ public void setPosVal_GK(float val) { public float getOldPosVal_GK() { return m_OldPosVal_GK; } - public void setOldPos_GK(float val) { + public void setOldPosVal_GK(float val) { m_OldPosVal_GK = val; } public int getPassing() { return m_Passing; } public void setPassing(int val) { + if ( val != m_Passing ) m_PlayerChangedSkills = null; m_Passing = val; } public int getOldPassing() { @@ -755,6 +802,7 @@ public int getPlaymaking() { return m_Playmaking; } public void setPlaymaking(int val) { + if ( val != m_Playmaking ) m_PlayerChangedSkills = null; m_Playmaking = val; } public int getOldPlaymaking() { @@ -773,6 +821,7 @@ public int getSetPieces() { return m_SetPieces; } public void setSetPieces(int val) { + if ( val != m_SetPieces ) m_PlayerChangedSkills = null; m_SetPieces = val; } public int getOldSetPieces() { @@ -785,6 +834,7 @@ public int getScoring() { return m_Scoring; } public void setScoring(int val) { + if ( val != m_Scoring ) m_PlayerChangedSkills = null; m_Scoring = val; } public int getOldScoring() { @@ -803,6 +853,7 @@ public int getKeeping() { return m_Keeping; } public void setKeeping(int val) { + if ( val != m_Keeping ) m_PlayerChangedSkills = null; m_Keeping = val; } public int getOldKeeping() { @@ -815,6 +866,7 @@ public int getDefending() { return m_Defending; } public void setDefending(int val) { + if ( val != m_Defending ) m_PlayerChangedSkills = null; m_Defending = val; } public int getOldDefending() { diff --git a/src/main/java/module/playeranalysis/skillCompare/PlayerComparePanel.java b/src/main/java/module/playeranalysis/skillCompare/PlayerComparePanel.java index 79ea8f5a5..efb647a2c 100644 --- a/src/main/java/module/playeranalysis/skillCompare/PlayerComparePanel.java +++ b/src/main/java/module/playeranalysis/skillCompare/PlayerComparePanel.java @@ -13,6 +13,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.*; +import java.io.Serial; import java.util.List; import java.util.Vector; @@ -21,6 +22,7 @@ */ public class PlayerComparePanel extends LazyImagePanel implements ItemListener, FocusListener { + @Serial private static final long serialVersionUID = -1629490436656226196L; // Members for Tables private PlayerTable m_jTableTop; // Table for all players @@ -35,8 +37,7 @@ public class PlayerComparePanel extends LazyImagePanel implements ItemListener, private JScrollPane m_scrollPanePlayer; private JScrollPane m_scrollPanePlayerGesamt; private PlayerTableModel m_playerTableModelTop; - private PlayerTableModel m_playerTableModelBottom; - private PlayerTableModel m_playerTableModelDetail; + private PlayerTableModel m_playerTableModelDetail; private static JComboBox m_CB_type; private JComboBox m_CB_Experience; private JComboBox m_CB_Form; @@ -62,17 +63,14 @@ public class PlayerComparePanel extends LazyImagePanel implements ItemListener, private JComboBox m_CB_Nr_SetPieces; private JComboBox m_CB_Nr_Loyalty; private Vector m_V_setPlayers; - private List m_V_allPlayers; - private module.playeranalysis.skillCompare.Player[] m_ar_allPlayers; - private module.playeranalysis.skillCompare.Player[] m_ar_setPlayers; - private CBItem[] m_rating = PlayerAbility.ITEMS; + private module.playeranalysis.skillCompare.Player[] m_ar_allPlayers; + private final CBItem[] m_rating = PlayerAbility.ITEMS; private static int m_selectedRow; private int m_i_ptmTopCount; - private int m_numberOfPlayers; - private static int[] newRating; + private static int[] newRating; private static int[] changedRating; private boolean m_b_refresh = true; - private Color lightblue = new Color(235, 235, 255); + private final Color lightblue = new Color(235, 235, 255); @Override protected void initialize() { @@ -105,21 +103,9 @@ protected void update() { } private void addListeners() { - m_btCompare.addActionListener(new ActionListener() { + m_btCompare.addActionListener(e -> comparePlayer()); - @Override - public void actionPerformed(ActionEvent e) { - comparePlayer(); - } - }); - - m_btReset.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - reset(); - } - }); + m_btReset.addActionListener(e -> reset()); } private void initComponents() { @@ -281,8 +267,7 @@ private void initComponents() { gbc.gridwidth = GridBagConstraints.REMAINDER; gbl.setConstraints(m_CB_type, gbc); // ******************************* - gbc.gridwidth = 4; - gbc.gridwidth = GridBagConstraints.REMAINDER; + gbc.gridwidth = GridBagConstraints.REMAINDER; gbl.setConstraints(m_L_Header, gbc); gbc.gridwidth = 1; // ******************************* @@ -355,17 +340,14 @@ private void initComponents() { // ******* gbc.gridwidth = 1; gbl.setConstraints(m_L_HomeGrown, gbc); - gbc.gridwidth = 1; - gbc.gridwidth = GridBagConstraints.REMAINDER; // end row + gbc.gridwidth = GridBagConstraints.REMAINDER; // end row gbl.setConstraints(m_CB_Homegrown, gbc); // ******* - gbc.gridwidth = 1; - // ******************************* + // ******************************* gbc.gridwidth = GridBagConstraints.REMAINDER; // end row gbc.insets = new Insets(10, 3, 0, 3); gbl.setConstraints(m_btCompare, gbc); - gbc.gridwidth = 1; - // ******************************* + // ******************************* gbc.gridwidth = GridBagConstraints.REMAINDER; // end row gbc.insets = new Insets(0, 3, 0, 3); gbl.setConstraints(m_btReset, gbc); @@ -463,12 +445,9 @@ public void itemStateChanged(ItemEvent ie) { if (ie.getSource().equals(m_CB_type)) { int cbType = m_CB_type.getSelectedIndex(); for (int i = 0; i < m_i_ptmTopCount; i++) { - int spielerID = (Integer) m_playerTableModelTop.getValueAt(i, - m_playerTableModelTop.getColumnCount() - 1); - int pos = HOVerwaltung.instance().getModel().getCurrentPlayer(spielerID) - .getIdealPosition(); - String group = HOVerwaltung.instance().getModel().getCurrentPlayer(spielerID) - .getTeamGroup(); + int spielerID = (Integer) m_playerTableModelTop.getValueAt(i,m_playerTableModelTop.getColumnCount() - 1); + int pos = HOVerwaltung.instance().getModel().getCurrentPlayer(spielerID).getIdealPosition(); + String group = HOVerwaltung.instance().getModel().getCurrentPlayer(spielerID).getTeamGroup(); // System.out.println(cbType +":"+group); if (cbType == 1 && pos == 0 || cbType == 2 && (pos > 0 && pos < 8) || cbType == 3 && (pos > 7 && pos < 12) || cbType == 4 && (pos > 11 && pos < 16) @@ -643,7 +622,7 @@ private void reset() { m_scrollPaneTableBottom.setViewportView(null); for (int i = 0; i < m_i_ptmTopCount; i++) { - if ((Boolean) m_playerTableModelTop.getValueAt(i, 0) == true) { + if ((Boolean) m_playerTableModelTop.getValueAt(i, 0)) { m_playerTableModelTop.setValueAt(Boolean.FALSE, i, 0); } } @@ -657,8 +636,8 @@ private void reset() { * */ private void getAllPlayers() { - m_V_allPlayers = HOVerwaltung.instance().getModel().getCurrentPlayers(); - m_numberOfPlayers = m_V_allPlayers.size(); + List m_V_allPlayers = HOVerwaltung.instance().getModel().getCurrentPlayers(); + int m_numberOfPlayers = m_V_allPlayers.size(); m_ar_allPlayers = new module.playeranalysis.skillCompare.Player[m_numberOfPlayers]; int i=0; for ( core.model.player.Player p : m_V_allPlayers){ @@ -691,7 +670,7 @@ private void comparePlayer() { switch (selectedType) { case 0: for (int i = 0; i < m_i_ptmTopCount; i++) - if ((Boolean) m_playerTableModelTop.getValueAt(i, 0) == true) + if ((Boolean) m_playerTableModelTop.getValueAt(i, 0)) fetchPlayer((Integer) m_playerTableModelTop.getValueAt(i, m_playerTableModelTop.getColumnCount() - 1)); break; @@ -701,7 +680,7 @@ private void comparePlayer() { try { tmpPos = ((Float) m_playerTableModelTop.getValueAt(i, 4)).byteValue(); - } catch (Exception ex) { + } catch (Exception ignored) { } if (tmpPos == 0 && m_playerTableModelTop.getValueAt(i, 0) == Boolean.TRUE) { fetchPlayer((Integer) m_playerTableModelTop.getValueAt(i, @@ -717,7 +696,7 @@ private void comparePlayer() { try { tmpPos = ((Float) m_playerTableModelTop.getValueAt(i, 4)).byteValue(); - } catch (Exception ex) { + } catch (Exception ignored) { } if ((tmpPos > 0 && tmpPos < 8) @@ -736,7 +715,7 @@ private void comparePlayer() { try { tmpPos = ((Float) m_playerTableModelTop.getValueAt(i, 4)).byteValue(); - } catch (Exception ex) { + } catch (Exception ignored) { } if ((tmpPos > 7 && tmpPos < 12) && m_playerTableModelTop.getValueAt(i, 0) == Boolean.TRUE) { @@ -755,7 +734,7 @@ private void comparePlayer() { try { tmpPos = ((Float) m_playerTableModelTop.getValueAt(i, 4)).byteValue(); - } catch (Exception ex) { + } catch (Exception ignored) { } if ((tmpPos > 11 && tmpPos < 16) && m_playerTableModelTop.getValueAt(i, 0) == Boolean.TRUE) { @@ -775,7 +754,7 @@ private void comparePlayer() { try { tmpPos = ((Float) m_playerTableModelTop.getValueAt(i, 4)).byteValue(); - } catch (Exception ex) { + } catch (Exception ignored) { } if ((tmpPos > 15 && tmpPos < 18) && m_playerTableModelTop.getValueAt(i, 0) == Boolean.TRUE) { @@ -791,7 +770,7 @@ private void comparePlayer() { case 6: for (int i = 0; i < m_i_ptmTopCount; i++) { - String gruppe = ""; + String gruppe; gruppe = m_playerTableModelTop.getValueAt(i, 5).toString(); if (gruppe.equals("A-Team") @@ -808,7 +787,7 @@ private void comparePlayer() { case 7: for (int i = 0; i < m_i_ptmTopCount; i++) { - String gruppe = ""; + String gruppe; gruppe = m_playerTableModelTop.getValueAt(i, 5).toString(); if (gruppe.equals("B-Team") @@ -825,7 +804,7 @@ private void comparePlayer() { case 8: for (int i = 0; i < m_i_ptmTopCount; i++) { - String gruppe = ""; + String gruppe; gruppe = m_playerTableModelTop.getValueAt(i, 5).toString(); if (gruppe.equals("C-Team") @@ -842,7 +821,7 @@ private void comparePlayer() { case 9: for (int i = 0; i < m_i_ptmTopCount; i++) { - String gruppe = ""; + String gruppe; gruppe = m_playerTableModelTop.getValueAt(i, 5).toString(); if (gruppe.equals("D-Team") @@ -858,7 +837,7 @@ private void comparePlayer() { case 10: for (int i = 0; i < m_i_ptmTopCount; i++) { - String gruppe = ""; + String gruppe; gruppe = m_playerTableModelTop.getValueAt(i, 5).toString(); if (gruppe.equals("E-Team") @@ -879,13 +858,13 @@ private void comparePlayer() { } } - // Create array from a tablemodel vector - m_ar_setPlayers = new module.playeranalysis.skillCompare.Player[m_V_setPlayers.size()]; + // Create array from a table model vector + Player[] m_ar_setPlayers = new Player[m_V_setPlayers.size()]; for (int counter = 0; counter < m_ar_setPlayers.length; counter++) { m_ar_setPlayers[counter] = m_V_setPlayers.elementAt(counter); } - m_playerTableModelBottom = new PlayerTableModel(m_ar_setPlayers, 2); + PlayerTableModel m_playerTableModelBottom = new PlayerTableModel(m_ar_setPlayers, 2); TableSorter sorter2 = new TableSorter(m_playerTableModelBottom); m_jTableBottom = new PlayerTable(sorter2, m_playerTableModelBottom); m_jTableBottom.setRowSelectionAllowed(true); @@ -1022,7 +1001,7 @@ public void mouseClicked(MouseEvent e) { for (int u = 0; u < tmpAnzahl; u++) { tmpPlayer = m_V_setPlayers.elementAt(u); if (("" + tmpPlayer.getId()).compareTo(id) == 0) { - l_SpielerName.setText("" + tmpPlayer.getFullName()); + l_SpielerName.setText(tmpPlayer.getFullName()); break; } } diff --git a/src/main/resources/release_notes.md b/src/main/resources/release_notes.md index 7ef3bd7ce..39b117590 100644 --- a/src/main/resources/release_notes.md +++ b/src/main/resources/release_notes.md @@ -14,7 +14,9 @@ * Calculation of the tsi sub by approximating the tsi formula (#235) -### Team Analyzer +### Player Analysis + +* Fix error in rating compare table (#2153) ### Rating