Просмотр исходного кода

Merge pull request #138 from nossr50/master

Optimizing how mcMMO saves player information
Grant 13 лет назад
Родитель
Сommit
ee83e93269

+ 0 - 14
src/main/java/com/gmail/nossr50/datatypes/PlayerProfile.java

@@ -778,7 +778,6 @@ public class PlayerProfile
 	public long getGreenTerraDeactivatedTimeStamp() {return greenTerraDATS;}
 	public void setGreenTerraDeactivatedTimeStamp(Long newvalue){
 		greenTerraDATS = (int) (newvalue/1000);
-		save();
 	}
 	/*
 	 * BERSERK MODE
@@ -800,7 +799,6 @@ public class PlayerProfile
 	public long getBerserkDeactivatedTimeStamp() {return berserkDATS;}
 	public void setBerserkDeactivatedTimeStamp(Long newvalue){
 		berserkDATS = (int) (newvalue/1000);
-		save();
 	}
 	/*
 	 * SKULL SPLITTER
@@ -822,7 +820,6 @@ public class PlayerProfile
 	public long getSkullSplitterDeactivatedTimeStamp() {return skullSplitterDATS;}
 	public void setSkullSplitterDeactivatedTimeStamp(Long newvalue){
 		skullSplitterDATS = (int) (newvalue/1000);
-		save();
 	}
 	/*
 	 * SERRATED STRIKES
@@ -844,7 +841,6 @@ public class PlayerProfile
 	public long getSerratedStrikesDeactivatedTimeStamp() {return serratedStrikesDATS;}
 	public void setSerratedStrikesDeactivatedTimeStamp(Long newvalue){
 		serratedStrikesDATS = (int) (newvalue/1000);
-		save();
 	}
 	/*
 	 * GIGA DRILL BREAKER
@@ -866,7 +862,6 @@ public class PlayerProfile
 	public long getGigaDrillBreakerDeactivatedTimeStamp() {return gigaDrillBreakerDATS;}
 	public void setGigaDrillBreakerDeactivatedTimeStamp(Long newvalue){
 		gigaDrillBreakerDATS = (int) (newvalue/1000);
-		save();
 	}
 	/*
 	 * TREE FELLER STUFF
@@ -888,7 +883,6 @@ public class PlayerProfile
 	public long getTreeFellerDeactivatedTimeStamp() {return treeFellerDATS;}
 	public void setTreeFellerDeactivatedTimeStamp(Long newvalue){
 		treeFellerDATS = (int) (newvalue/1000);
-		save();
 	}
 	/*
 	 * MINING
@@ -910,7 +904,6 @@ public class PlayerProfile
 	public long getSuperBreakerDeactivatedTimeStamp() {return superBreakerDATS;}
 	public void setSuperBreakerDeactivatedTimeStamp(Long newvalue){
 		superBreakerDATS = (int) (newvalue/1000);
-		save();
 	}
 	public long getRecentlyHurt(){
 		return recentlyHurt;
@@ -921,7 +914,6 @@ public class PlayerProfile
 	public void skillUp(SkillType skillType, int newvalue)
 	{
 		skills.put(skillType, skills.get(skillType)+newvalue);
-		save();
 	}
 	public Integer getSkillLevel(SkillType skillType)
 	{
@@ -1058,7 +1050,6 @@ public class PlayerProfile
 			skillsXp.put(skillType, skillsXp.get(skillType)+xp);
 			lastgained = skillType;
 		}
-		//save();
 	}
 	
 	public void removeXP(SkillType skillType, int newvalue)
@@ -1080,7 +1071,6 @@ public class PlayerProfile
 		} else {
 			skillsXp.put(skillType, skillsXp.get(skillType)-newvalue);
 		}
-		//save();
 	}
 	public void acceptInvite()
 	{
@@ -1126,7 +1116,6 @@ public class PlayerProfile
 			skills.put(skillType, newvalue);
 			skillsXp.put(skillType, newvalue);
 		}
-		save();
 	}
 	public Integer getXpToLevel(SkillType skillType)
 	{
@@ -1137,14 +1126,12 @@ public class PlayerProfile
     public void setParty(String newParty)
     {
     	party = newParty;
-    	save();
     }
     //Retrieve the player's party
     public String getParty() {return party;}
             //Remove party
     public void removeParty() {
     	party = null;
-    	save();
     }
     //Retrieve whether or not the player is in a party
     public boolean inParty() 
@@ -1176,7 +1163,6 @@ public class PlayerProfile
     public void setMySpawn(double x, double y, double z, String myspawnworldlocation){
     	myspawn = x+","+y+","+z;
     	myspawnworld = myspawnworldlocation;
-    	save();
     }
     public String getX(){
     	if(myspawn != null)

+ 4 - 0
src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java

@@ -155,6 +155,10 @@ public class mcPlayerListener implements Listener
 				mmoHelper.containers.remove(player);
 		}
 		
+		//Save PlayerData to MySQL/FlatFile on player quit
+		Users.getProfile(player).save();
+		
+		//Remove PlayerProfile
 		Users.removeUser(event.getPlayer());
 	}
 

+ 4 - 0
src/main/java/com/gmail/nossr50/mcMMO.java

@@ -83,6 +83,7 @@ public class mcMMO extends JavaPlugin
 	private final mcEntityListener entityListener = new mcEntityListener(this);
 
 	private Runnable mcMMO_Timer = new mcTimer(this); //BLEED AND REGENERATION
+	private Runnable mcMMO_SaveTimer = new mcSaveTimer(this); //Periodic saving of Player Data
 	private Runnable ChangeDataValueTimer = new ChangeDataValueTimer(this);		//R2 block place workaround
 	//private Timer mcMMO_SpellTimer = new Timer(true);
 
@@ -157,6 +158,9 @@ public class mcMMO extends JavaPlugin
 		for(Player player : getServer().getOnlinePlayers()){Users.addUser(player);} //In case of reload add all users back into PlayerProfile   
 		System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
 		
+		//Periodic save timer (Saves every 10 minutes)
+		Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_SaveTimer, 0, 12000);
+		
 		Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, mcMMO_Timer, 0, 20);
 		//R2+ block place fix
 		Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, ChangeDataValueTimer, 0, 10);

+ 40 - 0
src/main/java/com/gmail/nossr50/runnables/mcSaveTimer.java

@@ -0,0 +1,40 @@
+/*
+	This file is part of mcMMO.
+
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package com.gmail.nossr50.runnables;
+
+import org.bukkit.entity.Player;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+
+public class mcSaveTimer implements Runnable {
+    private final mcMMO plugin;
+	
+	public mcSaveTimer(final mcMMO plugin) 
+    {
+        this.plugin = plugin;
+    }
+	
+	public void run() 
+	{
+	    //All player data will be saved periodically through this
+	    for(Player player : plugin.getServer().getOnlinePlayers())
+	    {
+	        Users.getProfile(player).save();
+	    }
+	}
+}