java conventions and lombok
This commit is contained in:
		
							parent
							
								
									6fbc4b9a7a
								
							
						
					
					
						commit
						38aad961cc
					
				@ -75,7 +75,7 @@ public abstract class MPlugin extends JavaPlugin implements Listener
 | 
				
			|||||||
		// Collection shutdowns for new system.
 | 
							// Collection shutdowns for new system.
 | 
				
			||||||
		for (Coll<?, ?> coll : Coll.instances)
 | 
							for (Coll<?, ?> coll : Coll.instances)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (coll.mplugin() != this) continue;
 | 
								if (coll.getMplugin() != this) continue;
 | 
				
			||||||
			coll.examineThread().interrupt();
 | 
								coll.examineThread().interrupt();
 | 
				
			||||||
			coll.syncAll(); // TODO: Save outwards only? We may want to avoid loads at this stage...
 | 
								coll.syncAll(); // TODO: Save outwards only? We may want to avoid loads at this stage...
 | 
				
			||||||
			Coll.instances.remove(coll);
 | 
								Coll.instances.remove(coll);
 | 
				
			||||||
 | 
				
			|||||||
@ -14,10 +14,8 @@ import org.bukkit.Location;
 | 
				
			|||||||
import org.bukkit.World;
 | 
					import org.bukkit.World;
 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
import org.bukkit.entity.Entity;
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					 | 
				
			||||||
import org.bukkit.util.Vector;
 | 
					import org.bukkit.util.Vector;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.mcore4.store.accessor.Accessor;
 | 
					 | 
				
			||||||
import com.massivecraft.mcore4.util.Txt;
 | 
					import com.massivecraft.mcore4.util.Txt;
 | 
				
			||||||
import com.massivecraft.mcore4.xlib.gson.annotations.SerializedName;
 | 
					import com.massivecraft.mcore4.xlib.gson.annotations.SerializedName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -46,7 +44,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: worldName
 | 
						// Field: worldName
 | 
				
			||||||
	@SerializedName("w")
 | 
						@SerializedName("w")
 | 
				
			||||||
	@Getter @Setter protected String worldName;
 | 
						@Getter @Setter protected String worldName = null;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// FakeField: world
 | 
						// FakeField: world
 | 
				
			||||||
	public World getWorld()
 | 
						public World getWorld()
 | 
				
			||||||
@ -54,17 +52,16 @@ public class PS implements Cloneable
 | 
				
			|||||||
		if (this.worldName == null) return null;
 | 
							if (this.worldName == null) return null;
 | 
				
			||||||
		return Bukkit.getWorld(this.worldName);
 | 
							return Bukkit.getWorld(this.worldName);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	public PS setWorld(World val)
 | 
						public void setWorld(World val)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.worldName = val.getName();
 | 
							this.worldName = val.getName();
 | 
				
			||||||
		return this;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// ---------------------
 | 
						// ---------------------
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// Field: blockX
 | 
						// Field: blockX
 | 
				
			||||||
	@SerializedName("bx")
 | 
						@SerializedName("bx")
 | 
				
			||||||
	@Getter @Setter protected Integer blockX;
 | 
						@Getter @Setter protected Integer blockX = null;
 | 
				
			||||||
	public Integer calcBlockX()
 | 
						public Integer calcBlockX()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcBlock(this.locationX, this.blockX, this.chunkX);
 | 
							return calcBlock(this.locationX, this.blockX, this.chunkX);
 | 
				
			||||||
@ -72,7 +69,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: blockY
 | 
						// Field: blockY
 | 
				
			||||||
	@SerializedName("by")
 | 
						@SerializedName("by")
 | 
				
			||||||
	@Getter @Setter protected Integer blockY;
 | 
						@Getter @Setter protected Integer blockY = null;
 | 
				
			||||||
	public Integer calcBlockY()
 | 
						public Integer calcBlockY()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcBlock(this.locationY, this.blockY, null);
 | 
							return calcBlock(this.locationY, this.blockY, null);
 | 
				
			||||||
@ -80,7 +77,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: blockZ
 | 
						// Field: blockZ
 | 
				
			||||||
	@SerializedName("bz")
 | 
						@SerializedName("bz")
 | 
				
			||||||
	@Getter @Setter protected Integer blockZ;
 | 
						@Getter @Setter protected Integer blockZ = null;
 | 
				
			||||||
	public Integer calcBlockZ()
 | 
						public Integer calcBlockZ()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcBlock(this.locationZ, this.blockZ, this.chunkZ);
 | 
							return calcBlock(this.locationZ, this.blockZ, this.chunkZ);
 | 
				
			||||||
@ -98,7 +95,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: locationX
 | 
						// Field: locationX
 | 
				
			||||||
	@SerializedName("lx")
 | 
						@SerializedName("lx")
 | 
				
			||||||
	@Getter @Setter protected Double locationX;
 | 
						@Getter @Setter protected Double locationX = null;
 | 
				
			||||||
	public Double calcLocationX()
 | 
						public Double calcLocationX()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcLocation(this.locationX, this.blockX, this.chunkX);
 | 
							return calcLocation(this.locationX, this.blockX, this.chunkX);
 | 
				
			||||||
@ -106,7 +103,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: locationY
 | 
						// Field: locationY
 | 
				
			||||||
	@SerializedName("ly")
 | 
						@SerializedName("ly")
 | 
				
			||||||
	@Getter @Setter protected Double locationY;
 | 
						@Getter @Setter protected Double locationY = null;
 | 
				
			||||||
	public Double calcLocationY()
 | 
						public Double calcLocationY()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcLocation(this.locationY, this.blockY, null);
 | 
							return calcLocation(this.locationY, this.blockY, null);
 | 
				
			||||||
@ -114,7 +111,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: locationZ
 | 
						// Field: locationZ
 | 
				
			||||||
	@SerializedName("lz")
 | 
						@SerializedName("lz")
 | 
				
			||||||
	@Getter @Setter protected Double locationZ;
 | 
						@Getter @Setter protected Double locationZ = null;
 | 
				
			||||||
	public Double calclocationZ()
 | 
						public Double calclocationZ()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcLocation(this.locationZ, this.blockZ, this.chunkZ);
 | 
							return calcLocation(this.locationZ, this.blockZ, this.chunkZ);
 | 
				
			||||||
@ -132,7 +129,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: chunkX
 | 
						// Field: chunkX
 | 
				
			||||||
	@SerializedName("cx")
 | 
						@SerializedName("cx")
 | 
				
			||||||
	@Getter @Setter protected Integer chunkX;
 | 
						@Getter @Setter protected Integer chunkX = null;
 | 
				
			||||||
	public Integer calcChunkX()
 | 
						public Integer calcChunkX()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcChunk(this.locationX, this.blockX, this.chunkX);
 | 
							return calcChunk(this.locationX, this.blockX, this.chunkX);
 | 
				
			||||||
@ -140,7 +137,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: chunkZ
 | 
						// Field: chunkZ
 | 
				
			||||||
	@SerializedName("xz")
 | 
						@SerializedName("xz")
 | 
				
			||||||
	@Getter @Setter protected Integer chunkZ;
 | 
						@Getter @Setter protected Integer chunkZ = null;
 | 
				
			||||||
	public Integer calcChunkZ()
 | 
						public Integer calcChunkZ()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcChunk(this.locationZ, this.blockZ, this.chunkZ);
 | 
							return calcChunk(this.locationZ, this.blockZ, this.chunkZ);
 | 
				
			||||||
@ -158,8 +155,8 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: pitch
 | 
						// Field: pitch
 | 
				
			||||||
	@SerializedName("p")
 | 
						@SerializedName("p")
 | 
				
			||||||
	@Getter protected Float pitch;
 | 
						@Getter protected Float pitch = null;
 | 
				
			||||||
	public PS setPitch(Float val) 
 | 
						public void setPitch(Float val) 
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (val == null)
 | 
							if (val == null)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@ -169,18 +166,17 @@ public class PS implements Cloneable
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			this.pitch = (val + 360F) % 360F;
 | 
								this.pitch = (val + 360F) % 360F;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return this;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// Field: yaw
 | 
						// Field: yaw
 | 
				
			||||||
	@SerializedName("y")
 | 
						@SerializedName("y")
 | 
				
			||||||
	@Getter @Setter protected Float yaw;
 | 
						@Getter @Setter protected Float yaw = null;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// ---------------------
 | 
						// ---------------------
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// Field: velocityX
 | 
						// Field: velocityX
 | 
				
			||||||
	@SerializedName("vx")
 | 
						@SerializedName("vx")
 | 
				
			||||||
	@Getter @Setter protected Double velocityX;
 | 
						@Getter @Setter protected Double velocityX = null;
 | 
				
			||||||
	public Double calcVelocityX()
 | 
						public Double calcVelocityX()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcVelocity(this.locationX, this.blockX, this.chunkX, this.velocityX);
 | 
							return calcVelocity(this.locationX, this.blockX, this.chunkX, this.velocityX);
 | 
				
			||||||
@ -188,7 +184,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: velocityY
 | 
						// Field: velocityY
 | 
				
			||||||
	@SerializedName("vy")
 | 
						@SerializedName("vy")
 | 
				
			||||||
	@Getter @Setter protected Double velocityY;
 | 
						@Getter @Setter protected Double velocityY = null;
 | 
				
			||||||
	public Double calcVelocityY()
 | 
						public Double calcVelocityY()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcVelocity(this.locationY, this.blockY, 0, this.velocityY);
 | 
							return calcVelocity(this.locationY, this.blockY, 0, this.velocityY);
 | 
				
			||||||
@ -196,7 +192,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Field: velocityZ
 | 
						// Field: velocityZ
 | 
				
			||||||
	@SerializedName("vz")
 | 
						@SerializedName("vz")
 | 
				
			||||||
	@Getter @Setter protected Double velocityZ;
 | 
						@Getter @Setter protected Double velocityZ = null;
 | 
				
			||||||
	public Double calcVelocityZ()
 | 
						public Double calcVelocityZ()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return calcVelocity(this.locationZ, this.blockZ, this.chunkZ, this.velocityZ);
 | 
							return calcVelocity(this.locationZ, this.blockZ, this.chunkZ, this.velocityZ);
 | 
				
			||||||
@ -212,7 +208,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	//----------------------------------------------//
 | 
						//----------------------------------------------//
 | 
				
			||||||
	// CONVERTERS
 | 
						// GET / CALC
 | 
				
			||||||
	//----------------------------------------------//
 | 
						//----------------------------------------------//
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized Location getLocation()
 | 
						public synchronized Location getLocation()
 | 
				
			||||||
@ -248,7 +244,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		return this.innerBlock(this.calcBlockX(), this.calcBlockY(), this.calcBlockZ());
 | 
							return this.innerBlock(this.calcBlockX(), this.calcBlockY(), this.calcBlockZ());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	public synchronized Block innerBlock(Integer x, Integer y, Integer z)
 | 
						protected synchronized Block innerBlock(Integer x, Integer y, Integer z)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		World world = this.getWorld();
 | 
							World world = this.getWorld();
 | 
				
			||||||
		if (world == null) return null;
 | 
							if (world == null) return null;
 | 
				
			||||||
@ -268,7 +264,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		return this.innerChunk(this.calcChunkX(), this.calcChunkZ());
 | 
							return this.innerChunk(this.calcChunkX(), this.calcChunkZ());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	public synchronized Chunk innerChunk(Integer x, Integer z)
 | 
						protected synchronized Chunk innerChunk(Integer x, Integer z)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		World world = this.getWorld();
 | 
							World world = this.getWorld();
 | 
				
			||||||
		if (world == null) return null;
 | 
							if (world == null) return null;
 | 
				
			||||||
@ -287,7 +283,7 @@ public class PS implements Cloneable
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		return this.innerVelocity(this.calcVelocityX(), this.calcVelocityY(), this.calcVelocityZ());
 | 
							return this.innerVelocity(this.calcVelocityX(), this.calcVelocityY(), this.calcVelocityZ());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	public synchronized Vector innerVelocity(Double x, Double y, Double z)
 | 
						protected synchronized Vector innerVelocity(Double x, Double y, Double z)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (x == null) return null;
 | 
							if (x == null) return null;
 | 
				
			||||||
		if (y == null) return null;
 | 
							if (y == null) return null;
 | 
				
			||||||
@ -296,10 +292,10 @@ public class PS implements Cloneable
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	//----------------------------------------------//
 | 
						//----------------------------------------------//
 | 
				
			||||||
	// READERS
 | 
						// SET
 | 
				
			||||||
	//----------------------------------------------//
 | 
						//----------------------------------------------//
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS readDefault()
 | 
						public synchronized void setDefault()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.worldName = null;
 | 
							this.worldName = null;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -320,30 +316,63 @@ public class PS implements Cloneable
 | 
				
			|||||||
		this.velocityX = null;
 | 
							this.velocityX = null;
 | 
				
			||||||
		this.velocityY = null;
 | 
							this.velocityY = null;
 | 
				
			||||||
		this.velocityZ = null;
 | 
							this.velocityZ = null;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public synchronized void setPSTransparent(PS ps)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (ps.worldName != null) this.worldName = ps.worldName;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		return this;
 | 
							if (ps.blockX != null) this.blockX = ps.blockX;
 | 
				
			||||||
 | 
							if (ps.blockY != null) this.blockY = ps.blockY;
 | 
				
			||||||
 | 
							if (ps.blockZ != null) this.blockZ = ps.blockZ;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (ps.locationX != null) this.locationX = ps.locationX;
 | 
				
			||||||
 | 
							if (ps.locationY != null) this.locationY = ps.locationY;
 | 
				
			||||||
 | 
							if (ps.locationZ != null) this.locationZ = ps.locationZ;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (ps.chunkX != null) this.chunkX = ps.chunkX;
 | 
				
			||||||
 | 
							if (ps.chunkZ != null) this.chunkZ = ps.chunkZ;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (ps.pitch != null) this.pitch = ps.pitch;
 | 
				
			||||||
 | 
							if (ps.yaw != null) this.yaw = ps.yaw;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (ps.velocityX != null) this.velocityX = ps.velocityX;
 | 
				
			||||||
 | 
							if (ps.velocityY != null) this.velocityY = ps.velocityY;
 | 
				
			||||||
 | 
							if (ps.velocityZ != null) this.velocityZ = ps.velocityZ;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS readTransparent(PS ps)
 | 
						public synchronized void setPS(PS ps)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Accessor.get(PS.class).copy(ps, this, true);
 | 
							this.worldName = ps.worldName;
 | 
				
			||||||
		return this;
 | 
							
 | 
				
			||||||
	}
 | 
							this.blockX = ps.blockX;
 | 
				
			||||||
	
 | 
							this.blockY = ps.blockY;
 | 
				
			||||||
	public synchronized PS read(PS ps)
 | 
							this.blockZ = ps.blockZ;
 | 
				
			||||||
	{
 | 
							
 | 
				
			||||||
		Accessor.get(PS.class).copy(ps, this);
 | 
							this.locationX = ps.locationX;
 | 
				
			||||||
		return this;
 | 
							this.locationY = ps.locationY;
 | 
				
			||||||
 | 
							this.locationZ = ps.locationZ;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							this.chunkX = ps.chunkX;
 | 
				
			||||||
 | 
							this.chunkZ = ps.chunkZ;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							this.pitch = ps.pitch;
 | 
				
			||||||
 | 
							this.yaw = ps.yaw;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							this.velocityX = ps.velocityX;
 | 
				
			||||||
 | 
							this.velocityY = ps.velocityY;
 | 
				
			||||||
 | 
							this.velocityZ = ps.velocityZ;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// ---------------------
 | 
						// ---------------------
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS read(Location location)
 | 
						public synchronized void setLocation(Location location)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.readDefault().readTransparent(location);
 | 
							this.setDefault();
 | 
				
			||||||
 | 
							this.setLocationTransparent(location);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS readTransparent(Location location)
 | 
						public synchronized void setLocationTransparent(Location location)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.worldName = location.getWorld().getName();
 | 
							this.worldName = location.getWorld().getName();
 | 
				
			||||||
		this.locationX = location.getX();
 | 
							this.locationX = location.getX();
 | 
				
			||||||
@ -351,79 +380,77 @@ public class PS implements Cloneable
 | 
				
			|||||||
		this.locationZ = location.getZ();
 | 
							this.locationZ = location.getZ();
 | 
				
			||||||
		this.setPitch(location.getPitch());
 | 
							this.setPitch(location.getPitch());
 | 
				
			||||||
		this.yaw = location.getYaw();
 | 
							this.yaw = location.getYaw();
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		return this;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// ---------------------
 | 
						// ---------------------
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS read(Vector vector)
 | 
						public synchronized void setVelocity(Vector vector)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.readDefault().readTransparent(vector);
 | 
							this.setDefault();
 | 
				
			||||||
 | 
							this.setVelocityTransparent(vector);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS readTransparent(Vector vector)
 | 
						public synchronized void setVelocityTransparent(Vector vector)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.velocityX = vector.getX();
 | 
							this.velocityX = vector.getX();
 | 
				
			||||||
		this.velocityY = vector.getY();
 | 
							this.velocityY = vector.getY();
 | 
				
			||||||
		this.velocityZ = vector.getZ();
 | 
							this.velocityZ = vector.getZ();
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		return this;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// ---------------------
 | 
						// ---------------------
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS read(Player player)
 | 
						public synchronized void setEntity(Entity entity)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.readDefault().readTransparent(player);
 | 
							this.setDefault();
 | 
				
			||||||
 | 
							this.setEntityTransparent(entity);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS readTransparent(Player player)
 | 
						public synchronized void setEntityTransparent(Entity entity)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.readTransparent(player.getLocation());
 | 
							this.setLocationTransparent(entity.getLocation());
 | 
				
			||||||
		this.readTransparent(player.getVelocity());
 | 
							this.setVelocityTransparent(entity.getVelocity());
 | 
				
			||||||
		return this;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// ---------------------
 | 
						// ---------------------
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS read(Block block)
 | 
						public synchronized void setBlock(Block block)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.readDefault().readTransparent(block);
 | 
							this.setDefault();
 | 
				
			||||||
 | 
							this.setBlockTransparent(block);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS readTransparent(Block block)
 | 
						public synchronized void setBlockTransparent(Block block)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.worldName = block.getWorld().getName();
 | 
							this.worldName = block.getWorld().getName();
 | 
				
			||||||
		this.blockX = block.getX();
 | 
							this.blockX = block.getX();
 | 
				
			||||||
		this.blockY = block.getY();
 | 
							this.blockY = block.getY();
 | 
				
			||||||
		this.blockZ = block.getZ();
 | 
							this.blockZ = block.getZ();
 | 
				
			||||||
		return this;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// ---------------------
 | 
						// ---------------------
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS read(Chunk chunk)
 | 
						public synchronized void setChunk(Chunk chunk)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.readDefault().readTransparent(chunk);
 | 
							this.setDefault();
 | 
				
			||||||
 | 
							this.setChunkTransparent(chunk);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS readTransparent(Chunk chunk)
 | 
						public synchronized void setChunkTransparent(Chunk chunk)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.worldName = chunk.getWorld().getName();
 | 
							this.worldName = chunk.getWorld().getName();
 | 
				
			||||||
		this.chunkX = chunk.getX();
 | 
							this.chunkX = chunk.getX();
 | 
				
			||||||
		this.chunkZ = chunk.getZ();
 | 
							this.chunkZ = chunk.getZ();
 | 
				
			||||||
		return this;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// ---------------------
 | 
						// ---------------------
 | 
				
			||||||
	// TODO: This should be removed later on when my converting phase is complete.
 | 
					
 | 
				
			||||||
	public synchronized PS read(String str)
 | 
						public synchronized void setOldString(String str)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.readDefault().readTransparent(str);
 | 
							this.setDefault();
 | 
				
			||||||
 | 
							this.setOldStringTransparent(str);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public synchronized PS readTransparent(String str)
 | 
						public synchronized void setOldStringTransparent(String str)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		String[] parts = str.split("\\|");
 | 
							String[] parts = str.split("\\|");
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -443,8 +470,6 @@ public class PS implements Cloneable
 | 
				
			|||||||
			this.pitch = Float.parseFloat(parts[4]);
 | 
								this.pitch = Float.parseFloat(parts[4]);
 | 
				
			||||||
			this.yaw = Float.parseFloat(parts[5]);
 | 
								this.yaw = Float.parseFloat(parts[5]);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		return this;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -468,32 +493,37 @@ public class PS implements Cloneable
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	public PS(PS ps)
 | 
						public PS(PS ps)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.read(ps);
 | 
							this.setPS(ps);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public PS(Location location)
 | 
						public PS(Location location)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.read(location);
 | 
							this.setLocationTransparent(location);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public PS(Vector vector)
 | 
						public PS(Vector velocity)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.read(vector);
 | 
							this.setVelocityTransparent(velocity);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public PS(Player player)
 | 
						public PS(Entity entity)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.read(player);
 | 
							this.setEntityTransparent(entity);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public PS(Block block)
 | 
						public PS(Block block)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.read(block);
 | 
							this.setBlockTransparent(block);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public PS(Chunk chunk)
 | 
						public PS(Chunk chunk)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.read(chunk);
 | 
							this.setChunkTransparent(chunk);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						public PS(String oldString)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							this.setOldStringTransparent(oldString);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	//----------------------------------------------//
 | 
						//----------------------------------------------//
 | 
				
			||||||
 | 
				
			|||||||
@ -22,7 +22,7 @@ public class PSAdapter implements JsonDeserializer<PS>
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		if (json.isJsonPrimitive())
 | 
							if (json.isJsonPrimitive())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			return new PS().read(json.getAsString());
 | 
								return new PS(json.getAsString());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return new Gson().fromJson(json, typeOfT);
 | 
							return new Gson().fromJson(json, typeOfT);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,9 @@ import java.util.*;
 | 
				
			|||||||
import java.util.Map.Entry;
 | 
					import java.util.Map.Entry;
 | 
				
			||||||
import java.util.logging.Level;
 | 
					import java.util.logging.Level;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					import lombok.Setter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.command.Command;
 | 
					import org.bukkit.command.Command;
 | 
				
			||||||
import org.bukkit.command.CommandSender;
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
import org.bukkit.command.SimpleCommandMap;
 | 
					import org.bukkit.command.SimpleCommandMap;
 | 
				
			||||||
@ -29,9 +32,7 @@ public abstract class MCommand
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: subCommands
 | 
						// FIELD: subCommands
 | 
				
			||||||
	// The sub-commands to this command
 | 
						// The sub-commands to this command
 | 
				
			||||||
	protected List<MCommand> subCommands;
 | 
						@Getter @Setter protected List<MCommand> subCommands;
 | 
				
			||||||
	public List<MCommand> getSubCommands() { return this.subCommands; }
 | 
					 | 
				
			||||||
	public void setSubCommands(List<MCommand> val) { this.subCommands = val; }
 | 
					 | 
				
			||||||
	public void addSubCommand(MCommand subCommand)
 | 
						public void addSubCommand(MCommand subCommand)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		subCommand.commandChain.addAll(this.commandChain);
 | 
							subCommand.commandChain.addAll(this.commandChain);
 | 
				
			||||||
@ -41,24 +42,18 @@ public abstract class MCommand
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: aliases
 | 
						// FIELD: aliases
 | 
				
			||||||
	// The different names this commands will react to  
 | 
						// The different names this commands will react to  
 | 
				
			||||||
	protected List<String> aliases;
 | 
						@Getter @Setter protected List<String> aliases;
 | 
				
			||||||
	public List<String> getAliases() { return this.aliases; }
 | 
					 | 
				
			||||||
	public void setAliases(List<String> val) { this.aliases = val; }
 | 
					 | 
				
			||||||
	public void addAliases(String... aliases) { this.aliases.addAll(Arrays.asList(aliases)); }
 | 
						public void addAliases(String... aliases) { this.aliases.addAll(Arrays.asList(aliases)); }
 | 
				
			||||||
	public void addAliases(List<String> aliases) { this.aliases.addAll(aliases); }
 | 
						public void addAliases(List<String> aliases) { this.aliases.addAll(aliases); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: requiredArgs
 | 
						// FIELD: requiredArgs
 | 
				
			||||||
	// These args must always be sent
 | 
						// These args must always be sent
 | 
				
			||||||
	protected List<String> requiredArgs;
 | 
						@Getter @Setter protected List<String> requiredArgs;
 | 
				
			||||||
	public List<String> getRequiredArgs() { return this.requiredArgs; }
 | 
					 | 
				
			||||||
	public void setRequiredArgs(List<String> val) { this.requiredArgs = val; }
 | 
					 | 
				
			||||||
	public void addRequiredArg(String arg) { this.requiredArgs.add(arg); }
 | 
						public void addRequiredArg(String arg) { this.requiredArgs.add(arg); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: optionalArgs
 | 
						// FIELD: optionalArgs
 | 
				
			||||||
	// These args are optional
 | 
						// These args are optional
 | 
				
			||||||
	protected Map<String, String> optionalArgs;
 | 
						@Getter @Setter protected Map<String, String> optionalArgs;
 | 
				
			||||||
	public Map<String, String> getOptionalArgs() { return this.optionalArgs; }
 | 
					 | 
				
			||||||
	public void setOptionalArgs(Map<String, String> val) { this.optionalArgs = val; }
 | 
					 | 
				
			||||||
	public void addOptionalArg(String arg, String def) { this.optionalArgs.put(arg, def); }
 | 
						public void addOptionalArg(String arg, String def) { this.optionalArgs.put(arg, def); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: errorOnToManyArgs
 | 
						// FIELD: errorOnToManyArgs
 | 
				
			||||||
@ -69,16 +64,13 @@ public abstract class MCommand
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: requirements
 | 
						// FIELD: requirements
 | 
				
			||||||
	// All these requirements must be met for the command to be executable;
 | 
						// All these requirements must be met for the command to be executable;
 | 
				
			||||||
	protected List<IReq> requirements;
 | 
						@Getter @Setter protected List<IReq> requirements;
 | 
				
			||||||
	public List<IReq> getRequirements() { return this.requirements; }
 | 
					 | 
				
			||||||
	public void setRequirements(List<IReq> val) { this.requirements = val; }
 | 
					 | 
				
			||||||
	public void addRequirements(IReq... requirements) { this.requirements.addAll(Arrays.asList(requirements)); }
 | 
						public void addRequirements(IReq... requirements) { this.requirements.addAll(Arrays.asList(requirements)); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: desc
 | 
						// FIELD: desc
 | 
				
			||||||
	// This field may be left blank and will in such case be loaded from the permissions node instead.
 | 
						// This field may be left blank and will in such case be loaded from the permissions node instead.
 | 
				
			||||||
	// Thus make sure the permissions node description is an action description like "eat hamburgers" or "do admin stuff".
 | 
						// Thus make sure the permissions node description is an action description like "eat hamburgers" or "do admin stuff".
 | 
				
			||||||
	protected String desc = null;
 | 
						@Setter protected String desc = null;
 | 
				
			||||||
	public void setDesc(String val) { this.desc = val; }
 | 
					 | 
				
			||||||
	public String getDesc()
 | 
						public String getDesc()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (this.desc != null) return this.desc;
 | 
							if (this.desc != null) return this.desc;
 | 
				
			||||||
@ -98,7 +90,7 @@ public abstract class MCommand
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: descPermission
 | 
						// FIELD: descPermission
 | 
				
			||||||
	// This permission node IS NOT TESTED AT ALL. It is rather used in the method above.
 | 
						// This permission node IS NOT TESTED AT ALL. It is rather used in the method above.
 | 
				
			||||||
	protected String descPermission;
 | 
						@Setter protected String descPermission;
 | 
				
			||||||
	public String getDescPermission()
 | 
						public String getDescPermission()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (this.descPermission != null) return this.descPermission;
 | 
							if (this.descPermission != null) return this.descPermission;
 | 
				
			||||||
@ -110,7 +102,6 @@ public abstract class MCommand
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		return null;
 | 
							return null;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	public void setDescPermission(String val) { this.descPermission = val; }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: help
 | 
						// FIELD: help
 | 
				
			||||||
	// This is a multi-line help text for the command.
 | 
						// This is a multi-line help text for the command.
 | 
				
			||||||
@ -120,9 +111,7 @@ public abstract class MCommand
 | 
				
			|||||||
	public List<String> getHelp() { return this.help; }
 | 
						public List<String> getHelp() { return this.help; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: visibilityMode
 | 
						// FIELD: visibilityMode
 | 
				
			||||||
	protected VisibilityMode visibilityMode;
 | 
						@Getter @Setter protected VisibilityMode visibilityMode;
 | 
				
			||||||
	public VisibilityMode getVisibilityMode() { return this.visibilityMode; }
 | 
					 | 
				
			||||||
	public void setVisibilityMode(VisibilityMode val) { this.visibilityMode = val; }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// EXECUTION INFO
 | 
						// EXECUTION INFO
 | 
				
			||||||
@ -130,15 +119,11 @@ public abstract class MCommand
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// FIELD: args
 | 
						// FIELD: args
 | 
				
			||||||
	// Will contain the arguments, or and empty list if there are none.
 | 
						// Will contain the arguments, or and empty list if there are none.
 | 
				
			||||||
	protected List<String> args;
 | 
						@Getter @Setter protected List<String> args;
 | 
				
			||||||
	public List<String> getArgs() { return this.args; }
 | 
					 | 
				
			||||||
	public void setArgs(List<String> val) { this.args = val; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// FIELD: commandChain
 | 
						// FIELD: commandChain
 | 
				
			||||||
	// The command chain used to execute this command
 | 
						// The command chain used to execute this command
 | 
				
			||||||
	protected List<MCommand> commandChain = new ArrayList<MCommand>();
 | 
						@Getter @Setter protected List<MCommand> commandChain = new ArrayList<MCommand>();
 | 
				
			||||||
	public List<MCommand> getCommandChain() { return this.commandChain; }
 | 
					 | 
				
			||||||
	public void setCommandChain(List<MCommand> val) { this.commandChain = val; }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// FIELDS: sender, me, senderIsConsole
 | 
						// FIELDS: sender, me, senderIsConsole
 | 
				
			||||||
	public CommandSender sender;
 | 
						public CommandSender sender;
 | 
				
			||||||
 | 
				
			|||||||
@ -30,7 +30,7 @@ public class ARAspect extends ARAbstractSelect<Aspect>
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Collection<String> altNames(MCommand mcommand)
 | 
						public Collection<String> altNames(MCommand mcommand)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return AspectColl.i.ids();
 | 
							return AspectColl.i.getIds();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
				
			|||||||
@ -30,7 +30,7 @@ public class ARMultiverse extends ARAbstractSelect<Multiverse>
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Collection<String> altNames(MCommand mcommand)
 | 
						public Collection<String> altNames(MCommand mcommand)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return MultiverseColl.i.ids();
 | 
							return MultiverseColl.i.getIds();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
				
			|||||||
@ -4,24 +4,16 @@ import java.util.ArrayList;
 | 
				
			|||||||
import java.util.Arrays;
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					import lombok.Setter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class ArgResult<T>
 | 
					public class ArgResult<T>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// FIELD: RESULT
 | 
						// FIELD: RESULT
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected T result = null;
 | 
						@Getter @Setter protected T result = null;
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public T getResult()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		return this.result;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public void setResult(T val)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		this.result = val;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public boolean hasResult()
 | 
						public boolean hasResult()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.getResult() != null;
 | 
							return this.getResult() != null;
 | 
				
			||||||
@ -31,12 +23,7 @@ public class ArgResult<T>
 | 
				
			|||||||
	// FIELD: ERRORS
 | 
						// FIELD: ERRORS
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected List<String> errors = new ArrayList<String>();
 | 
						@Getter protected List<String> errors = new ArrayList<String>();
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public List<String> getErrors()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		return this.errors;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public void setErrors(List<String> val)
 | 
						public void setErrors(List<String> val)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
				
			|||||||
@ -22,7 +22,7 @@ public class AHAspect extends AHBase<Aspect>
 | 
				
			|||||||
			this.error.add("<b>No aspect called \"<p>"+str+"<b>\".");
 | 
								this.error.add("<b>No aspect called \"<p>"+str+"<b>\".");
 | 
				
			||||||
			if (Permission.USYS_ASPECT_LIST.has(sender, false))
 | 
								if (Permission.USYS_ASPECT_LIST.has(sender, false))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				this.error.add("<i>Use "+Txt.implodeCommaAndDot(AspectColl.i.ids(), "<h>%s", "<i>, ", " <i>or ", "<i>."));
 | 
									this.error.add("<i>Use "+Txt.implodeCommaAndDot(AspectColl.i.getIds(), "<h>%s", "<i>, ", " <i>or ", "<i>."));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ public class AHMultiverse extends AHBase<Multiverse>
 | 
				
			|||||||
			this.error.add("<b>No multiverse called \"<p>"+str+"<b>\".");
 | 
								this.error.add("<b>No multiverse called \"<p>"+str+"<b>\".");
 | 
				
			||||||
			if (Permission.USYS_MULTIVERSE_LIST.has(sender, false))
 | 
								if (Permission.USYS_MULTIVERSE_LIST.has(sender, false))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				this.error.add("<i>Use "+Txt.implodeCommaAndDot(MultiverseColl.i.ids(), "<h>%s", "<i>, ", " <i>or ", "<i>."));
 | 
									this.error.add("<i>Use "+Txt.implodeCommaAndDot(MultiverseColl.i.getIds(), "<h>%s", "<i>, ", " <i>or ", "<i>."));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,8 @@
 | 
				
			|||||||
package com.massivecraft.mcore4.cmd.req;
 | 
					package com.massivecraft.mcore4.cmd.req;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					import lombok.Setter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.command.CommandSender;
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.mcore4.cmd.MCommand;
 | 
					import com.massivecraft.mcore4.cmd.MCommand;
 | 
				
			||||||
@ -7,9 +10,7 @@ import com.massivecraft.mcore4.util.Perm;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public class ReqHasPerm implements IReq
 | 
					public class ReqHasPerm implements IReq
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	private String perm;
 | 
						@Getter @Setter private String perm;
 | 
				
			||||||
	public String getPerm() { return this.perm; }
 | 
					 | 
				
			||||||
	public void setPerm(String val) { this.perm = val; }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public ReqHasPerm(String perm)
 | 
						public ReqHasPerm(String perm)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,7 @@
 | 
				
			|||||||
package com.massivecraft.mcore4.event;
 | 
					package com.massivecraft.mcore4.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.Location;
 | 
					import org.bukkit.Location;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
@ -20,14 +22,11 @@ public class MCoreAfterPlayerRespawnEvent extends Event implements Runnable
 | 
				
			|||||||
	// FIELD
 | 
						// FIELD
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected Location deathLocation;
 | 
						@Getter protected final Location deathLocation;
 | 
				
			||||||
	public Location getDeathLocation() { return this.deathLocation; }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected PlayerRespawnEvent bukkitEvent;
 | 
						@Getter protected final PlayerRespawnEvent bukkitEvent;
 | 
				
			||||||
	public PlayerRespawnEvent getBukkitEvent() { return this.bukkitEvent; }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public Location getRespawnLocation() { return this.bukkitEvent.getRespawnLocation(); }
 | 
						public Location getRespawnLocation() { return this.bukkitEvent.getRespawnLocation(); }
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public Player getPlayer() { return this.bukkitEvent.getPlayer(); }
 | 
						public Player getPlayer() { return this.bukkitEvent.getPlayer(); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,7 @@
 | 
				
			|||||||
package com.massivecraft.mcore4.event;
 | 
					package com.massivecraft.mcore4.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.Location;
 | 
					import org.bukkit.Location;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
@ -21,8 +23,7 @@ public class MCoreAfterPlayerTeleportEvent extends Event implements Runnable
 | 
				
			|||||||
	// FIELD
 | 
						// FIELD
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected PlayerTeleportEvent bukkitEvent;
 | 
						@Getter protected final PlayerTeleportEvent bukkitEvent;
 | 
				
			||||||
	public PlayerTeleportEvent getBukkitEvent() { return this.bukkitEvent; }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public Location getFrom() { return this.bukkitEvent.getFrom(); }
 | 
						public Location getFrom() { return this.bukkitEvent.getFrom(); }
 | 
				
			||||||
	public Location getTo() { return this.bukkitEvent.getTo(); }
 | 
						public Location getTo() { return this.bukkitEvent.getTo(); }
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,8 @@ package com.massivecraft.mcore4.event;
 | 
				
			|||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.event.Event;
 | 
					import org.bukkit.event.Event;
 | 
				
			||||||
@ -31,20 +33,16 @@ public class MCorePlayerLeaveEvent extends Event implements Runnable
 | 
				
			|||||||
	// FIELD
 | 
						// FIELD
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected Player player;
 | 
						@Getter protected final Player player;
 | 
				
			||||||
	public Player getPlayer() { return this.player; }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected boolean preDisconnect;
 | 
						@Getter protected final boolean preDisconnect;
 | 
				
			||||||
	public boolean isPreDisconnect() { return this.preDisconnect; }
 | 
					 | 
				
			||||||
	public boolean isPostDisconnect() { return !this.isPreDisconnect(); }
 | 
						public boolean isPostDisconnect() { return !this.isPreDisconnect(); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected String caller;
 | 
						@Getter protected final String caller;
 | 
				
			||||||
	public String getCaller() { return this.caller; }
 | 
					 | 
				
			||||||
	public boolean isQuit() { return "quit".equals(caller); }
 | 
						public boolean isQuit() { return "quit".equals(caller); }
 | 
				
			||||||
	public boolean isKick() { return "kick".equals(caller); }
 | 
						public boolean isKick() { return "kick".equals(caller); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected String message;
 | 
						@Getter protected final String message;
 | 
				
			||||||
	public String getMessage() { return this.message; }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// CONSTRUCT
 | 
						// CONSTRUCT
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,7 @@
 | 
				
			|||||||
package com.massivecraft.mcore4.integration;
 | 
					package com.massivecraft.mcore4.integration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.event.EventHandler;
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
import org.bukkit.event.EventPriority;
 | 
					import org.bukkit.event.EventPriority;
 | 
				
			||||||
@ -20,8 +22,7 @@ public class Integration implements Listener
 | 
				
			|||||||
	protected MPlugin ourPlugin;
 | 
						protected MPlugin ourPlugin;
 | 
				
			||||||
	protected IntegrationFeatures features;
 | 
						protected IntegrationFeatures features;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected boolean active = false;
 | 
						@Getter protected boolean active = false;
 | 
				
			||||||
	public boolean active() { return this.active; }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// CONSTRUCT
 | 
						// CONSTRUCT
 | 
				
			||||||
 | 
				
			|||||||
@ -31,52 +31,52 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected final String name;
 | 
						protected final String name;
 | 
				
			||||||
	@Override public String name() { return this.name; }
 | 
						@Override public String getName() { return this.name; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected final String basename;
 | 
						protected final String basename;
 | 
				
			||||||
	@Override public String basename() { return this.basename; }
 | 
						@Override public String getBasename() { return this.basename; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected final String universe;
 | 
						protected final String universe;
 | 
				
			||||||
	@Override public String universe() { return this.universe; }
 | 
						@Override public String getUniverse() { return this.universe; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected final Class<E> entityClass;
 | 
						protected final Class<E> entityClass;
 | 
				
			||||||
	@Override public Class<E> entityClass() { return this.entityClass; }
 | 
						@Override public Class<E> getEntityClass() { return this.entityClass; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	protected final Class<L> idClass;
 | 
						protected final Class<L> idClass;
 | 
				
			||||||
	@Override public Class<L> idClass() { return this.idClass; }
 | 
						@Override public Class<L> getIdClass() { return this.idClass; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// SUPPORTING SYSTEM
 | 
						// SUPPORTING SYSTEM
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected MPlugin mplugin;
 | 
						protected MPlugin mplugin;
 | 
				
			||||||
	@Override public MPlugin mplugin() { return this.mplugin; }
 | 
						@Override public MPlugin getMplugin() { return this.mplugin; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected Db<?> db;
 | 
						protected Db<?> db;
 | 
				
			||||||
	@Override public Db<?> db() { return this.db; }
 | 
						@Override public Db<?> getDb() { return this.db; }
 | 
				
			||||||
	@Override public Driver<?> driver() { return this.db.driver(); }
 | 
						@Override public Driver<?> getDriver() { return this.db.getDriver(); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected IdStrategy<L, ?> idStrategy;
 | 
						protected IdStrategy<L, ?> idStrategy;
 | 
				
			||||||
	@Override public IdStrategy<L, ?> idStrategy() { return this.idStrategy; }
 | 
						@Override public IdStrategy<L, ?> getIdStrategy() { return this.idStrategy; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected StoreAdapter storeAdapter;
 | 
						protected StoreAdapter storeAdapter;
 | 
				
			||||||
	@Override public StoreAdapter storeAdapter() { return this.storeAdapter; }
 | 
						@Override public StoreAdapter getStoreAdapter() { return this.storeAdapter; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected Object collDriverObject;
 | 
						protected Object collDriverObject;
 | 
				
			||||||
	@Override public Object collDriverObject() { return this.collDriverObject; }
 | 
						@Override public Object getCollDriverObject() { return this.collDriverObject; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// STORAGE
 | 
						// STORAGE
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected Set<L> ids = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
 | 
						protected Set<L> ids = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
 | 
				
			||||||
	@Override public Collection<L> ids() { return Collections.unmodifiableCollection(this.ids); }
 | 
						@Override public Collection<L> getIds() { return Collections.unmodifiableCollection(this.ids); }
 | 
				
			||||||
	@Override public Collection<L> idsRemote() { return this.db().driver().ids(this); }
 | 
						@Override public Collection<L> getIdsRemote() { return this.getDb().getDriver().getIds(this); }
 | 
				
			||||||
	@Override public boolean containsEntity(E entity) { return this.entities.contains(entity); };
 | 
						@Override public boolean containsEntity(E entity) { return this.entities.contains(entity); };
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public boolean containsId(Object oid)
 | 
						public boolean containsId(Object oid)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		L id = this.idFix(oid);
 | 
							L id = this.fixId(oid);
 | 
				
			||||||
		if (id == null) return false;
 | 
							if (id == null) return false;
 | 
				
			||||||
		return this.ids.contains(id);
 | 
							return this.ids.contains(id);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -90,11 +90,11 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
	@Override public Collection<E> getAll(Predictate<E> where, Comparator<E> orderby, Integer limit, Integer offset) { return MStoreUtil.uglySQL(this.getAll(), where, orderby, limit, offset); }
 | 
						@Override public Collection<E> getAll(Predictate<E> where, Comparator<E> orderby, Integer limit, Integer offset) { return MStoreUtil.uglySQL(this.getAll(), where, orderby, limit, offset); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected Map<L, E> id2entity = new ConcurrentHashMap<L, E>();
 | 
						protected Map<L, E> id2entity = new ConcurrentHashMap<L, E>();
 | 
				
			||||||
	@Override public Map<L, E> id2entity() { return Collections.unmodifiableMap(this.id2entity); } 
 | 
						@Override public Map<L, E> getId2entity() { return Collections.unmodifiableMap(this.id2entity); } 
 | 
				
			||||||
	@Override 
 | 
						@Override 
 | 
				
			||||||
	public E get(Object oid) 
 | 
						public E get(Object oid) 
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.get(oid, this.creative());
 | 
							return this.get(oid, this.isCreative());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public E get(Object oid, boolean creative)
 | 
						public E get(Object oid, boolean creative)
 | 
				
			||||||
@ -103,7 +103,7 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	protected E get(Object oid, boolean creative, boolean noteChange)
 | 
						protected E get(Object oid, boolean creative, boolean noteChange)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		L id = this.idFix(oid);
 | 
							L id = this.fixId(oid);
 | 
				
			||||||
		if (id == null) return null;
 | 
							if (id == null) return null;
 | 
				
			||||||
		E ret = this.id2entity.get(id);
 | 
							E ret = this.id2entity.get(id);
 | 
				
			||||||
		if (ret != null) return ret;
 | 
							if (ret != null) return ret;
 | 
				
			||||||
@ -113,11 +113,11 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Get the id for this entity.
 | 
						// Get the id for this entity.
 | 
				
			||||||
	protected Map<E, L> entity2id = new ConcurrentHashMap<E, L>();
 | 
						protected Map<E, L> entity2id = new ConcurrentHashMap<E, L>();
 | 
				
			||||||
	@Override public Map<E, L> entity2id() { return Collections.unmodifiableMap(this.entity2id); }
 | 
						@Override public Map<E, L> getEntity2id() { return Collections.unmodifiableMap(this.entity2id); }
 | 
				
			||||||
	@Override public L id(E entity) { return this.entity2id.get(entity); }
 | 
						@Override public L getId(E entity) { return this.entity2id.get(entity); }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public L idFix(Object oid)
 | 
						public L fixId(Object oid)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (oid == null) return null;
 | 
							if (oid == null) return null;
 | 
				
			||||||
		if (oid.getClass() == this.idClass) return this.idClass.cast(oid);
 | 
							if (oid.getClass() == this.idClass) return this.idClass.cast(oid);
 | 
				
			||||||
@ -130,8 +130,8 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	protected boolean creative;
 | 
						protected boolean creative;
 | 
				
			||||||
	@Override public boolean creative() { return this.creative; }
 | 
						@Override public boolean isCreative() { return this.creative; }
 | 
				
			||||||
	@Override public void creative(boolean val) { this.creative = val; }
 | 
						@Override public void setCreative(boolean val) { this.creative = val; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// Should that instance be saved or not?
 | 
						// Should that instance be saved or not?
 | 
				
			||||||
	// If it is default it should not be saved.
 | 
						// If it is default it should not be saved.
 | 
				
			||||||
@ -152,7 +152,7 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Accessor.get(this.entityClass()).copy(ofrom, oto);
 | 
								Accessor.get(this.getEntityClass()).copy(ofrom, oto);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -213,17 +213,17 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		// Check entity
 | 
							// Check entity
 | 
				
			||||||
		if (entity == null) return null;
 | 
							if (entity == null) return null;
 | 
				
			||||||
		L id = this.id(entity);
 | 
							L id = this.getId(entity);
 | 
				
			||||||
		if (id != null) return id;
 | 
							if (id != null) return id;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// Check/Fix id
 | 
							// Check/Fix id
 | 
				
			||||||
		if (oid == null)
 | 
							if (oid == null)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			id = this.idStrategy().generate(this);
 | 
								id = this.getIdStrategy().generate(this);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			id = this.idFix(oid);
 | 
								id = this.fixId(oid);
 | 
				
			||||||
			if (id == null) return null;
 | 
								if (id == null) return null;
 | 
				
			||||||
			if (this.ids.contains(id)) return null;
 | 
								if (this.ids.contains(id)) return null;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -266,7 +266,7 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			id = this.idFix(o);
 | 
								id = this.fixId(o);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (id == null)
 | 
							if (id == null)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@ -339,7 +339,7 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
		this.clearIdentifiedChanges(id);
 | 
							this.clearIdentifiedChanges(id);
 | 
				
			||||||
		this.clearSynclog(id);
 | 
							this.clearSynclog(id);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		this.db().driver().delete(this, id);
 | 
							this.getDb().getDriver().delete(this, id);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
@ -351,17 +351,17 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
		E entity = this.id2entity.get(id);
 | 
							E entity = this.id2entity.get(id);
 | 
				
			||||||
		if (entity == null) return;
 | 
							if (entity == null) return;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		Object raw = this.storeAdapter().read(this, entity);
 | 
							Object raw = this.getStoreAdapter().read(this, entity);
 | 
				
			||||||
		this.lastRaw.put(id, raw);
 | 
							this.lastRaw.put(id, raw);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if (this.isDefault(entity))
 | 
							if (this.isDefault(entity))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			this.db.driver().delete(this, id);
 | 
								this.db.getDriver().delete(this, id);
 | 
				
			||||||
			this.lastDefault.add(id);
 | 
								this.lastDefault.add(id);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Long mtime = this.db.driver().save(this, id, raw);
 | 
								Long mtime = this.db.getDriver().save(this, id, raw);
 | 
				
			||||||
			if (mtime == null) return; // This fail should not happen often. We could handle it better though.
 | 
								if (mtime == null) return; // This fail should not happen often. We could handle it better though.
 | 
				
			||||||
			this.lastMtime.put(id, mtime);
 | 
								this.lastMtime.put(id, mtime);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -372,7 +372,7 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		this.clearIdentifiedChanges(id);
 | 
							this.clearIdentifiedChanges(id);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		Entry<?, Long> entry = this.db().driver().load(this, id);
 | 
							Entry<?, Long> entry = this.getDb().getDriver().load(this, id);
 | 
				
			||||||
		if (entry == null) return;
 | 
							if (entry == null) return;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		Object raw = entry.getKey();
 | 
							Object raw = entry.getKey();
 | 
				
			||||||
@ -383,10 +383,10 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		E entity = this.get(id, true, false);
 | 
							E entity = this.get(id, true, false);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		this.storeAdapter().write(this, raw, entity);
 | 
							this.getStoreAdapter().write(this, raw, entity);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// Store adapter again since result of a database read may be "different" from entity read.
 | 
							// Store adapter again since result of a database read may be "different" from entity read.
 | 
				
			||||||
		this.lastRaw.put(id, this.storeAdapter().read(this, entity)); 
 | 
							this.lastRaw.put(id, this.getStoreAdapter().read(this, entity)); 
 | 
				
			||||||
		this.lastMtime.put(id, mtime);
 | 
							this.lastMtime.put(id, mtime);
 | 
				
			||||||
		this.lastDefault.remove(id);
 | 
							this.lastDefault.remove(id);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -415,7 +415,7 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
		E localEntity = this.id2entity.get(id);
 | 
							E localEntity = this.id2entity.get(id);
 | 
				
			||||||
		if ( ! remoteMtimeSupplied)
 | 
							if ( ! remoteMtimeSupplied)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			remoteMtime = this.driver().mtime(this, id);
 | 
								remoteMtime = this.getDriver().getMtime(this, id);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		boolean existsLocal = (localEntity != null);
 | 
							boolean existsLocal = (localEntity != null);
 | 
				
			||||||
@ -500,7 +500,7 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		// Find all ids
 | 
							// Find all ids
 | 
				
			||||||
		Set<L> allids = new HashSet<L>(this.ids);
 | 
							Set<L> allids = new HashSet<L>(this.ids);
 | 
				
			||||||
		allids.addAll(this.driver().ids(this));
 | 
							allids.addAll(this.getDriver().getIds(this));
 | 
				
			||||||
		for (L id : allids)
 | 
							for (L id : allids)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			this.syncId(id);
 | 
								this.syncId(id);
 | 
				
			||||||
@ -511,7 +511,7 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
	public void findSuspects()
 | 
						public void findSuspects()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Get remote id and mtime snapshot
 | 
							// Get remote id and mtime snapshot
 | 
				
			||||||
		Map<L, Long> id2RemoteMtime = this.db().driver().id2mtime(this);
 | 
							Map<L, Long> id2RemoteMtime = this.getDb().getDriver().getId2mtime(this);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// Compile a list of all ids (both remote and local)
 | 
							// Compile a list of all ids (both remote and local)
 | 
				
			||||||
		Set<L> allids = new HashSet<L>();
 | 
							Set<L> allids = new HashSet<L>();
 | 
				
			||||||
@ -524,7 +524,7 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
			Long remoteMtime = id2RemoteMtime.get(id);
 | 
								Long remoteMtime = id2RemoteMtime.get(id);
 | 
				
			||||||
			ModificationState state = this.examineId(id, remoteMtime);
 | 
								ModificationState state = this.examineId(id, remoteMtime);
 | 
				
			||||||
			//mplugin.log("findSuspects: It seems", id, "has state", state);
 | 
								//mplugin.log("findSuspects: It seems", id, "has state", state);
 | 
				
			||||||
			if (state.modified())
 | 
								if (state.isModified())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				//System.out.println("It seems "+id+" has state "+state);
 | 
									//System.out.println("It seems "+id+" has state "+state);
 | 
				
			||||||
				this.changedIds.add(id);
 | 
									this.changedIds.add(id);
 | 
				
			||||||
@ -537,7 +537,7 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected Runnable tickTask;
 | 
						protected Runnable tickTask;
 | 
				
			||||||
	@Override public Runnable tickTask() { return this.tickTask; }
 | 
						@Override public Runnable getTickTask() { return this.tickTask; }
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void onTick()
 | 
						public void onTick()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -572,15 +572,15 @@ public class Coll<E, L> implements CollInterface<E, L>
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		this.mplugin = mplugin;
 | 
							this.mplugin = mplugin;
 | 
				
			||||||
		this.db = db;
 | 
							this.db = db;
 | 
				
			||||||
		this.storeAdapter = this.db.driver().getStoreAdapter();
 | 
							this.storeAdapter = this.db.getDriver().getStoreAdapter();
 | 
				
			||||||
		this.idStrategy = this.db.driver().getIdStrategy(idStrategyName);
 | 
							this.idStrategy = this.db.getDriver().getIdStrategy(idStrategyName);
 | 
				
			||||||
		if (this.idStrategy == null)
 | 
							if (this.idStrategy == null)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			throw new IllegalArgumentException("UNKNOWN: The id stragegy \""+idStrategyName+"\" is unknown to the driver \""+db.driver().name()+"\".");
 | 
								throw new IllegalArgumentException("UNKNOWN: The id stragegy \""+idStrategyName+"\" is unknown to the driver \""+db.getDriver().getName()+"\".");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (this.idStrategy.getLocalClass() != idClass)
 | 
							else if (this.idStrategy.getLocalClass() != idClass)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			throw new IllegalArgumentException("MISSMATCH: The id stragegy \""+idStrategyName+"\" for the driver \""+db.driver().name()+"\" uses \""+this.idStrategy.getLocalClass().getSimpleName()+"\" but the collection "+this.name+"/"+this.getClass().getSimpleName()+" uses \""+idClass.getSimpleName()+"\".");
 | 
								throw new IllegalArgumentException("MISSMATCH: The id stragegy \""+idStrategyName+"\" for the driver \""+db.getDriver().getName()+"\" uses \""+this.idStrategy.getLocalClass().getSimpleName()+"\" but the collection "+this.name+"/"+this.getClass().getSimpleName()+" uses \""+idClass.getSimpleName()+"\".");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		this.collDriverObject = db.getCollDriverObject(this);
 | 
							this.collDriverObject = db.getCollDriverObject(this);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
				
			|||||||
@ -14,28 +14,28 @@ public interface CollInterface<E, L>
 | 
				
			|||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// WHAT DO WE HANDLE?
 | 
						// WHAT DO WE HANDLE?
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	public String name();
 | 
						public String getName();
 | 
				
			||||||
	public String basename();
 | 
						public String getBasename();
 | 
				
			||||||
	public String universe();
 | 
						public String getUniverse();
 | 
				
			||||||
	public Class<E> entityClass();
 | 
						public Class<E> getEntityClass();
 | 
				
			||||||
	public Class<L> idClass();
 | 
						public Class<L> getIdClass();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// SUPPORTING SYSTEM
 | 
						// SUPPORTING SYSTEM
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	public MPlugin mplugin();
 | 
						public MPlugin getMplugin();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public Db<?> db();
 | 
						public Db<?> getDb();
 | 
				
			||||||
	public Driver<?> driver();
 | 
						public Driver<?> getDriver();
 | 
				
			||||||
	public StoreAdapter storeAdapter();
 | 
						public StoreAdapter getStoreAdapter();
 | 
				
			||||||
	public IdStrategy<L, ?> idStrategy();
 | 
						public IdStrategy<L, ?> getIdStrategy();
 | 
				
			||||||
	public Object collDriverObject();
 | 
						public Object getCollDriverObject();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// STORAGE
 | 
						// STORAGE
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	public Collection<L> ids();
 | 
						public Collection<L> getIds();
 | 
				
			||||||
	public Collection<L> idsRemote();
 | 
						public Collection<L> getIdsRemote();
 | 
				
			||||||
	public boolean containsId(Object oid);
 | 
						public boolean containsId(Object oid);
 | 
				
			||||||
	public boolean containsEntity(E entity);
 | 
						public boolean containsEntity(E entity);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -45,19 +45,19 @@ public interface CollInterface<E, L>
 | 
				
			|||||||
	public Collection<E> getAll(Predictate<E> where, Comparator<E> orderby, Integer limit);
 | 
						public Collection<E> getAll(Predictate<E> where, Comparator<E> orderby, Integer limit);
 | 
				
			||||||
	public Collection<E> getAll(Predictate<E> where, Comparator<E> orderby, Integer limit, Integer offset);
 | 
						public Collection<E> getAll(Predictate<E> where, Comparator<E> orderby, Integer limit, Integer offset);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public Map<L, E> id2entity();
 | 
						public Map<L, E> getId2entity();
 | 
				
			||||||
	public E get(Object oid);
 | 
						public E get(Object oid);
 | 
				
			||||||
	public E get(Object oid, boolean creative);
 | 
						public E get(Object oid, boolean creative);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public Map<E, L> entity2id();
 | 
						public Map<E, L> getEntity2id();
 | 
				
			||||||
	public L id(E entity);
 | 
						public L getId(E entity);
 | 
				
			||||||
	public L idFix(Object oid);
 | 
						public L fixId(Object oid);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// BAHAVIOR
 | 
						// BAHAVIOR
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	public boolean creative();
 | 
						public boolean isCreative();
 | 
				
			||||||
	public void creative(boolean val);
 | 
						public void setCreative(boolean val);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// A default entity will not be saved.
 | 
						// A default entity will not be saved.
 | 
				
			||||||
	// This is often used together with creative collections to save disc space.
 | 
						// This is often used together with creative collections to save disc space.
 | 
				
			||||||
@ -133,7 +133,7 @@ public interface CollInterface<E, L>
 | 
				
			|||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// The tickTask simply runs the onTick method.
 | 
						// The tickTask simply runs the onTick method.
 | 
				
			||||||
	public Runnable tickTask();
 | 
						public Runnable getTickTask();
 | 
				
			||||||
	public void onTick();
 | 
						public void onTick();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public Thread examineThread();
 | 
						public Thread examineThread();
 | 
				
			||||||
 | 
				
			|||||||
@ -13,8 +13,8 @@ public abstract class Colls<C extends Coll<E, L>, E, L>
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	protected Map<String, C> name2coll = new HashMap<String, C>();
 | 
						protected Map<String, C> name2coll = new HashMap<String, C>();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public abstract Aspect aspect();
 | 
						public abstract Aspect getAspect();
 | 
				
			||||||
	public abstract String basename();
 | 
						public abstract String getBasename();
 | 
				
			||||||
	public abstract C createColl(String name);
 | 
						public abstract C createColl(String name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
@ -29,7 +29,7 @@ public abstract class Colls<C extends Coll<E, L>, E, L>
 | 
				
			|||||||
	public List<C> getColls()
 | 
						public List<C> getColls()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		List<C> ret = new ArrayList<C>(); 
 | 
							List<C> ret = new ArrayList<C>(); 
 | 
				
			||||||
		Aspect a = this.aspect();
 | 
							Aspect a = this.getAspect();
 | 
				
			||||||
		Multiverse m = a.multiverse();
 | 
							Multiverse m = a.multiverse();
 | 
				
			||||||
		for (String universe : m.getUniverses())
 | 
							for (String universe : m.getUniverses())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@ -44,14 +44,14 @@ public abstract class Colls<C extends Coll<E, L>, E, L>
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	public String collnameForUniverse(String universe)
 | 
						public String collnameForUniverse(String universe)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.basename() + "@" + universe;
 | 
							return this.getBasename() + "@" + universe;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public String universeFromWorldName(String worldName)
 | 
						public String universeFromWorldName(String worldName)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (worldName == null) throw new IllegalArgumentException("worldName may not be null.");
 | 
							if (worldName == null) throw new IllegalArgumentException("worldName may not be null.");
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		return this.aspect().multiverse().getUniverseForWorldName(worldName);
 | 
							return this.getAspect().multiverse().getUniverseForWorldName(worldName);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
				
			|||||||
@ -4,13 +4,13 @@ import java.util.Set;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public interface Db<R>
 | 
					public interface Db<R>
 | 
				
			||||||
{	
 | 
					{	
 | 
				
			||||||
	public String name();
 | 
						public String getName();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public boolean drop();
 | 
						public boolean drop();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public Set<String> collnames();
 | 
						public Set<String> getCollnames();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public Driver<R> driver();
 | 
						public Driver<R> getDriver();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public Object getCollDriverObject(Coll<?, ?> coll);
 | 
						public Object getCollDriverObject(Coll<?, ?> coll);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -5,8 +5,8 @@ import java.util.Set;
 | 
				
			|||||||
public abstract class DbAbstract<R> implements Db<R>
 | 
					public abstract class DbAbstract<R> implements Db<R>
 | 
				
			||||||
{	
 | 
					{	
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Set<String> collnames()
 | 
						public Set<String> getCollnames()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return this.driver().collnames(this);
 | 
							return this.getDriver().getCollnames(this);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -14,7 +14,7 @@ public class DbGson extends DbAbstract<JsonElement>
 | 
				
			|||||||
	public File dir;
 | 
						public File dir;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected DriverGson driver;
 | 
						protected DriverGson driver;
 | 
				
			||||||
	@Override public DriverGson driver() { return driver; }
 | 
						@Override public DriverGson getDriver() { return driver; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// CONSTRUCTORS
 | 
						// CONSTRUCTORS
 | 
				
			||||||
@ -31,7 +31,7 @@ public class DbGson extends DbAbstract<JsonElement>
 | 
				
			|||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public String name()
 | 
						public String getName()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return dir.getAbsolutePath();
 | 
							return dir.getAbsolutePath();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -52,6 +52,6 @@ public class DbGson extends DbAbstract<JsonElement>
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Object getCollDriverObject(Coll<?, ?> coll)
 | 
						public Object getCollDriverObject(Coll<?, ?> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return new File(dir, coll.name());
 | 
							return new File(dir, coll.getName());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@ public class DbMongo extends DbAbstract<BasicDBObject>
 | 
				
			|||||||
	public DB db;
 | 
						public DB db;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected DriverMongo driver;
 | 
						protected DriverMongo driver;
 | 
				
			||||||
	@Override public DriverMongo driver() { return driver; }
 | 
						@Override public DriverMongo getDriver() { return driver; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// CONSTRUCTORS
 | 
						// CONSTRUCTORS
 | 
				
			||||||
@ -29,7 +29,7 @@ public class DbMongo extends DbAbstract<BasicDBObject>
 | 
				
			|||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public String name()
 | 
						public String getName()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return db.getName();
 | 
							return db.getName();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -51,6 +51,6 @@ public class DbMongo extends DbAbstract<BasicDBObject>
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Object getCollDriverObject(Coll<?, ?> coll)
 | 
						public Object getCollDriverObject(Coll<?, ?> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return db.getCollection(coll.name());
 | 
							return db.getCollection(coll.getName());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@ import com.massivecraft.mcore4.store.storeadapter.StoreAdapter;
 | 
				
			|||||||
public interface Driver<R>
 | 
					public interface Driver<R>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// Returns the name of the driver.
 | 
						// Returns the name of the driver.
 | 
				
			||||||
	public String name();
 | 
						public String getName();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// This is the rawdata format this driver works with.
 | 
						// This is the rawdata format this driver works with.
 | 
				
			||||||
	// Could for example be JsonElement or DBObject
 | 
						// Could for example be JsonElement or DBObject
 | 
				
			||||||
@ -25,22 +25,22 @@ public interface Driver<R>
 | 
				
			|||||||
	public StoreAdapter getStoreAdapter();
 | 
						public StoreAdapter getStoreAdapter();
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// Get a database instance from the driver
 | 
						// Get a database instance from the driver
 | 
				
			||||||
	public Db<R> db(String uri);
 | 
						public Db<R> getDb(String uri);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// What collections are in the database?		
 | 
						// What collections are in the database?		
 | 
				
			||||||
	public Set<String> collnames(Db<?> db);
 | 
						public Set<String> getCollnames(Db<?> db);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// Is id X in the collection?
 | 
						// Is id X in the collection?
 | 
				
			||||||
	public <L> boolean containsId(Coll<?, L> coll, L id);
 | 
						public <L> boolean containsId(Coll<?, L> coll, L id);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// When was X last altered?
 | 
						// When was X last altered?
 | 
				
			||||||
	public <L> Long mtime(Coll<?, L> coll, L id);
 | 
						public <L> Long getMtime(Coll<?, L> coll, L id);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	// What ids are in the collection?
 | 
						// What ids are in the collection?
 | 
				
			||||||
	public <L> Collection<L> ids(Coll<?, L> coll);
 | 
						public <L> Collection<L> getIds(Coll<?, L> coll);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// Return a map of all ids with their corresponding mtimes
 | 
						// Return a map of all ids with their corresponding mtimes
 | 
				
			||||||
	public <L> Map<L, Long> id2mtime(Coll<?, L> coll);
 | 
						public <L> Map<L, Long> getId2mtime(Coll<?, L> coll);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// Load the raw data for X. The second part of the entry is the remote mtime at the load.
 | 
						// Load the raw data for X. The second part of the entry is the remote mtime at the load.
 | 
				
			||||||
	public <L> Entry<R, Long> load(Coll<?, L> coll, L id);
 | 
						public <L> Entry<R, Long> load(Coll<?, L> coll, L id);
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@ public abstract class DriverAbstract<R> implements Driver<R>
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected String name;
 | 
						protected String name;
 | 
				
			||||||
	@Override public String name() { return this.name; }
 | 
						@Override public String getName() { return this.name; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	protected Map<String, IdStrategy<?, ?>> idStrategies = new HashMap<String, IdStrategy<?, ?>>();
 | 
						protected Map<String, IdStrategy<?, ?>> idStrategies = new HashMap<String, IdStrategy<?, ?>>();
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
 | 
				
			|||||||
@ -37,7 +37,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Db<JsonElement> db(String uri)
 | 
						public Db<JsonElement> getDb(String uri)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// "gson://" is 7 chars
 | 
							// "gson://" is 7 chars
 | 
				
			||||||
		File folder = new File(uri.substring(7));
 | 
							File folder = new File(uri.substring(7));
 | 
				
			||||||
@ -46,7 +46,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Set<String> collnames(Db<?> db)
 | 
						public Set<String> getCollnames(Db<?> db)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Set<String> ret = new LinkedHashSet<String>();
 | 
							Set<String> ret = new LinkedHashSet<String>();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -66,7 +66,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <L> Long mtime(Coll<?, L> coll, L id)
 | 
						public <L> Long getMtime(Coll<?, L> coll, L id)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		File file = fileFromId(coll, id);
 | 
							File file = fileFromId(coll, id);
 | 
				
			||||||
		if ( ! file.isFile()) return null;
 | 
							if ( ! file.isFile()) return null;
 | 
				
			||||||
@ -74,7 +74,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <L> Collection<L> ids(Coll<?, L> coll)
 | 
						public <L> Collection<L> getIds(Coll<?, L> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		List<L> ret = new ArrayList<L>();
 | 
							List<L> ret = new ArrayList<L>();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -85,7 +85,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			// Then convert them to what they should be
 | 
								// Then convert them to what they should be
 | 
				
			||||||
			String remoteId = idFromFile(file);
 | 
								String remoteId = idFromFile(file);
 | 
				
			||||||
			L localId = coll.idStrategy().remoteToLocal(remoteId);
 | 
								L localId = coll.getIdStrategy().remoteToLocal(remoteId);
 | 
				
			||||||
			ret.add(localId);
 | 
								ret.add(localId);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -93,7 +93,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <L> Map<L, Long> id2mtime(Coll<?, L> coll)
 | 
						public <L> Map<L, Long> getId2mtime(Coll<?, L> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Map<L, Long> ret = new HashMap<L, Long>();
 | 
							Map<L, Long> ret = new HashMap<L, Long>();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -104,7 +104,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			// Then convert them to what they should be
 | 
								// Then convert them to what they should be
 | 
				
			||||||
			String remoteId = idFromFile(file);
 | 
								String remoteId = idFromFile(file);
 | 
				
			||||||
			L localId = coll.idStrategy().remoteToLocal(remoteId);
 | 
								L localId = coll.getIdStrategy().remoteToLocal(remoteId);
 | 
				
			||||||
			ret.put(localId, file.lastModified());
 | 
								ret.put(localId, file.lastModified());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -128,7 +128,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
 | 
				
			|||||||
	public <L> Long save(Coll<?, L> coll, L id, Object rawData)
 | 
						public <L> Long save(Coll<?, L> coll, L id, Object rawData)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		File file = fileFromId(coll, id);
 | 
							File file = fileFromId(coll, id);
 | 
				
			||||||
		String content = coll.mplugin().gson.toJson((JsonElement)rawData);
 | 
							String content = coll.getMplugin().gson.toJson((JsonElement)rawData);
 | 
				
			||||||
		if (DiscUtil.writeCatch(file, content) == false) return null;
 | 
							if (DiscUtil.writeCatch(file, content) == false) return null;
 | 
				
			||||||
		return file.lastModified();
 | 
							return file.lastModified();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -146,7 +146,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	protected static File getCollDir(Coll<?, ?> coll)
 | 
						protected static File getCollDir(Coll<?, ?> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return (File) coll.collDriverObject();
 | 
							return (File) coll.getCollDriverObject();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected static String idFromFile(File file)
 | 
						protected static String idFromFile(File file)
 | 
				
			||||||
@ -159,7 +159,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
 | 
				
			|||||||
	protected static <L> File fileFromId(Coll<?, L> coll, L id)
 | 
						protected static <L> File fileFromId(Coll<?, L> coll, L id)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		File collDir = getCollDir(coll);
 | 
							File collDir = getCollDir(coll);
 | 
				
			||||||
		String idString = (String)coll.idStrategy().localToRemote(id);
 | 
							String idString = (String)coll.getIdStrategy().localToRemote(id);
 | 
				
			||||||
		File idFile = new File(collDir, idString+DOTJSON);
 | 
							File idFile = new File(collDir, idString+DOTJSON);
 | 
				
			||||||
		return idFile;
 | 
							return idFile;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -47,14 +47,14 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Db<BasicDBObject> db(String uri)
 | 
						public Db<BasicDBObject> getDb(String uri)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		DB db = this.getDbInner(uri);
 | 
							DB db = this.getDbInner(uri);
 | 
				
			||||||
		return new DbMongo(this, db);
 | 
							return new DbMongo(this, db);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Set<String> collnames(Db<?> db)
 | 
						public Set<String> getCollnames(Db<?> db)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return ((DbMongo)db).db.getCollectionNames();
 | 
							return ((DbMongo)db).db.getCollectionNames();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -63,22 +63,22 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
 | 
				
			|||||||
	public <L> boolean containsId(Coll<?, L> coll, L id)
 | 
						public <L> boolean containsId(Coll<?, L> coll, L id)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		DBCollection dbcoll = fixColl(coll);
 | 
							DBCollection dbcoll = fixColl(coll);
 | 
				
			||||||
		DBCursor cursor = dbcoll.find(new BasicDBObject(ID_FIELD, coll.idStrategy().localToRemote(id)));
 | 
							DBCursor cursor = dbcoll.find(new BasicDBObject(ID_FIELD, coll.getIdStrategy().localToRemote(id)));
 | 
				
			||||||
		return cursor.count() != 0;
 | 
							return cursor.count() != 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <L> Long mtime(Coll<?, L> coll, L id)
 | 
						public <L> Long getMtime(Coll<?, L> coll, L id)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		DBCollection dbcoll = fixColl(coll);
 | 
							DBCollection dbcoll = fixColl(coll);
 | 
				
			||||||
		BasicDBObject found = (BasicDBObject)dbcoll.findOne(new BasicDBObject(ID_FIELD, coll.idStrategy().localToRemote(id)), dboKeysMtime);
 | 
							BasicDBObject found = (BasicDBObject)dbcoll.findOne(new BasicDBObject(ID_FIELD, coll.getIdStrategy().localToRemote(id)), dboKeysMtime);
 | 
				
			||||||
		if (found == null) return null;
 | 
							if (found == null) return null;
 | 
				
			||||||
		if ( ! found.containsField(MTIME_FIELD)) return null; // This should not happen! But better to ignore than crash?
 | 
							if ( ! found.containsField(MTIME_FIELD)) return null; // This should not happen! But better to ignore than crash?
 | 
				
			||||||
		return found.getLong(MTIME_FIELD);
 | 
							return found.getLong(MTIME_FIELD);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <L> Collection<L> ids(Coll<?, L> coll)
 | 
						public <L> Collection<L> getIds(Coll<?, L> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		List<L> ret = null;
 | 
							List<L> ret = null;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -91,7 +91,7 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
 | 
				
			|||||||
			while(cursor.hasNext())
 | 
								while(cursor.hasNext())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Object remoteId = cursor.next().get(ID_FIELD);
 | 
									Object remoteId = cursor.next().get(ID_FIELD);
 | 
				
			||||||
				L localId = coll.idStrategy().remoteToLocal(remoteId);
 | 
									L localId = coll.getIdStrategy().remoteToLocal(remoteId);
 | 
				
			||||||
				ret.add(localId);
 | 
									ret.add(localId);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -104,7 +104,7 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <L> Map<L, Long> id2mtime(Coll<?, L> coll)
 | 
						public <L> Map<L, Long> getId2mtime(Coll<?, L> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Map<L, Long> ret = null;
 | 
							Map<L, Long> ret = null;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -118,7 +118,7 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				BasicDBObject raw = (BasicDBObject)cursor.next();
 | 
									BasicDBObject raw = (BasicDBObject)cursor.next();
 | 
				
			||||||
				Object remoteId = raw.get(ID_FIELD);
 | 
									Object remoteId = raw.get(ID_FIELD);
 | 
				
			||||||
				L localId = coll.idStrategy().remoteToLocal(remoteId);
 | 
									L localId = coll.getIdStrategy().remoteToLocal(remoteId);
 | 
				
			||||||
				if ( ! raw.containsField(MTIME_FIELD)) continue; // This should not happen! But better to ignore than crash?
 | 
									if ( ! raw.containsField(MTIME_FIELD)) continue; // This should not happen! But better to ignore than crash?
 | 
				
			||||||
				Long mtime = raw.getLong(MTIME_FIELD);
 | 
									Long mtime = raw.getLong(MTIME_FIELD);
 | 
				
			||||||
				ret.put(localId, mtime);
 | 
									ret.put(localId, mtime);
 | 
				
			||||||
@ -136,7 +136,7 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
 | 
				
			|||||||
	public <L> Entry<BasicDBObject, Long> load(Coll<?, L> coll, L id)
 | 
						public <L> Entry<BasicDBObject, Long> load(Coll<?, L> coll, L id)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		DBCollection dbcoll = fixColl(coll);
 | 
							DBCollection dbcoll = fixColl(coll);
 | 
				
			||||||
		BasicDBObject raw = (BasicDBObject)dbcoll.findOne(new BasicDBObject(ID_FIELD, coll.idStrategy().localToRemote(id)));
 | 
							BasicDBObject raw = (BasicDBObject)dbcoll.findOne(new BasicDBObject(ID_FIELD, coll.getIdStrategy().localToRemote(id)));
 | 
				
			||||||
		if (raw == null) return null;
 | 
							if (raw == null) return null;
 | 
				
			||||||
		Long mtime = (Long) raw.removeField(MTIME_FIELD);
 | 
							Long mtime = (Long) raw.removeField(MTIME_FIELD);
 | 
				
			||||||
		return new SimpleEntry<BasicDBObject, Long>(raw, mtime);
 | 
							return new SimpleEntry<BasicDBObject, Long>(raw, mtime);
 | 
				
			||||||
@ -153,7 +153,7 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
 | 
				
			|||||||
		Long mtime = System.currentTimeMillis();
 | 
							Long mtime = System.currentTimeMillis();
 | 
				
			||||||
		data.put(MTIME_FIELD, mtime);
 | 
							data.put(MTIME_FIELD, mtime);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		Object remoteId = coll.idStrategy().localToRemote(id);		
 | 
							Object remoteId = coll.getIdStrategy().localToRemote(id);		
 | 
				
			||||||
		dbcoll.update(new BasicDBObject(ID_FIELD, remoteId), data, true, false);
 | 
							dbcoll.update(new BasicDBObject(ID_FIELD, remoteId), data, true, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return mtime;
 | 
							return mtime;
 | 
				
			||||||
@ -162,7 +162,7 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public <L> void delete(Coll<?, L> coll, L id)
 | 
						public <L> void delete(Coll<?, L> coll, L id)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		fixColl(coll).remove(new BasicDBObject(ID_FIELD, coll.idStrategy().localToRemote(id)));
 | 
							fixColl(coll).remove(new BasicDBObject(ID_FIELD, coll.getIdStrategy().localToRemote(id)));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//----------------------------------------------//
 | 
						//----------------------------------------------//
 | 
				
			||||||
@ -171,7 +171,7 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	protected static DBCollection fixColl(Coll<?, ?> coll)
 | 
						protected static DBCollection fixColl(Coll<?, ?> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return (DBCollection) coll.collDriverObject();
 | 
							return (DBCollection) coll.getCollDriverObject();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected DB getDbInner(String uri)
 | 
						protected DB getDbInner(String uri)
 | 
				
			||||||
 | 
				
			|||||||
@ -28,7 +28,7 @@ public abstract class Entity<E extends Entity<E, L>, L>
 | 
				
			|||||||
		Coll<E, L> coll = this.getColl();
 | 
							Coll<E, L> coll = this.getColl();
 | 
				
			||||||
		if (coll == null) return null;
 | 
							if (coll == null) return null;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		return coll.universe();
 | 
							return coll.getUniverse();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public L attach(Coll<E, L> coll)
 | 
						public L attach(Coll<E, L> coll)
 | 
				
			||||||
@ -61,7 +61,7 @@ public abstract class Entity<E extends Entity<E, L>, L>
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		Coll<E, L> coll = this.getColl();
 | 
							Coll<E, L> coll = this.getColl();
 | 
				
			||||||
		if (coll == null) return null;
 | 
							if (coll == null) return null;
 | 
				
			||||||
		return coll.id(this.getThis());
 | 
							return coll.getId(this.getThis());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public void changed()
 | 
						public void changed()
 | 
				
			||||||
@ -100,7 +100,7 @@ public abstract class Entity<E extends Entity<E, L>, L>
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		Gson gson = MCore.gson;
 | 
							Gson gson = MCore.gson;
 | 
				
			||||||
		Coll<E, L> coll = this.getColl();
 | 
							Coll<E, L> coll = this.getColl();
 | 
				
			||||||
		if (coll != null) gson = coll.mplugin().gson;
 | 
							if (coll != null) gson = coll.getMplugin().gson;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		return this.getClazz().getSimpleName()+gson.toJson(this, this.getClazz());
 | 
							return this.getClazz().getSimpleName()+gson.toJson(this, this.getClazz());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ public class ExamineThread<E, L> extends Thread
 | 
				
			|||||||
	public ExamineThread(Coll<E, L> coll)
 | 
						public ExamineThread(Coll<E, L> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.coll = coll;
 | 
							this.coll = coll;
 | 
				
			||||||
		this.setName("ExamineThread for "+coll.name());
 | 
							this.setName("ExamineThread for "+coll.getName());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// TODO: Implement logging and/or auto adjusting system for how long the sleep should be?
 | 
						// TODO: Implement logging and/or auto adjusting system for how long the sleep should be?
 | 
				
			||||||
 | 
				
			|||||||
@ -13,8 +13,8 @@ public class MStore
 | 
				
			|||||||
	protected static Map<String, Driver<?>> drivers = new HashMap<String, Driver<?>>();
 | 
						protected static Map<String, Driver<?>> drivers = new HashMap<String, Driver<?>>();
 | 
				
			||||||
	public static boolean registerDriver(Driver<?> driver)
 | 
						public static boolean registerDriver(Driver<?> driver)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (drivers.containsKey(driver.name())) return false;
 | 
							if (drivers.containsKey(driver.getName())) return false;
 | 
				
			||||||
		drivers.put(driver.name(), driver);
 | 
							drivers.put(driver.getName(), driver);
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	public static Driver<?> getDriver(String id)
 | 
						public static Driver<?> getDriver(String id)
 | 
				
			||||||
@ -42,7 +42,7 @@ public class MStore
 | 
				
			|||||||
		String scheme = uri.getScheme();
 | 
							String scheme = uri.getScheme();
 | 
				
			||||||
		Driver<?> driver = getDriver(scheme);
 | 
							Driver<?> driver = getDriver(scheme);
 | 
				
			||||||
		if (driver == null) return null;
 | 
							if (driver == null) return null;
 | 
				
			||||||
		return driver.db(uri.toString());
 | 
							return driver.getDb(uri.toString());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	static
 | 
						static
 | 
				
			||||||
 | 
				
			|||||||
@ -13,11 +13,11 @@ public enum ModificationState
 | 
				
			|||||||
	;
 | 
						;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	private final boolean modified;
 | 
						private final boolean modified;
 | 
				
			||||||
	public boolean modified() { return this.modified; }
 | 
						public boolean isModified() { return this.modified; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	private final boolean local;
 | 
						private final boolean local;
 | 
				
			||||||
	public boolean local() { return this.local; }
 | 
						public boolean isLocal() { return this.local; }
 | 
				
			||||||
	public boolean remote() { return this.local == false; }
 | 
						public boolean isRemote() { return this.local == false; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	private ModificationState(boolean modified, boolean local)
 | 
						private ModificationState(boolean modified, boolean local)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
				
			|||||||
@ -67,7 +67,7 @@ public class PlayerColl<E extends PlayerEntity<E>> extends Coll<E, String>
 | 
				
			|||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public String idFix(Object oid)
 | 
						public String fixId(Object oid)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (oid == null) return null;
 | 
							if (oid == null) return null;
 | 
				
			||||||
		String ret = MUtil.extract(String.class, "playerName", oid);
 | 
							String ret = MUtil.extract(String.class, "playerName", oid);
 | 
				
			||||||
@ -105,8 +105,8 @@ public class PlayerColl<E extends PlayerEntity<E>> extends Coll<E, String>
 | 
				
			|||||||
	protected Collection<Collection<String>> forgeAltColls()
 | 
						protected Collection<Collection<String>> forgeAltColls()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Collection<Collection<String>> ret = new ArrayList<Collection<String>>();
 | 
							Collection<Collection<String>> ret = new ArrayList<Collection<String>>();
 | 
				
			||||||
		ret.add(this.ids());
 | 
							ret.add(this.getIds());
 | 
				
			||||||
		if (this.creative()) ret.add(PlayerUtil.getAllVisitorNames());
 | 
							if (this.isCreative()) ret.add(PlayerUtil.getAllVisitorNames());
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,7 @@ import java.util.Collection;
 | 
				
			|||||||
public abstract class EntityAccessorAbstract implements EntityAccessor
 | 
					public abstract class EntityAccessorAbstract implements EntityAccessor
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	protected final Class<?> clazz;
 | 
						protected final Class<?> clazz;
 | 
				
			||||||
	public Class<?> clazz() { return this.clazz; }
 | 
						public Class<?> getClazz() { return this.clazz; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public EntityAccessorAbstract(Class<?> clazz)
 | 
						public EntityAccessorAbstract(Class<?> clazz)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
				
			|||||||
@ -7,8 +7,8 @@ import java.util.Map;
 | 
				
			|||||||
public class EntityAccessorPerProperty extends EntityAccessorAbstract
 | 
					public class EntityAccessorPerProperty extends EntityAccessorAbstract
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	protected Map<String, PropertyAccessor> propertyAccessors;
 | 
						protected Map<String, PropertyAccessor> propertyAccessors;
 | 
				
			||||||
	public Map<String, PropertyAccessor> propertyAccessors() {	return this.propertyAccessors; }
 | 
						public Map<String, PropertyAccessor> getPropertyAccessors() {	return this.propertyAccessors; }
 | 
				
			||||||
	public PropertyAccessor propertyAccessor(String name)
 | 
						public PropertyAccessor getPropertyAccessor(String name)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		PropertyAccessor ret = this.propertyAccessors.get(name);
 | 
							PropertyAccessor ret = this.propertyAccessors.get(name);
 | 
				
			||||||
		if (ret == null)
 | 
							if (ret == null)
 | 
				
			||||||
@ -17,7 +17,7 @@ public class EntityAccessorPerProperty extends EntityAccessorAbstract
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	public void propertyAccessor(String name, PropertyAccessor val)
 | 
						public void setPropertyAccessor(String name, PropertyAccessor val)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		this.propertyAccessors.put(name, val);
 | 
							this.propertyAccessors.put(name, val);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -66,14 +66,14 @@ public class EntityAccessorPerProperty extends EntityAccessorAbstract
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void set(Object entity, String property, Object val)
 | 
						public void set(Object entity, String property, Object val)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		PropertyAccessor pa = this.propertyAccessor(property);
 | 
							PropertyAccessor pa = this.getPropertyAccessor(property);
 | 
				
			||||||
		pa.set(entity, val);
 | 
							pa.set(entity, val);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Object get(Object entity, String property)
 | 
						public Object get(Object entity, String property)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		PropertyAccessor pa = this.propertyAccessor(property);
 | 
							PropertyAccessor pa = this.getPropertyAccessor(property);
 | 
				
			||||||
		return pa.get(entity);
 | 
							return pa.get(entity);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@ public abstract class IdStrategyAbstract<L, R> implements IdStrategy<L, R>
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public L generate(CollInterface<?, L> coll)
 | 
						public L generate(CollInterface<?, L> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Collection<L> alreadyInUse = coll.ids();
 | 
							Collection<L> alreadyInUse = coll.getIds();
 | 
				
			||||||
		L ret = null;
 | 
							L ret = null;
 | 
				
			||||||
		do
 | 
							do
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
				
			|||||||
@ -61,8 +61,8 @@ public class IdStrategyAiGson extends IdStrategyAbstract<String, String>
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	protected File getAiFile(CollInterface<?, String> coll)
 | 
						protected File getAiFile(CollInterface<?, String> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		DbGson cdb = (DbGson)coll.db();
 | 
							DbGson cdb = (DbGson)coll.getDb();
 | 
				
			||||||
		return new File(cdb.dir, coll.name() + "_ai.txt");
 | 
							return new File(cdb.dir, coll.getName() + "_ai.txt");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected boolean ensureFileExists(File file)
 | 
						protected boolean ensureFileExists(File file)
 | 
				
			||||||
 | 
				
			|||||||
@ -39,8 +39,8 @@ public class IdStrategyAiMongo extends IdStrategyAbstract<String, String>
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public String generateAttempt(CollInterface<?, String> coll)
 | 
						public String generateAttempt(CollInterface<?, String> coll)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		String sequenseName = coll.name();
 | 
							String sequenseName = coll.getName();
 | 
				
			||||||
		DBCollection sequenseCollection = ((DbMongo)coll.db()).db.getCollection(SEC);
 | 
							DBCollection sequenseCollection = ((DbMongo)coll.getDb()).db.getCollection(SEC);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// this object represents your "query", its analogous to a WHERE clause in SQL
 | 
							// this object represents your "query", its analogous to a WHERE clause in SQL
 | 
				
			||||||
		DBObject query = new BasicDBObject();
 | 
							DBObject query = new BasicDBObject();
 | 
				
			||||||
 | 
				
			|||||||
@ -13,13 +13,13 @@ public class StoreAdapterGson extends StoreAdapterAbstract
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Object read(Coll<?, ?> coll, Object entity)
 | 
						public Object read(Coll<?, ?> coll, Object entity)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return coll.mplugin().gson.toJsonTree(entity, coll.entityClass());
 | 
							return coll.getMplugin().gson.toJsonTree(entity, coll.getEntityClass());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public void write(Coll<?, ?> coll, Object raw, Object entity)
 | 
						public void write(Coll<?, ?> coll, Object raw, Object entity)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Object temp = coll.mplugin().gson.fromJson((JsonElement)raw, coll.entityClass());
 | 
							Object temp = coll.getMplugin().gson.fromJson((JsonElement)raw, coll.getEntityClass());
 | 
				
			||||||
		coll.copy(temp, entity);
 | 
							coll.copy(temp, entity);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,9 @@ import java.util.ArrayList;
 | 
				
			|||||||
import java.util.Arrays;
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.Collection;
 | 
					import java.util.Collection;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Getter;
 | 
				
			||||||
 | 
					import lombok.Setter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.massivecraft.mcore4.MCore;
 | 
					import com.massivecraft.mcore4.MCore;
 | 
				
			||||||
import com.massivecraft.mcore4.store.Entity;
 | 
					import com.massivecraft.mcore4.store.Entity;
 | 
				
			||||||
import com.massivecraft.mcore4.xlib.gson.annotations.SerializedName;
 | 
					import com.massivecraft.mcore4.xlib.gson.annotations.SerializedName;
 | 
				
			||||||
@ -29,23 +32,19 @@ public class Aspect extends Entity<Aspect, String>
 | 
				
			|||||||
	// TRANSIENT FIELDS
 | 
						// TRANSIENT FIELDS
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected transient boolean registered = false;
 | 
						@Getter protected transient boolean registered = false;
 | 
				
			||||||
	public boolean registered() { return this.registered; }
 | 
					 | 
				
			||||||
	public void register() { this.registered = true; }
 | 
						public void register() { this.registered = true; }
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	protected transient Collection<String> desc = new ArrayList<String>();
 | 
						@Getter protected transient Collection<String> desc = new ArrayList<String>();
 | 
				
			||||||
	public Collection<String> desc() { return this.desc; }
 | 
						public void setDesc(Collection<String> val) { this.desc = val; }
 | 
				
			||||||
	public void desc(Collection<String> val) { this.desc = val; }
 | 
						public void setDesc(String... val) { this.desc = Arrays.asList(val); }
 | 
				
			||||||
	public void desc(String... val) { this.desc = Arrays.asList(val); }
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// STORED FIELDS
 | 
						// STORED FIELDS
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	@SerializedName("mid")
 | 
						@SerializedName("mid")
 | 
				
			||||||
	protected String multiverseId;
 | 
						@Getter @Setter protected String multiverseId;
 | 
				
			||||||
	public String multiverseId() { return this.multiverseId; }
 | 
					 | 
				
			||||||
	public void multiverseId(String val) { this.multiverseId = val; }
 | 
					 | 
				
			||||||
	public Multiverse multiverse()
 | 
						public Multiverse multiverse()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Multiverse ret = MultiverseColl.i.get(this.multiverseId);
 | 
							Multiverse ret = MultiverseColl.i.get(this.multiverseId);
 | 
				
			||||||
 | 
				
			|||||||
@ -28,7 +28,7 @@ public class AspectColl extends Coll<Aspect, String>
 | 
				
			|||||||
		List<Aspect> ret = new ArrayList<Aspect>();
 | 
							List<Aspect> ret = new ArrayList<Aspect>();
 | 
				
			||||||
		for (Aspect aspect : this.getAll())
 | 
							for (Aspect aspect : this.getAll())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if(aspect.registered() == false) continue;
 | 
								if(aspect.isRegistered() == false) continue;
 | 
				
			||||||
			ret.add(aspect);
 | 
								ret.add(aspect);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
@ -39,7 +39,7 @@ public class AspectColl extends Coll<Aspect, String>
 | 
				
			|||||||
		List<Aspect> ret = new ArrayList<Aspect>();
 | 
							List<Aspect> ret = new ArrayList<Aspect>();
 | 
				
			||||||
		for (Aspect aspect : this.getAll())
 | 
							for (Aspect aspect : this.getAll())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if(aspect.registered() == false) continue;
 | 
								if(aspect.isRegistered() == false) continue;
 | 
				
			||||||
			if((aspect.multiverse() != multiverse) == normal) continue;
 | 
								if((aspect.multiverse() != multiverse) == normal) continue;
 | 
				
			||||||
			ret.add(aspect);
 | 
								ret.add(aspect);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,7 @@ public class CmdUsysAspectShow extends UsysCommand
 | 
				
			|||||||
		msg(Txt.titleize("Aspect: "+aspect.getId()));
 | 
							msg(Txt.titleize("Aspect: "+aspect.getId()));
 | 
				
			||||||
		msg("<k>using multiverse: <v>%s",aspect.multiverse().getId());
 | 
							msg("<k>using multiverse: <v>%s",aspect.multiverse().getId());
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		for (String descLine : aspect.desc())
 | 
							for (String descLine : aspect.getDesc())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			msg(descLine);
 | 
								msg(descLine);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,7 @@ public class CmdUsysMultiverseNew extends UsysCommand
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		String id = this.arg(0);
 | 
							String id = this.arg(0);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if (MultiverseColl.i.ids().contains(id))
 | 
							if (MultiverseColl.i.getIds().contains(id))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			msg("<b>The multiverse <h>%s<b> alread exists.", id);
 | 
								msg("<b>The multiverse <h>%s<b> alread exists.", id);
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user