|  |  |  | @ -20,7 +20,10 @@ package engine.objects;@@ -20,7 +20,10 @@ package engine.objects; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import engine.Enum; | 
			
		
	
		
			
				
					|  |  |  |  | import engine.InterestManagement.WorldGrid; | 
			
		
	
		
			
				
					|  |  |  |  | import engine.gameManager.*; | 
			
		
	
		
			
				
					|  |  |  |  | import engine.gameManager.BuildingManager; | 
			
		
	
		
			
				
					|  |  |  |  | import engine.gameManager.ChatManager; | 
			
		
	
		
			
				
					|  |  |  |  | import engine.gameManager.DbManager; | 
			
		
	
		
			
				
					|  |  |  |  | import engine.gameManager.ZoneManager; | 
			
		
	
		
			
				
					|  |  |  |  | import engine.net.ByteBufferWriter; | 
			
		
	
		
			
				
					|  |  |  |  | import engine.net.client.msg.ErrorPopupMsg; | 
			
		
	
		
			
				
					|  |  |  |  | import engine.server.MBServerStatics; | 
			
		
	
	
		
			
				
					|  |  |  | @ -33,38 +36,34 @@ import java.time.LocalDateTime;@@ -33,38 +36,34 @@ import java.time.LocalDateTime; | 
			
		
	
		
			
				
					|  |  |  |  | import java.util.ArrayList; | 
			
		
	
		
			
				
					|  |  |  |  | import java.util.concurrent.ConcurrentHashMap; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import static engine.gameManager.DbManager.*; | 
			
		
	
		
			
				
					|  |  |  |  | import static engine.gameManager.DbManager.MineQueries; | 
			
		
	
		
			
				
					|  |  |  |  | import static engine.gameManager.DbManager.getObject; | 
			
		
	
		
			
				
					|  |  |  |  | import static engine.math.FastMath.sqr; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private String zoneName; | 
			
		
	
		
			
				
					|  |  |  |  |     private Resource production; | 
			
		
	
		
			
				
					|  |  |  |  |     public static ConcurrentHashMap<Mine, Integer> mineMap = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); | 
			
		
	
		
			
				
					|  |  |  |  |     public static ConcurrentHashMap<Integer, Mine> towerMap = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean isActive = false; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private float latitude; | 
			
		
	
		
			
				
					|  |  |  |  |     private float longitude; | 
			
		
	
		
			
				
					|  |  |  |  |     private float altitude; | 
			
		
	
		
			
				
					|  |  |  |  |     private Guild owningGuild; | 
			
		
	
		
			
				
					|  |  |  |  |     public PlayerCharacter lastClaimer; | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean wasClaimed = false; | 
			
		
	
		
			
				
					|  |  |  |  |     private int flags; | 
			
		
	
		
			
				
					|  |  |  |  |     private int buildingID; | 
			
		
	
		
			
				
					|  |  |  |  |     private Zone parentZone; | 
			
		
	
		
			
				
					|  |  |  |  |     private MineProduction mineType; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     //flags 1: never been claimed (make active).
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // Not persisted to DB
 | 
			
		
	
		
			
				
					|  |  |  |  |     public String guildName; | 
			
		
	
		
			
				
					|  |  |  |  |     public GuildTag guildTag; | 
			
		
	
		
			
				
					|  |  |  |  |     public String nationName; | 
			
		
	
		
			
				
					|  |  |  |  |     public GuildTag nationTag; | 
			
		
	
		
			
				
					|  |  |  |  |     public static ConcurrentHashMap<Mine, Integer> mineMap = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); | 
			
		
	
		
			
				
					|  |  |  |  |     public static ConcurrentHashMap<Integer, Mine> towerMap = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW); | 
			
		
	
		
			
				
					|  |  |  |  |     private final String zoneName; | 
			
		
	
		
			
				
					|  |  |  |  |     private Resource production; | 
			
		
	
		
			
				
					|  |  |  |  |     private final float latitude; | 
			
		
	
		
			
				
					|  |  |  |  |     private final float longitude; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private static long lastChange = System.currentTimeMillis(); | 
			
		
	
		
			
				
					|  |  |  |  |     //flags 1: never been claimed (make active).
 | 
			
		
	
		
			
				
					|  |  |  |  |     private final float altitude; | 
			
		
	
		
			
				
					|  |  |  |  |     private Guild owningGuild; | 
			
		
	
		
			
				
					|  |  |  |  |     private int flags; | 
			
		
	
		
			
				
					|  |  |  |  |     private int buildingID; | 
			
		
	
		
			
				
					|  |  |  |  |     private final Zone parentZone; | 
			
		
	
		
			
				
					|  |  |  |  |     private MineProduction mineType; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * ResultSet Constructor | 
			
		
	
	
		
			
				
					|  |  |  | @ -139,6 +138,7 @@ public class Mine extends AbstractGameObject {@@ -139,6 +138,7 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public static void SendMineAttackMessage(Building mine) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (mine.getBlueprint() == null) | 
			
		
	
	
		
			
				
					|  |  |  | @ -186,90 +186,10 @@ public class Mine extends AbstractGameObject {@@ -186,90 +186,10 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  |      * Getters | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean changeProductionType(Resource resource) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (!this.validForMine(resource)) | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  |         //update resource in database;
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (!MineQueries.CHANGE_RESOURCE(this, resource)) | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         this.production = resource; | 
			
		
	
		
			
				
					|  |  |  |  |         return true; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public MineProduction getMineType() { | 
			
		
	
		
			
				
					|  |  |  |  |         return this.mineType; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public String getZoneName() { | 
			
		
	
		
			
				
					|  |  |  |  |         return this.zoneName; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public Resource getProduction() { | 
			
		
	
		
			
				
					|  |  |  |  |         return this.production; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean getIsActive() { | 
			
		
	
		
			
				
					|  |  |  |  |         return this.isActive; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public float getAltitude() { | 
			
		
	
		
			
				
					|  |  |  |  |         return this.altitude; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public Guild getOwningGuild() { | 
			
		
	
		
			
				
					|  |  |  |  |         if (this.owningGuild == null) | 
			
		
	
		
			
				
					|  |  |  |  |             return Guild.getErrantGuild(); | 
			
		
	
		
			
				
					|  |  |  |  |         else | 
			
		
	
		
			
				
					|  |  |  |  |             return this.owningGuild; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public int getFlags() { | 
			
		
	
		
			
				
					|  |  |  |  |         return flags; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void setFlags(int flags) { | 
			
		
	
		
			
				
					|  |  |  |  |         this.flags = flags; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public Zone getParentZone() { | 
			
		
	
		
			
				
					|  |  |  |  |         return parentZone; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public GuildTag getGuildTag() { | 
			
		
	
		
			
				
					|  |  |  |  |         return guildTag; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void setMineType(String type) { | 
			
		
	
		
			
				
					|  |  |  |  |         this.mineType = MineProduction.getByName(type); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void setActive(boolean isAc) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         this.isActive = isAc; | 
			
		
	
		
			
				
					|  |  |  |  |         Building building = BuildingManager.getBuildingFromCache(this.buildingID); | 
			
		
	
		
			
				
					|  |  |  |  |         if (building != null && !this.isActive) | 
			
		
	
		
			
				
					|  |  |  |  |             building.isDeranking.compareAndSet(true, false); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void setOwningGuild(Guild owningGuild) { | 
			
		
	
		
			
				
					|  |  |  |  |         this.owningGuild = owningGuild; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public static Mine getMineFromTower(int towerID) { | 
			
		
	
		
			
				
					|  |  |  |  |         return Mine.towerMap.get(towerID); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean validForMine(Resource r) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (this.mineType == null) | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  |         return this.mineType.validForMine(r, this.isExpansion()); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /* | 
			
		
	
		
			
				
					|  |  |  |  |      * Serialization | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public static void serializeForClientMsg(Mine mine, ByteBufferWriter writer) { | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(mine.getObjectType().ordinal()); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(mine.getObjectUUID()); | 
			
		
	
	
		
			
				
					|  |  |  | @ -291,8 +211,8 @@ public class Mine extends AbstractGameObject {@@ -291,8 +211,8 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // Adjust the serialized mine time based upon whether
 | 
			
		
	
		
			
				
					|  |  |  |  |         // the Guild's mine window has passed or not and if it was claimed.
 | 
			
		
	
		
			
				
					|  |  |  |  | 		// If a mine is active serialize current datetime irrespective
 | 
			
		
	
		
			
				
					|  |  |  |  | 		// of any claim.
 | 
			
		
	
		
			
				
					|  |  |  |  |         // If a mine is active serialize current datetime irrespective
 | 
			
		
	
		
			
				
					|  |  |  |  |         // of any claim.
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (mineNatonGuild.isEmptyGuild() == false && mine.isActive == false) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -321,20 +241,6 @@ public class Mine extends AbstractGameObject {@@ -321,20 +241,6 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  |         GuildTag._serializeForDisplay(mine.nationTag, writer); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void serializeForMineProduction(ByteBufferWriter writer) { | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.getObjectType().ordinal()); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.getObjectUUID()); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.getObjectUUID()); //actually a hash of mine
 | 
			
		
	
		
			
				
					|  |  |  |  |         //		writer.putInt(0x215C92BB); //this.unknown1);
 | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putString(this.mineType.name); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putString(this.zoneName); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.production.hash); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.production.baseProduction); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.getModifiedProductionAmount()); //TODO calculate range penalty here
 | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(3600); //window in seconds
 | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.isExpansion() ? this.mineType.xpacHash : this.mineType.hash); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public static ArrayList<Mine> getMinesForGuild(int guildID) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         ArrayList<Mine> mineList = new ArrayList<>(); | 
			
		
	
	
		
			
				
					|  |  |  | @ -343,20 +249,12 @@ public class Mine extends AbstractGameObject {@@ -343,20 +249,12 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         for (Mine mine : Mine.mineMap.keySet()) { | 
			
		
	
		
			
				
					|  |  |  |  |             if (mine.owningGuild.getObjectUUID() == guildID && | 
			
		
	
		
			
				
					|  |  |  |  |                 mine.isActive == false) | 
			
		
	
		
			
				
					|  |  |  |  |                     mine.isActive == false) | 
			
		
	
		
			
				
					|  |  |  |  |                 mineList.add(mine); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         return mineList; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public static long getLastChange() { | 
			
		
	
		
			
				
					|  |  |  |  |         return lastChange; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public static void setLastChange(long lastChange) { | 
			
		
	
		
			
				
					|  |  |  |  |         Mine.lastChange = lastChange; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /* | 
			
		
	
		
			
				
					|  |  |  |  |      * Database | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
	
		
			
				
					|  |  |  | @ -369,19 +267,6 @@ public class Mine extends AbstractGameObject {@@ -369,19 +267,6 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  |         return new ArrayList<>(mineMap.keySet()); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     @Override | 
			
		
	
		
			
				
					|  |  |  |  |     public void updateDatabase() { | 
			
		
	
		
			
				
					|  |  |  |  |         // TODO Create update logic.
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public int getBuildingID() { | 
			
		
	
		
			
				
					|  |  |  |  |         return buildingID; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void setBuildingID(int buildingID) { | 
			
		
	
		
			
				
					|  |  |  |  |         this.buildingID = buildingID; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public static boolean validateClaimer(PlayerCharacter playerCharacter) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         // Method validates that the claimer meets
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -407,7 +292,7 @@ public class Mine extends AbstractGameObject {@@ -407,7 +292,7 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  |         if (playerGuild.getNation().isEmptyGuild()) | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |        // Guild must own a city to hold a mine.
 | 
			
		
	
		
			
				
					|  |  |  |  |         // Guild must own a city to hold a mine.
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         City guildCity = playerGuild.getOwnedCity(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -433,7 +318,7 @@ public class Mine extends AbstractGameObject {@@ -433,7 +318,7 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  |         if (treeRank < 1) | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (guildUnderMineLimit(playerGuild.getNation(), treeRank) == false){ | 
			
		
	
		
			
				
					|  |  |  |  |         if (guildUnderMineLimit(playerGuild.getNation(), treeRank) == false) { | 
			
		
	
		
			
				
					|  |  |  |  |             ErrorPopupMsg.sendErrorMsg(playerCharacter, "Your nation cannot support another mine."); | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
	
		
			
				
					|  |  |  | @ -450,11 +335,116 @@ public class Mine extends AbstractGameObject {@@ -450,11 +335,116 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  |         for (Guild guild : playerGuild.getSubGuildList()) | 
			
		
	
		
			
				
					|  |  |  |  |             mineCnt += Mine.getMinesForGuild(guild.getObjectUUID()).size(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (mineCnt > tolRank) | 
			
		
	
		
			
				
					|  |  |  |  |         return mineCnt <= tolRank; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean changeProductionType(Resource resource) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (!this.validForMine(resource)) | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  |         //update resource in database;
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (!MineQueries.CHANGE_RESOURCE(this, resource)) | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         this.production = resource; | 
			
		
	
		
			
				
					|  |  |  |  |         return true; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public MineProduction getMineType() { | 
			
		
	
		
			
				
					|  |  |  |  |         return this.mineType; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void setMineType(String type) { | 
			
		
	
		
			
				
					|  |  |  |  |         this.mineType = MineProduction.getByName(type); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public String getZoneName() { | 
			
		
	
		
			
				
					|  |  |  |  |         return this.zoneName; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public Resource getProduction() { | 
			
		
	
		
			
				
					|  |  |  |  |         return this.production; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean getIsActive() { | 
			
		
	
		
			
				
					|  |  |  |  |         return this.isActive; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public float getAltitude() { | 
			
		
	
		
			
				
					|  |  |  |  |         return this.altitude; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public Guild getOwningGuild() { | 
			
		
	
		
			
				
					|  |  |  |  |         if (this.owningGuild == null) | 
			
		
	
		
			
				
					|  |  |  |  |             return Guild.getErrantGuild(); | 
			
		
	
		
			
				
					|  |  |  |  |         else | 
			
		
	
		
			
				
					|  |  |  |  |             return this.owningGuild; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void setOwningGuild(Guild owningGuild) { | 
			
		
	
		
			
				
					|  |  |  |  |         this.owningGuild = owningGuild; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /* | 
			
		
	
		
			
				
					|  |  |  |  |      * Serialization | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public int getFlags() { | 
			
		
	
		
			
				
					|  |  |  |  |         return flags; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void setFlags(int flags) { | 
			
		
	
		
			
				
					|  |  |  |  |         this.flags = flags; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public Zone getParentZone() { | 
			
		
	
		
			
				
					|  |  |  |  |         return parentZone; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public GuildTag getGuildTag() { | 
			
		
	
		
			
				
					|  |  |  |  |         return guildTag; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void setActive(boolean isAc) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         this.isActive = isAc; | 
			
		
	
		
			
				
					|  |  |  |  |         Building building = BuildingManager.getBuildingFromCache(this.buildingID); | 
			
		
	
		
			
				
					|  |  |  |  |         if (building != null && !this.isActive) | 
			
		
	
		
			
				
					|  |  |  |  |             building.isDeranking.compareAndSet(true, false); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean validForMine(Resource r) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (this.mineType == null) | 
			
		
	
		
			
				
					|  |  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |  |         return this.mineType.validForMine(r, this.isExpansion()); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void serializeForMineProduction(ByteBufferWriter writer) { | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.getObjectType().ordinal()); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.getObjectUUID()); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.getObjectUUID()); //actually a hash of mine
 | 
			
		
	
		
			
				
					|  |  |  |  |         //		writer.putInt(0x215C92BB); //this.unknown1);
 | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putString(this.mineType.name); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putString(this.zoneName); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.production.hash); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.production.baseProduction); | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.getModifiedProductionAmount()); //TODO calculate range penalty here
 | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(3600); //window in seconds
 | 
			
		
	
		
			
				
					|  |  |  |  |         writer.putInt(this.isExpansion() ? this.mineType.xpacHash : this.mineType.hash); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     @Override | 
			
		
	
		
			
				
					|  |  |  |  |     public void updateDatabase() { | 
			
		
	
		
			
				
					|  |  |  |  |         // TODO Create update logic.
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public int getBuildingID() { | 
			
		
	
		
			
				
					|  |  |  |  |         return buildingID; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void setBuildingID(int buildingID) { | 
			
		
	
		
			
				
					|  |  |  |  |         this.buildingID = buildingID; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void handleDestroyMine() { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (!this.isActive) | 
			
		
	
	
		
			
				
					|  |  |  | @ -465,7 +455,6 @@ public class Mine extends AbstractGameObject {@@ -465,7 +455,6 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  |         this.guildName = ""; | 
			
		
	
		
			
				
					|  |  |  |  |         this.nationName = ""; | 
			
		
	
		
			
				
					|  |  |  |  |         this.owningGuild = Guild.getErrantGuild(); | 
			
		
	
		
			
				
					|  |  |  |  |         Mine.setLastChange(System.currentTimeMillis()); | 
			
		
	
		
			
				
					|  |  |  |  |         this.lastClaimer = null; | 
			
		
	
		
			
				
					|  |  |  |  |         this.wasClaimed = false; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -513,6 +502,7 @@ public class Mine extends AbstractGameObject {@@ -513,6 +502,7 @@ public class Mine extends AbstractGameObject { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         return true; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean depositMineResources() { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (this.owningGuild.isEmptyGuild()) | 
			
		
	
	
		
			
				
					|  |  |  | 
 |