many random updates again :P
This commit is contained in:
parent
c670731a4e
commit
9e5866303e
@ -131,14 +131,14 @@ public class InternalListener implements Listener
|
|||||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||||
public void syncOnPlayerLogin(PlayerLoginEvent event)
|
public void syncOnPlayerLogin(PlayerLoginEvent event)
|
||||||
{
|
{
|
||||||
p.log("syncOnPlayerLogin", event.getPlayer().getName());
|
//p.log("syncOnPlayerLogin", event.getPlayer().getName());
|
||||||
this.syncAllForPlayer(event.getPlayer());
|
this.syncAllForPlayer(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void syncOnPlayerLeave(MCorePlayerLeaveEvent event)
|
public void syncOnPlayerLeave(MCorePlayerLeaveEvent event)
|
||||||
{
|
{
|
||||||
p.log("syncOnPlayerLeave", event.getPlayer().getName());
|
//p.log("syncOnPlayerLeave", event.getPlayer().getName());
|
||||||
this.syncAllForPlayer(event.getPlayer());
|
this.syncAllForPlayer(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ public abstract class MPlugin extends JavaPlugin implements Listener
|
|||||||
|
|
||||||
public void postEnable()
|
public void postEnable()
|
||||||
{
|
{
|
||||||
log(Txt.parse("=== ENABLE <g>COMPLELTE <i>(Took <h>"+(System.currentTimeMillis()-timeEnableStart)+"ms<i>) ==="));
|
log(Txt.parse("=== ENABLE <g>COMPLETE <i>(Took <h>"+(System.currentTimeMillis()-timeEnableStart)+"ms<i>) ==="));
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -48,9 +48,24 @@ public class SimpleConfig
|
|||||||
if (this.file().isFile())
|
if (this.file().isFile())
|
||||||
{
|
{
|
||||||
String content = DiscUtil.readCatch(this.file());
|
String content = DiscUtil.readCatch(this.file());
|
||||||
if (contentRequestsDefaults(content)) return;
|
Object toShallowLoad = null;
|
||||||
Object createdByGson = this.mplugin().gson.fromJson(content, this.getClass());
|
if (contentRequestsDefaults(content))
|
||||||
Accessor.get(this.getClass()).copy(createdByGson, this);
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
toShallowLoad = this.getClass().newInstance();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
toShallowLoad = this.mplugin().gson.fromJson(content, this.getClass());
|
||||||
|
}
|
||||||
|
Accessor.get(this.getClass()).copy(toShallowLoad, this);
|
||||||
}
|
}
|
||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
|
@ -20,11 +20,21 @@ public abstract class ARAbstractStringMatch implements ArgReader<String>
|
|||||||
|
|
||||||
// Find all matches
|
// Find all matches
|
||||||
Set<String> matches = new HashSet<String>();
|
Set<String> matches = new HashSet<String>();
|
||||||
|
String perfectMatch = null;
|
||||||
|
|
||||||
|
outerloop:
|
||||||
for (Collection<String> altColl : this.altColls())
|
for (Collection<String> altColl : this.altColls())
|
||||||
{
|
{
|
||||||
for (String alt : altColl)
|
for (String alt : altColl)
|
||||||
{
|
{
|
||||||
if (this.matches(str, alt))
|
Integer matchDistance = this.matches(str, alt);
|
||||||
|
if (matchDistance == null) continue;
|
||||||
|
if (matchDistance == 0)
|
||||||
|
{
|
||||||
|
perfectMatch = alt;
|
||||||
|
break outerloop;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
matches.add(alt);
|
matches.add(alt);
|
||||||
}
|
}
|
||||||
@ -32,7 +42,11 @@ public abstract class ARAbstractStringMatch implements ArgReader<String>
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set result and errors
|
// Set result and errors
|
||||||
if (matches.size() == 1)
|
if (perfectMatch != null)
|
||||||
|
{
|
||||||
|
result.setResult(perfectMatch);
|
||||||
|
}
|
||||||
|
else if (matches.size() == 1)
|
||||||
{
|
{
|
||||||
result.setResult(matches.iterator().next());
|
result.setResult(matches.iterator().next());
|
||||||
}
|
}
|
||||||
@ -53,7 +67,10 @@ public abstract class ARAbstractStringMatch implements ArgReader<String>
|
|||||||
// ABSTRACT
|
// ABSTRACT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public abstract boolean matches(String arg, String alt);
|
// return null if no match
|
||||||
|
// return 0 if perfect match
|
||||||
|
// return >0 to declare distance from perfect match
|
||||||
|
public abstract Integer matches(String arg, String alt);
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// FIELDS
|
// FIELDS
|
||||||
|
@ -1,25 +1,25 @@
|
|||||||
package com.massivecraft.mcore4.cmd.arg;
|
package com.massivecraft.mcore4.cmd.arg;
|
||||||
|
|
||||||
import com.massivecraft.mcore4.cmd.MCommand;
|
import com.massivecraft.mcore4.cmd.MCommand;
|
||||||
import com.massivecraft.mcore4.store.PlayerColl;
|
import com.massivecraft.mcore4.store.Coll;
|
||||||
import com.massivecraft.mcore4.store.PlayerEntity;
|
import com.massivecraft.mcore4.store.Entity;
|
||||||
|
|
||||||
public class ARPlayerEntity<T extends PlayerEntity<T>> implements ArgReader<T>
|
public class ARStringEntity<E extends Entity<E, String>> implements ArgReader<E>
|
||||||
{
|
{
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// IMPLEMENTATION
|
// IMPLEMENTATION
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArgResult<T> read(String str, MCommand mcommand)
|
public ArgResult<E> read(String str, MCommand mcommand)
|
||||||
{
|
{
|
||||||
ArgResult<T> result = new ArgResult<T>();
|
ArgResult<E> result = new ArgResult<E>();
|
||||||
ArgResult<String> innerResult = this.stringReader().read(str, mcommand);
|
ArgResult<String> innerResult = this.stringReader().read(str, mcommand);
|
||||||
|
|
||||||
if (innerResult.hasResult())
|
if (innerResult.hasResult())
|
||||||
{
|
{
|
||||||
String playerName = innerResult.getResult();
|
String playerName = innerResult.getResult();
|
||||||
T entity = this.playerColl().get(playerName);
|
E entity = this.coll().get(playerName);
|
||||||
result.setResult(entity);
|
result.setResult(entity);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -37,17 +37,17 @@ public class ARPlayerEntity<T extends PlayerEntity<T>> implements ArgReader<T>
|
|||||||
protected ArgReader<String> stringReader;
|
protected ArgReader<String> stringReader;
|
||||||
public ArgReader<String> stringReader() { return this.stringReader; }
|
public ArgReader<String> stringReader() { return this.stringReader; }
|
||||||
|
|
||||||
protected PlayerColl<T> playerColl;
|
protected Coll<E, String> coll;
|
||||||
public PlayerColl<T> playerColl() { return this.playerColl; }
|
public Coll<E, String> coll() { return this.coll; }
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONSTRUCT
|
// CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public ARPlayerEntity(ArgReader<String> stringReader, PlayerColl<T> playerColl)
|
public ARStringEntity(ArgReader<String> stringReader, Coll<E, String> coll)
|
||||||
{
|
{
|
||||||
this.stringReader = stringReader;
|
this.stringReader = stringReader;
|
||||||
this.playerColl = playerColl;
|
this.coll = coll;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -9,9 +9,9 @@ public class ARStringMatchFullCI extends ARAbstractStringMatch
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matches(String arg, String alt)
|
public Integer matches(String arg, String alt)
|
||||||
{
|
{
|
||||||
return alt.equalsIgnoreCase(arg);
|
return alt.equalsIgnoreCase(arg) ? 0 : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -9,9 +9,9 @@ public class ARStringMatchFullCS extends ARAbstractStringMatch
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matches(String arg, String alt)
|
public Integer matches(String arg, String alt)
|
||||||
{
|
{
|
||||||
return alt.equals(arg);
|
return alt.equals(arg) ? 0 : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -9,11 +9,18 @@ public class ARStringMatchStartCI extends ARAbstractStringMatch
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matches(String arg, String alt)
|
public Integer matches(String arg, String alt)
|
||||||
{
|
{
|
||||||
arg = arg.toLowerCase();
|
arg = arg.toLowerCase();
|
||||||
alt = alt.toLowerCase();
|
alt = alt.toLowerCase();
|
||||||
return alt.startsWith(arg);
|
if (alt.startsWith(arg))
|
||||||
|
{
|
||||||
|
return alt.length() - arg.length();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -9,9 +9,16 @@ public class ARStringMatchStartCS extends ARAbstractStringMatch
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matches(String arg, String alt)
|
public Integer matches(String arg, String alt)
|
||||||
{
|
{
|
||||||
return alt.startsWith(arg);
|
if (alt.startsWith(arg))
|
||||||
|
{
|
||||||
|
return alt.length() - arg.length();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -8,8 +8,6 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
import com.massivecraft.mcore4.MCore;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The MCorePlayerLeaveEvent is a non-cancellable event.
|
* The MCorePlayerLeaveEvent is a non-cancellable event.
|
||||||
* It is run at the MONITOR of either PlayerKickEvent or PlayerQuitEvent.
|
* It is run at the MONITOR of either PlayerKickEvent or PlayerQuitEvent.
|
||||||
@ -75,7 +73,7 @@ public class MCorePlayerLeaveEvent extends Event implements Runnable
|
|||||||
|
|
||||||
if (doit)
|
if (doit)
|
||||||
{
|
{
|
||||||
MCore.p.log("MCorePlayerLeaveEvent", caller, player.getDisplayName(), preDisconnect, message);
|
//MCore.p.log("MCorePlayerLeaveEvent", caller, player.getDisplayName(), preDisconnect, message);
|
||||||
player2event.put(this.player.getName(), this);
|
player2event.put(this.player.getName(), this);
|
||||||
Bukkit.getPluginManager().callEvent(this);
|
Bukkit.getPluginManager().callEvent(this);
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,15 @@ public class Coll<E, L> implements CollInterface<E, L>
|
|||||||
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> ids() { return Collections.unmodifiableCollection(this.ids); }
|
||||||
@Override public Collection<L> idsRemote() { return this.db().driver().ids(this); }
|
@Override public Collection<L> idsRemote() { return this.db().driver().ids(this); }
|
||||||
|
@Override public boolean containsEntity(E entity) { return this.entities.contains(entity); };
|
||||||
|
@Override
|
||||||
|
public boolean containsId(Object oid)
|
||||||
|
{
|
||||||
|
L id = this.idFix(oid);
|
||||||
|
if (id == null) return false;
|
||||||
|
return this.ids.contains(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected Set<E> entities = Collections.newSetFromMap(new ConcurrentHashMap<E, Boolean>());
|
protected Set<E> entities = Collections.newSetFromMap(new ConcurrentHashMap<E, Boolean>());
|
||||||
@Override public Collection<E> getAll() { return Collections.unmodifiableCollection(this.entities); }
|
@Override public Collection<E> getAll() { return Collections.unmodifiableCollection(this.entities); }
|
||||||
@ -112,6 +121,7 @@ public class Coll<E, L> implements CollInterface<E, L>
|
|||||||
{
|
{
|
||||||
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);
|
||||||
|
if (oid.getClass() == this.entityClass) return this.entity2id.get(oid);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,10 +141,20 @@ public class Coll<E, L> implements CollInterface<E, L>
|
|||||||
// COPY AND CREATE
|
// COPY AND CREATE
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||||
public void copy(Object ofrom, Object oto)
|
public void copy(Object ofrom, Object oto)
|
||||||
|
{
|
||||||
|
if (ofrom instanceof Entity)
|
||||||
|
{
|
||||||
|
Entity efrom = (Entity)ofrom;
|
||||||
|
Entity eto = (Entity)oto;
|
||||||
|
eto.load(efrom);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
Accessor.get(this.entityClass()).copy(ofrom, oto);
|
Accessor.get(this.entityClass()).copy(ofrom, oto);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// This simply creates and returns a new instance
|
// This simply creates and returns a new instance
|
||||||
// It does not detach/attach or anything. Just creates a new instance.
|
// It does not detach/attach or anything. Just creates a new instance.
|
||||||
@ -579,10 +599,16 @@ public class Coll<E, L> implements CollInterface<E, L>
|
|||||||
@Override
|
@Override
|
||||||
public void init()
|
public void init()
|
||||||
{
|
{
|
||||||
if (instances.contains(this)) return;
|
if (this.inited()) return;
|
||||||
this.syncAll();
|
this.syncAll();
|
||||||
this.examineThread = new ExamineThread<E, L>(this);
|
this.examineThread = new ExamineThread<E, L>(this);
|
||||||
this.examineThread.start();
|
this.examineThread.start();
|
||||||
instances.add(this);
|
instances.add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean inited()
|
||||||
|
{
|
||||||
|
return instances.contains(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,8 @@ public interface CollInterface<E, L>
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
public Collection<L> ids();
|
public Collection<L> ids();
|
||||||
public Collection<L> idsRemote();
|
public Collection<L> idsRemote();
|
||||||
|
public boolean containsId(Object oid);
|
||||||
|
public boolean containsEntity(E entity);
|
||||||
|
|
||||||
public Collection<E> getAll();
|
public Collection<E> getAll();
|
||||||
public Collection<E> getAll(Predictate<E> where);
|
public Collection<E> getAll(Predictate<E> where);
|
||||||
@ -141,6 +143,7 @@ public interface CollInterface<E, L>
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public void init();
|
public void init();
|
||||||
|
public boolean inited();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -10,7 +10,7 @@ import org.bukkit.entity.Player;
|
|||||||
import com.massivecraft.mcore4.MCore;
|
import com.massivecraft.mcore4.MCore;
|
||||||
import com.massivecraft.mcore4.MPlugin;
|
import com.massivecraft.mcore4.MPlugin;
|
||||||
import com.massivecraft.mcore4.Predictate;
|
import com.massivecraft.mcore4.Predictate;
|
||||||
import com.massivecraft.mcore4.cmd.arg.ARPlayerEntity;
|
import com.massivecraft.mcore4.cmd.arg.ARStringEntity;
|
||||||
import com.massivecraft.mcore4.cmd.arg.ARStringMatchFullCI;
|
import com.massivecraft.mcore4.cmd.arg.ARStringMatchFullCI;
|
||||||
import com.massivecraft.mcore4.cmd.arg.ARStringMatchStartCI;
|
import com.massivecraft.mcore4.cmd.arg.ARStringMatchStartCI;
|
||||||
import com.massivecraft.mcore4.cmd.arg.ArgReader;
|
import com.massivecraft.mcore4.cmd.arg.ArgReader;
|
||||||
@ -19,14 +19,47 @@ import com.massivecraft.mcore4.util.PlayerUtil;
|
|||||||
|
|
||||||
public class PlayerColl<E extends PlayerEntity<E>> extends Coll<E, String>
|
public class PlayerColl<E extends PlayerEntity<E>> extends Coll<E, String>
|
||||||
{
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
// Note that the lowercasing should be kept at either true or false.
|
||||||
|
protected boolean lowercasing = false;
|
||||||
|
public boolean isLowercasing() { return this.lowercasing; }
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public PlayerColl(Db<?> db, MPlugin mplugin, String name, Class<E> entityClass, boolean creative, boolean lowercasing)
|
||||||
|
{
|
||||||
|
super(db, mplugin, "ai", name, entityClass, String.class, creative);
|
||||||
|
this.lowercasing = lowercasing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerColl(Db<?> db, MPlugin mplugin, String name, Class<E> entityClass, boolean creative)
|
||||||
|
{
|
||||||
|
this(db, mplugin, name, entityClass, creative, false);
|
||||||
|
}
|
||||||
|
|
||||||
public PlayerColl(Db<?> db, MPlugin mplugin, String name, Class<E> entityClass)
|
public PlayerColl(Db<?> db, MPlugin mplugin, String name, Class<E> entityClass)
|
||||||
{
|
{
|
||||||
super(db, mplugin, "ai", name, entityClass, String.class, true);
|
this(db, mplugin, name, entityClass, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerColl(MPlugin mplugin, String name, Class<E> entityClass, boolean creative, boolean lowercasing)
|
||||||
|
{
|
||||||
|
this(MCore.getDb(), mplugin, name, entityClass, creative, lowercasing);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerColl(MPlugin mplugin, String name, Class<E> entityClass, boolean creative)
|
||||||
|
{
|
||||||
|
this(MCore.getDb(), mplugin, name, entityClass, creative);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerColl(MPlugin mplugin, String name, Class<E> entityClass)
|
public PlayerColl(MPlugin mplugin, String name, Class<E> entityClass)
|
||||||
{
|
{
|
||||||
super(MCore.getDb(), mplugin, "ai", name, entityClass, String.class, true);
|
this(MCore.getDb(), mplugin, name, entityClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -37,7 +70,9 @@ public class PlayerColl<E extends PlayerEntity<E>> extends Coll<E, String>
|
|||||||
public String idFix(Object oid)
|
public String idFix(Object oid)
|
||||||
{
|
{
|
||||||
if (oid == null) return null;
|
if (oid == null) return null;
|
||||||
return MUtil.extract(String.class, "playerName", oid);
|
String ret = MUtil.extract(String.class, "playerName", oid);
|
||||||
|
if (ret == null) return ret;
|
||||||
|
return this.lowercasing ? ret.toLowerCase() : ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<E> getAllOnline()
|
public Collection<E> getAllOnline()
|
||||||
@ -87,12 +122,12 @@ public class PlayerColl<E extends PlayerEntity<E>> extends Coll<E, String>
|
|||||||
|
|
||||||
public ArgReader<E> argReaderPlayerFull()
|
public ArgReader<E> argReaderPlayerFull()
|
||||||
{
|
{
|
||||||
return new ARPlayerEntity<E>(this.argReaderPlayerNameFull(), this);
|
return new ARStringEntity<E>(this.argReaderPlayerNameFull(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArgReader<E> argReaderPlayerStart()
|
public ArgReader<E> argReaderPlayerStart()
|
||||||
{
|
{
|
||||||
return new ARPlayerEntity<E>(this.argReaderPlayerNameStart(), this);
|
return new ARStringEntity<E>(this.argReaderPlayerNameStart(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.massivecraft.mcore4.store;
|
|||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -12,9 +13,23 @@ import com.massivecraft.mcore4.util.Txt;
|
|||||||
public abstract class PlayerEntity<E extends PlayerEntity<E>> extends Entity<E, String>
|
public abstract class PlayerEntity<E extends PlayerEntity<E>> extends Entity<E, String>
|
||||||
{
|
{
|
||||||
public Player getPlayer()
|
public Player getPlayer()
|
||||||
|
{
|
||||||
|
if (this.getColl() == null) return null;
|
||||||
|
if (this.getColl().isLowercasing())
|
||||||
|
{
|
||||||
|
return Bukkit.getPlayerExact(this.getId());
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return PlayerUtil.getPlayerExact(this.getId());
|
return PlayerUtil.getPlayerExact(this.getId());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PlayerColl<E> getColl()
|
||||||
|
{
|
||||||
|
return (PlayerColl<E>) super.getColl();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isOnline()
|
public boolean isOnline()
|
||||||
{
|
{
|
||||||
|
@ -6,19 +6,55 @@ import java.util.Map.Entry;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.permissions.Permission;
|
import org.bukkit.permissions.Permission;
|
||||||
|
import org.bukkit.permissions.PermissionDefault;
|
||||||
|
|
||||||
import com.massivecraft.mcore4.Lang;
|
import com.massivecraft.mcore4.Lang;
|
||||||
|
|
||||||
public class Perm
|
public class Perm
|
||||||
{
|
{
|
||||||
public static String getPermissionDescription (String perm)
|
// -------------------------------------------- //
|
||||||
|
// HAS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static boolean has(CommandSender sender, Permission permission)
|
||||||
|
{
|
||||||
|
return has(sender, permission.getName());
|
||||||
|
}
|
||||||
|
public static boolean has(CommandSender sender, String perm)
|
||||||
|
{
|
||||||
|
if (sender == null) return false;
|
||||||
|
return sender.hasPermission(perm);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean has(CommandSender sender, Permission permission, boolean verbose)
|
||||||
|
{
|
||||||
|
return has(sender, permission.getName(), verbose);
|
||||||
|
}
|
||||||
|
public static boolean has(CommandSender sender, String perm, boolean verbose)
|
||||||
|
{
|
||||||
|
if (has(sender, perm))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (verbose && sender != null)
|
||||||
|
{
|
||||||
|
sender.sendMessage(getForbiddenMessage(perm));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// DESCRIPTIONS AND MESSAGES
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static String getPermissionDescription(String perm)
|
||||||
{
|
{
|
||||||
if (perm == null) return Lang.permDoThat;
|
if (perm == null) return Lang.permDoThat;
|
||||||
Permission permission = Bukkit.getPluginManager().getPermission(perm);
|
Permission permission = Bukkit.getPluginManager().getPermission(perm);
|
||||||
return getPermissionDescription(permission);
|
return getPermissionDescription(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getPermissionDescription (Permission perm)
|
public static String getPermissionDescription(Permission perm)
|
||||||
{
|
{
|
||||||
if (perm == null) return Lang.permDoThat;
|
if (perm == null) return Lang.permDoThat;
|
||||||
String desc = perm.getDescription();
|
String desc = perm.getDescription();
|
||||||
@ -31,24 +67,9 @@ public class Perm
|
|||||||
return Txt.parse(Lang.permForbidden, getPermissionDescription(perm));
|
return Txt.parse(Lang.permForbidden, getPermissionDescription(perm));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean has (CommandSender me, String perm)
|
// -------------------------------------------- //
|
||||||
{
|
// RANDOM UTILS
|
||||||
if (me == null) return false;
|
// -------------------------------------------- //
|
||||||
return me.hasPermission(perm);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean has (CommandSender me, String perm, boolean verbose)
|
|
||||||
{
|
|
||||||
if (has(me, perm))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else if (verbose && me != null)
|
|
||||||
{
|
|
||||||
me.sendMessage(getForbiddenMessage(perm));
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T> T pickFirstVal(CommandSender me, Map<String, T> perm2val)
|
public static <T> T pickFirstVal(CommandSender me, Map<String, T> perm2val)
|
||||||
{
|
{
|
||||||
@ -63,4 +84,54 @@ public class Perm
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// GET CREATIVE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static Permission getCreative(String name)
|
||||||
|
{
|
||||||
|
return getCreative(name, null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Permission getCreative(String name, String description)
|
||||||
|
{
|
||||||
|
return getCreative(name, description, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Permission getCreative(String name, PermissionDefault defaultValue)
|
||||||
|
{
|
||||||
|
return getCreative(name, null, defaultValue, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Permission getCreative(String name, String description, PermissionDefault defaultValue)
|
||||||
|
{
|
||||||
|
return getCreative(name, description, defaultValue, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Permission getCreative(String name, Map<String, Boolean> children)
|
||||||
|
{
|
||||||
|
return getCreative(name, null, null, children);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Permission getCreative(String name, String description, Map<String, Boolean> children)
|
||||||
|
{
|
||||||
|
return getCreative(name, description, null, children);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Permission getCreative(String name, PermissionDefault defaultValue, Map<String, Boolean> children)
|
||||||
|
{
|
||||||
|
return getCreative(name, null, defaultValue, children);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Permission getCreative(String name, String description, PermissionDefault defaultValue, Map<String, Boolean> children)
|
||||||
|
{
|
||||||
|
Permission ret = Bukkit.getPluginManager().getPermission(name);
|
||||||
|
if (ret == null)
|
||||||
|
{
|
||||||
|
ret = new Permission(name, description, defaultValue, children);
|
||||||
|
Bukkit.getPluginManager().addPermission(ret);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,7 @@ public class PlayerUtil implements Listener
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static Player getPlayerExact(String exactPlayerName)
|
public static Player getPlayerExact(String exactPlayerName)
|
||||||
{
|
{
|
||||||
|
if (exactPlayerName == null) return null;
|
||||||
CraftServer craftServer = (CraftServer) Bukkit.getServer();
|
CraftServer craftServer = (CraftServer) Bukkit.getServer();
|
||||||
List<EntityPlayer> entityPlayers = craftServer.getHandle().players;
|
List<EntityPlayer> entityPlayers = craftServer.getHandle().players;
|
||||||
for (EntityPlayer entityPlayer : entityPlayers)
|
for (EntityPlayer entityPlayer : entityPlayers)
|
||||||
|
@ -368,10 +368,14 @@ public class Txt
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static ArrayList<String> getPage(List<String> lines, int pageHumanBased, String title)
|
public static ArrayList<String> getPage(List<String> lines, int pageHumanBased, String title)
|
||||||
|
{
|
||||||
|
return getPage(lines, pageHumanBased, title, 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<String> getPage(List<String> lines, int pageHumanBased, String title, int pageheight)
|
||||||
{
|
{
|
||||||
ArrayList<String> ret = new ArrayList<String>();
|
ArrayList<String> ret = new ArrayList<String>();
|
||||||
int pageZeroBased = pageHumanBased - 1;
|
int pageZeroBased = pageHumanBased - 1;
|
||||||
int pageheight = 9;
|
|
||||||
int pagecount = (int)Math.ceil(((double)lines.size()) / pageheight);
|
int pagecount = (int)Math.ceil(((double)lines.size()) / pageheight);
|
||||||
|
|
||||||
ret.add(titleize(title+parse("<a>")+" "+pageHumanBased+"/"+pagecount));
|
ret.add(titleize(title+parse("<a>")+" "+pageHumanBased+"/"+pagecount));
|
||||||
|
Loading…
Reference in New Issue
Block a user