MassiveCore - Boards and NMS
This commit is contained in:
parent
4a307e619f
commit
a46e8e2573
@ -1,17 +1,19 @@
|
|||||||
package com.massivecraft.massivecore.collections;
|
package com.massivecraft.massivecore.collections;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
import com.massivecraft.massivecore.comparator.ComparatorCaseInsensitive;
|
import com.massivecraft.massivecore.comparator.ComparatorCaseInsensitive;
|
||||||
|
|
||||||
public class ExceptionSet<T>
|
public class ExceptionSet
|
||||||
{
|
{
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// FIELDS
|
// FIELDS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public boolean standard = true;
|
private boolean standard = true;
|
||||||
public boolean isStandard() { return this.standard; }
|
public boolean isStandard() { return this.standard; }
|
||||||
|
public void setStandard(boolean standard) { this.standard = standard; }
|
||||||
|
|
||||||
public MassiveTreeSet<String, ComparatorCaseInsensitive> exceptions = new MassiveTreeSet<>(ComparatorCaseInsensitive.get());
|
public MassiveTreeSet<String, ComparatorCaseInsensitive> exceptions = new MassiveTreeSet<>(ComparatorCaseInsensitive.get());
|
||||||
|
|
||||||
@ -30,66 +32,64 @@ public class ExceptionSet<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public <X extends Object> ExceptionSet(boolean standard, X... exceptions)
|
public <O extends Object> ExceptionSet(boolean standard, O... exceptions)
|
||||||
{
|
{
|
||||||
this.standard = standard;
|
this.standard = standard;
|
||||||
if (exceptions.length == 0) return;
|
if (exceptions.length == 0) return;
|
||||||
this.exceptions.addAll(asStrings(exceptions));
|
Collection<String> strings = stringifyAll(exceptions);
|
||||||
}
|
this.exceptions.addAll(strings);
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// AS STRING
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public String asString(Object exception)
|
|
||||||
{
|
|
||||||
if (exception == null) return null;
|
|
||||||
|
|
||||||
if (exception instanceof String) return (String)exception;
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
T t = (T)exception;
|
|
||||||
return this.convert(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
public MassiveTreeSet<String, ComparatorCaseInsensitive> asStrings(Object... exceptions)
|
|
||||||
{
|
|
||||||
return asStrings(Arrays.asList(exceptions));
|
|
||||||
}
|
|
||||||
|
|
||||||
public MassiveTreeSet<String, ComparatorCaseInsensitive> asStrings(Iterable<?> exceptions)
|
|
||||||
{
|
|
||||||
MassiveTreeSet<String, ComparatorCaseInsensitive> ret = new MassiveTreeSet<>(ComparatorCaseInsensitive.get());
|
|
||||||
|
|
||||||
for (Object exception : exceptions)
|
|
||||||
{
|
|
||||||
String string = asString(exception);
|
|
||||||
ret.add(string);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// CONVERT
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
public String convert(T item)
|
|
||||||
{
|
|
||||||
return item.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONTAINS
|
// CONTAINS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public boolean contains(Object object)
|
public <O extends Object> boolean contains(O object)
|
||||||
{
|
{
|
||||||
if (object == null) return ! this.standard;
|
if (object == null) return ! this.standard;
|
||||||
String string = asString(object);
|
String string = stringify(object);
|
||||||
if (this.exceptions.contains(string)) return ! this.standard;
|
if (this.exceptions.contains(string)) return ! this.standard;
|
||||||
return this.standard;
|
return this.standard;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STRINGIFY
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public String stringify(Object object)
|
||||||
|
{
|
||||||
|
if (object == null) return null;
|
||||||
|
if (object instanceof String) return (String)object;
|
||||||
|
String ret = this.stringifyInner(object);
|
||||||
|
if (ret != null) return ret;
|
||||||
|
return object.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String stringifyInner(Object object)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STRINGIFY ALL
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public MassiveTreeSet<String, ComparatorCaseInsensitive> stringifyAll(Object... exceptions)
|
||||||
|
{
|
||||||
|
return stringifyAll(Arrays.asList(exceptions));
|
||||||
|
}
|
||||||
|
|
||||||
|
public MassiveTreeSet<String, ComparatorCaseInsensitive> stringifyAll(Iterable<?> exceptions)
|
||||||
|
{
|
||||||
|
MassiveTreeSet<String, ComparatorCaseInsensitive> ret = new MassiveTreeSet<>(ComparatorCaseInsensitive.get());
|
||||||
|
|
||||||
|
for (Object exception : exceptions)
|
||||||
|
{
|
||||||
|
String string = stringify(exception);
|
||||||
|
ret.add(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ import org.bukkit.entity.Entity;
|
|||||||
|
|
||||||
import com.massivecraft.massivecore.ps.PS;
|
import com.massivecraft.massivecore.ps.PS;
|
||||||
|
|
||||||
public class WorldExceptionSet extends ExceptionSet<World>
|
public class WorldExceptionSet extends ExceptionSet
|
||||||
{
|
{
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONSTRUCT
|
// CONSTRUCT
|
||||||
@ -23,7 +23,7 @@ public class WorldExceptionSet extends ExceptionSet<World>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public <X extends Object> WorldExceptionSet(boolean standard, X... exceptions)
|
public <O extends Object> WorldExceptionSet(boolean standard, O... exceptions)
|
||||||
{
|
{
|
||||||
super(standard, exceptions);
|
super(standard, exceptions);
|
||||||
}
|
}
|
||||||
@ -32,12 +32,6 @@ public class WorldExceptionSet extends ExceptionSet<World>
|
|||||||
// CONTAINS
|
// CONTAINS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
|
||||||
public String convert(World world)
|
|
||||||
{
|
|
||||||
return world.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean contains(PS ps)
|
public boolean contains(PS ps)
|
||||||
{
|
{
|
||||||
return this.contains(ps.getWorld());
|
return this.contains(ps.getWorld());
|
||||||
@ -53,4 +47,16 @@ public class WorldExceptionSet extends ExceptionSet<World>
|
|||||||
return this.contains(entity.getWorld());
|
return this.contains(entity.getWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STRINGIFY
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String stringifyInner(Object object)
|
||||||
|
{
|
||||||
|
if ( ! (object instanceof World)) return null;
|
||||||
|
World world = (World)object;
|
||||||
|
return world.getName();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -154,11 +154,6 @@ public class RegistryType
|
|||||||
{
|
{
|
||||||
return TypeEntry.get(getType(paramType.getActualTypeArguments()[0]), getType(paramType.getActualTypeArguments()[1]));
|
return TypeEntry.get(getType(paramType.getActualTypeArguments()[0]), getType(paramType.getActualTypeArguments()[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ExceptionSet.class.isAssignableFrom(parent))
|
|
||||||
{
|
|
||||||
return TypeExceptionSet.get(getType(paramType.getActualTypeArguments()[0]));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new IllegalArgumentException("Unknown type: " + reflectType);
|
throw new IllegalArgumentException("Unknown type: " + reflectType);
|
||||||
@ -247,7 +242,8 @@ public class RegistryType
|
|||||||
register(TypeMultiverse.get());
|
register(TypeMultiverse.get());
|
||||||
|
|
||||||
// Collection
|
// Collection
|
||||||
register(WorldExceptionSet.class, TypeExceptionSet.get(TypeWorld.get()));
|
register(ExceptionSet.class, TypeExceptionSet.get());
|
||||||
|
register(WorldExceptionSet.class, TypeExceptionSet.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ public class TypeItemStack extends TypeAbstract<ItemStack>
|
|||||||
// FIELDS
|
// FIELDS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private final ExceptionSet<Material> materialsAllowed;
|
private final ExceptionSet materialsAllowed;
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// INSTANCE & CONSTRUCT
|
// INSTANCE & CONSTRUCT
|
||||||
@ -30,11 +30,11 @@ public class TypeItemStack extends TypeAbstract<ItemStack>
|
|||||||
|
|
||||||
public static TypeItemStack get(Material... materialWhitelist)
|
public static TypeItemStack get(Material... materialWhitelist)
|
||||||
{
|
{
|
||||||
ExceptionSet<Material> materialsAllowed = new ExceptionSet<>(false, materialWhitelist);
|
ExceptionSet materialsAllowed = new ExceptionSet(false, materialWhitelist);
|
||||||
return new TypeItemStack(materialsAllowed);
|
return new TypeItemStack(materialsAllowed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TypeItemStack(ExceptionSet<Material> materialsAllowed)
|
public TypeItemStack(ExceptionSet materialsAllowed)
|
||||||
{
|
{
|
||||||
super(ItemStack.class);
|
super(ItemStack.class);
|
||||||
this.materialsAllowed = materialsAllowed;
|
this.materialsAllowed = materialsAllowed;
|
||||||
@ -42,7 +42,7 @@ public class TypeItemStack extends TypeAbstract<ItemStack>
|
|||||||
|
|
||||||
public TypeItemStack()
|
public TypeItemStack()
|
||||||
{
|
{
|
||||||
this(new ExceptionSet<Material>(true));
|
this(new ExceptionSet(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -1,127 +1,19 @@
|
|||||||
package com.massivecraft.massivecore.command.type.container;
|
package com.massivecraft.massivecore.command.type.container;
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
import com.massivecraft.massivecore.MassiveException;
|
|
||||||
import com.massivecraft.massivecore.collections.ExceptionSet;
|
import com.massivecraft.massivecore.collections.ExceptionSet;
|
||||||
import com.massivecraft.massivecore.collections.MassiveSet;
|
import com.massivecraft.massivecore.command.type.TypeReflection;
|
||||||
import com.massivecraft.massivecore.command.editor.Property;
|
|
||||||
import com.massivecraft.massivecore.command.editor.PropertyReflection;
|
|
||||||
import com.massivecraft.massivecore.command.type.Type;
|
|
||||||
import com.massivecraft.massivecore.command.type.TypeAbstract;
|
|
||||||
import com.massivecraft.massivecore.command.type.primitive.TypeBoolean;
|
|
||||||
import com.massivecraft.massivecore.util.ReflectionUtil;
|
|
||||||
import com.massivecraft.massivecore.util.Txt;
|
|
||||||
|
|
||||||
public class TypeExceptionSet<E> extends TypeAbstract<ExceptionSet<E>>
|
public class TypeExceptionSet extends TypeReflection<ExceptionSet>
|
||||||
{
|
{
|
||||||
// -------------------------------------------- //
|
|
||||||
// FIELDS
|
|
||||||
// -------------------------------------------- //
|
|
||||||
|
|
||||||
private final TypeSet<E> typeElements;
|
|
||||||
public TypeSet<E> getTypeElements() { return this.typeElements; }
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// INSTANCE & CONSTRUCT
|
// INSTANCE & CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public static <E> TypeExceptionSet<E> get(Type<E> innerType)
|
private static TypeExceptionSet i = new TypeExceptionSet();
|
||||||
{
|
public static TypeExceptionSet get() { return i; }
|
||||||
return new TypeExceptionSet<E>(innerType);
|
public TypeExceptionSet()
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public TypeExceptionSet(final Type<E> innerType)
|
|
||||||
{
|
{
|
||||||
super(ExceptionSet.class);
|
super(ExceptionSet.class);
|
||||||
|
|
||||||
this.typeElements = TypeSet.get(innerType);
|
|
||||||
|
|
||||||
// PROPERTIES
|
|
||||||
Property<ExceptionSet<E>, Boolean> propertyStandard = PropertyReflection.get(ReflectionUtil.getField(ExceptionSet.class, "standard"), this);
|
|
||||||
|
|
||||||
Property<ExceptionSet<E>, Set<E>> propertyExceptions = new Property<ExceptionSet<E>, Set<E>>(this, typeElements, "exceptions")
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public Set<E> getRaw(ExceptionSet<E> object)
|
|
||||||
{
|
|
||||||
Set<E> ret = new MassiveSet<>();
|
|
||||||
|
|
||||||
for (String exception : object.exceptions)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ret.add(innerType.read(exception));
|
|
||||||
}
|
|
||||||
catch (MassiveException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ExceptionSet<E> setRaw(ExceptionSet<E> object, Set<E> value)
|
|
||||||
{
|
|
||||||
object.exceptions = object.asStrings(value);
|
|
||||||
return object;
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
propertyExceptions.setNullable(false);
|
|
||||||
|
|
||||||
this.setInnerProperties(propertyStandard, propertyExceptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// OVERRIDE
|
|
||||||
// -------------------------------------------- //
|
|
||||||
// TODO: Do we even need this now?
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ExceptionSet<E> read(String arg, CommandSender sender) throws MassiveException
|
|
||||||
{
|
|
||||||
String[] args = Txt.PATTERN_WHITESPACE.split(arg, 2);
|
|
||||||
String first = args[0];
|
|
||||||
String second = args.length == 2 ? args[1] : "";
|
|
||||||
|
|
||||||
boolean standard = TypeBoolean.getTrue().read(first, sender);
|
|
||||||
Set<E> exceptions = this.getTypeElements().read(second, sender);
|
|
||||||
|
|
||||||
ExceptionSet<E> ret = new ExceptionSet<>();
|
|
||||||
ret.standard = standard;
|
|
||||||
|
|
||||||
for (E exception: exceptions)
|
|
||||||
{
|
|
||||||
ret.exceptions.add(ret.convert(exception));
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<String> getTabList(CommandSender sender, String arg)
|
|
||||||
{
|
|
||||||
if (arg.contains(" "))
|
|
||||||
{
|
|
||||||
return this.getTypeElements().getTabList(sender, arg.substring(arg.indexOf(' ')));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return TypeBoolean.getTrue().getTabList(sender, arg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean allowSpaceAfterTab()
|
|
||||||
{
|
|
||||||
return this.getTypeElements().allowSpaceAfterTab();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package com.massivecraft.massivecore.nms;
|
package com.massivecraft.massivecore.nms;
|
||||||
|
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
import com.google.common.collect.BiMap;
|
import com.google.common.collect.BiMap;
|
||||||
@ -11,14 +13,14 @@ import com.google.common.collect.ImmutableBiMap;
|
|||||||
import com.massivecraft.massivecore.particleeffect.ReflectionUtils.PackageType;
|
import com.massivecraft.massivecore.particleeffect.ReflectionUtils.PackageType;
|
||||||
import com.massivecraft.massivecore.util.ReflectionUtil;
|
import com.massivecraft.massivecore.util.ReflectionUtil;
|
||||||
|
|
||||||
public class NmsTeamColor extends NmsAbstract
|
public class NmsBoard extends NmsAbstract
|
||||||
{
|
{
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// INSTANCE & CONSTRUCT
|
// INSTANCE & CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private static NmsTeamColor i = new NmsTeamColor();
|
private static NmsBoard i = new NmsBoard();
|
||||||
public static NmsTeamColor get () { return i; }
|
public static NmsBoard get () { return i; }
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// FIELDS
|
// FIELDS
|
||||||
@ -45,6 +47,12 @@ public class NmsTeamColor extends NmsAbstract
|
|||||||
// net.minecraft.server.EnumChatFormat.a(int i) <-- for code
|
// net.minecraft.server.EnumChatFormat.a(int i) <-- for code
|
||||||
private Method methodNmsColorFor;
|
private Method methodNmsColorFor;
|
||||||
|
|
||||||
|
// net.minecraft.server.PacketPlayOutScoreboardTeam
|
||||||
|
private Class<?> classPacketTeam;
|
||||||
|
|
||||||
|
// net.minecraft.server.PacketPlayOutScoreboardTeam(ScoreboardTeam, int)
|
||||||
|
private Constructor<?> constructorPacketTeamUpdate;
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OVERRIDE
|
// OVERRIDE
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -67,27 +75,30 @@ public class NmsTeamColor extends NmsAbstract
|
|||||||
this.classNmsColor = PackageType.MINECRAFT_SERVER.getClass("EnumChatFormat");
|
this.classNmsColor = PackageType.MINECRAFT_SERVER.getClass("EnumChatFormat");
|
||||||
this.fieldNmsColorCode = ReflectionUtil.getField(this.classNmsColor, "C");
|
this.fieldNmsColorCode = ReflectionUtil.getField(this.classNmsColor, "C");
|
||||||
this.methodNmsColorFor = ReflectionUtil.getMethod(this.classNmsColor, "a", int.class);
|
this.methodNmsColorFor = ReflectionUtil.getMethod(this.classNmsColor, "a", int.class);
|
||||||
|
|
||||||
|
this.classPacketTeam = PackageType.MINECRAFT_SERVER.getClass("PacketPlayOutScoreboardTeam");
|
||||||
|
this.constructorPacketTeamUpdate = ReflectionUtil.getConstructor(this.classPacketTeam, this.classNmsTeam, int.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// ACCESS
|
// ACCESS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public ChatColor get(Team team)
|
public ChatColor getColor(Team team)
|
||||||
{
|
{
|
||||||
if ( ! this.isAvailable()) return null;
|
if ( ! this.isAvailable()) return null;
|
||||||
|
|
||||||
Object nmsTeam = convertTeam(team);
|
Object nmsTeam = getTeamHandle(team);
|
||||||
Object nmsColor = ReflectionUtil.getField(this.fieldNmsTeamColor, nmsTeam);
|
Object nmsColor = ReflectionUtil.getField(this.fieldNmsTeamColor, nmsTeam);
|
||||||
|
|
||||||
return convertColor(nmsColor);
|
return convertColor(nmsColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(Team team, ChatColor color)
|
public void setColor(Team team, ChatColor color)
|
||||||
{
|
{
|
||||||
if ( ! this.isAvailable()) return;
|
if ( ! this.isAvailable()) return;
|
||||||
|
|
||||||
Object nmsTeam = convertTeam(team);
|
Object nmsTeam = getTeamHandle(team);
|
||||||
Object nmsColor = convertColor(color);
|
Object nmsColor = convertColor(color);
|
||||||
ReflectionUtil.setField(this.fieldNmsTeamColor, nmsTeam, nmsColor);
|
ReflectionUtil.setField(this.fieldNmsTeamColor, nmsTeam, nmsColor);
|
||||||
|
|
||||||
@ -97,26 +108,46 @@ public class NmsTeamColor extends NmsAbstract
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONVERT TEAM
|
// TEAM
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private Object convertTeam(Team team)
|
public <T> T getTeamHandle(Team team)
|
||||||
{
|
{
|
||||||
return ReflectionUtil.getField(this.fieldCraftTeamHandle, team);
|
return ReflectionUtil.getField(this.fieldCraftTeamHandle, team);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONVERT COLOR
|
// PACKET
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private ChatColor convertColor(Object nms)
|
// This is a magic NMS value for the packet constructor.
|
||||||
|
// 2 simply means update exiting team rather than creating a new one.
|
||||||
|
private static final int PACKET_UPDATE_MODE = 2;
|
||||||
|
|
||||||
|
public <T> T createTeamUpdatePacket(Team team)
|
||||||
|
{
|
||||||
|
Object handle = getTeamHandle(team);
|
||||||
|
return ReflectionUtil.invokeConstructor(this.constructorPacketTeamUpdate, handle, PACKET_UPDATE_MODE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendTeamUpdatePacket(Team team, Player player)
|
||||||
|
{
|
||||||
|
Object packet = this.createTeamUpdatePacket(team);
|
||||||
|
NmsPacket.sendPacket(player, packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// COLOR > CONVERT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public ChatColor convertColor(Object nms)
|
||||||
{
|
{
|
||||||
if (nms == null) return null;
|
if (nms == null) return null;
|
||||||
int code = ReflectionUtil.getField(this.fieldNmsColorCode, nms);
|
int code = ReflectionUtil.getField(this.fieldNmsColorCode, nms);
|
||||||
return code(code);
|
return code(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object convertColor(ChatColor bukkit)
|
public <T> T convertColor(ChatColor bukkit)
|
||||||
{
|
{
|
||||||
if (bukkit == null) return null;
|
if (bukkit == null) return null;
|
||||||
int code = code(bukkit);
|
int code = code(bukkit);
|
||||||
@ -124,24 +155,24 @@ public class NmsTeamColor extends NmsAbstract
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CODE
|
// COLOR > CODE
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
private static ChatColor code(int code)
|
public static ChatColor code(int code)
|
||||||
{
|
{
|
||||||
ChatColor ret = COLOR_TO_CODE.inverse().get(code);
|
ChatColor ret = COLOR_TO_CODE.inverse().get(code);
|
||||||
if (ret == null) throw new IllegalArgumentException("Unsupported Code " + code);
|
if (ret == null) throw new IllegalArgumentException("Unsupported Code " + code);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int code(ChatColor color)
|
public static int code(ChatColor color)
|
||||||
{
|
{
|
||||||
Integer ret = COLOR_TO_CODE.get(color);
|
Integer ret = COLOR_TO_CODE.get(color);
|
||||||
if (ret == null) throw new IllegalArgumentException("Unsupported Color " + color);
|
if (ret == null) throw new IllegalArgumentException("Unsupported Color " + color);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final BiMap<ChatColor, Integer> COLOR_TO_CODE = ImmutableBiMap.<ChatColor, Integer>builder()
|
public static final BiMap<ChatColor, Integer> COLOR_TO_CODE = ImmutableBiMap.<ChatColor, Integer>builder()
|
||||||
.put(ChatColor.BLACK, 0)
|
.put(ChatColor.BLACK, 0)
|
||||||
.put(ChatColor.DARK_BLUE, 1)
|
.put(ChatColor.DARK_BLUE, 1)
|
||||||
.put(ChatColor.DARK_GREEN, 2)
|
.put(ChatColor.DARK_GREEN, 2)
|
@ -4,6 +4,7 @@ import java.lang.reflect.Constructor;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import com.massivecraft.massivecore.util.ReflectionUtil;
|
||||||
import com.massivecraft.massivecore.util.Txt;
|
import com.massivecraft.massivecore.util.Txt;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
@ -242,14 +243,21 @@ public final class NmsPacket extends NmsAbstract
|
|||||||
// UTIL
|
// UTIL
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public static void sendPacket(Player player, Object packet) throws Exception
|
public static void sendPacket(Player player, Object packet)
|
||||||
{
|
{
|
||||||
sendPacket.invoke(getPlayerConnection(player), packet);
|
Object connection = getPlayerConnection(player);
|
||||||
|
ReflectionUtil.invokeMethod(sendPacket, connection, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Object getPlayerConnection(Player player) throws Exception
|
public static <T> T getPlayerConnection(Player player)
|
||||||
{
|
{
|
||||||
return playerConnection.get(getHandle.invoke(player));
|
Object handle = getHandle(player);
|
||||||
|
return ReflectionUtil.getField(playerConnection, handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> T getHandle(Player player)
|
||||||
|
{
|
||||||
|
return ReflectionUtil.invokeMethod(getHandle, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Object toChatBaseComponent(String str) throws Exception
|
public static Object toChatBaseComponent(String str) throws Exception
|
||||||
|
@ -26,7 +26,7 @@ import com.massivecraft.massivecore.Engine;
|
|||||||
import com.massivecraft.massivecore.collections.MassiveList;
|
import com.massivecraft.massivecore.collections.MassiveList;
|
||||||
import com.massivecraft.massivecore.collections.MassiveMap;
|
import com.massivecraft.massivecore.collections.MassiveMap;
|
||||||
import com.massivecraft.massivecore.collections.MassiveSet;
|
import com.massivecraft.massivecore.collections.MassiveSet;
|
||||||
import com.massivecraft.massivecore.nms.NmsTeamColor;
|
import com.massivecraft.massivecore.nms.NmsBoard;
|
||||||
|
|
||||||
// # RESEARCH > CLEANUP
|
// # RESEARCH > CLEANUP
|
||||||
// The main server scoreboard is the only one that is saved to NBT.
|
// The main server scoreboard is the only one that is saved to NBT.
|
||||||
@ -320,6 +320,25 @@ public class BoardUtil extends Engine
|
|||||||
return getBoardOur().equals(board);
|
return getBoardOur().equals(board);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// BOARD > TEMPORARY
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// This board is used for the construction of lies and bogus only.
|
||||||
|
// It should never ever be directly assigned to a player.
|
||||||
|
|
||||||
|
private static Scoreboard BOARD_TEMPORARY = null;
|
||||||
|
|
||||||
|
public static Scoreboard getBoardTemporary()
|
||||||
|
{
|
||||||
|
if (BOARD_TEMPORARY == null) BOARD_TEMPORARY = Bukkit.getScoreboardManager().getNewScoreboard();
|
||||||
|
return BOARD_TEMPORARY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isBoardTemporary(Scoreboard board)
|
||||||
|
{
|
||||||
|
return getBoardOur().equals(board);
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OBJECTIVE
|
// OBJECTIVE
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -333,10 +352,10 @@ public class BoardUtil extends Engine
|
|||||||
return board.registerNewObjective(id, OBJECTIVE_CRITERIA_DUMMY);
|
return board.registerNewObjective(id, OBJECTIVE_CRITERIA_DUMMY);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Objective createObjective(Scoreboard board, String id, boolean persistent, String name, DisplaySlot slot, Map<String, Integer> entries)
|
public static Objective getObjective(Scoreboard board, String id, boolean creative)
|
||||||
{
|
{
|
||||||
Objective objective = createObjective(board, id);
|
Objective objective = board.getObjective(id);
|
||||||
setObjective(objective, persistent, name, slot, entries);
|
if (objective == null && creative) createObjective(board, id);
|
||||||
return objective;
|
return objective;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,21 +379,6 @@ public class BoardUtil extends Engine
|
|||||||
deleteObjective(objective);
|
deleteObjective(objective);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Objective getObjective(Scoreboard board, String id, boolean creative)
|
|
||||||
{
|
|
||||||
Objective objective = board.getObjective(id);
|
|
||||||
if (objective == null && creative) createObjective(board, id);
|
|
||||||
return objective;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Objective getObjective(Scoreboard board, String id, boolean creative, Boolean persistent, String name, DisplaySlot slot, Map<String, Integer> entries)
|
|
||||||
{
|
|
||||||
Objective objective = getObjective(board, id, creative);
|
|
||||||
if (objective == null) return null;
|
|
||||||
setObjective(objective, persistent, name, slot, entries);
|
|
||||||
return objective;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setObjective(Objective objective, Boolean persistent, String name, DisplaySlot slot, Map<String, Integer> entries)
|
public static void setObjective(Objective objective, Boolean persistent, String name, DisplaySlot slot, Map<String, Integer> entries)
|
||||||
{
|
{
|
||||||
setObjectivePersistent(objective, persistent);
|
setObjectivePersistent(objective, persistent);
|
||||||
@ -383,6 +387,16 @@ public class BoardUtil extends Engine
|
|||||||
setObjectiveEntries(objective, entries);
|
setObjectiveEntries(objective, entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setObjective(Objective objective, Objective blueprint)
|
||||||
|
{
|
||||||
|
setObjective(objective,
|
||||||
|
isObjectivePersistent(blueprint),
|
||||||
|
getObjectiveName(blueprint),
|
||||||
|
getObjectiveSlot(blueprint),
|
||||||
|
getObjectiveEntries(blueprint)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OBJECTIVE > ID
|
// OBJECTIVE > ID
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -533,10 +547,10 @@ public class BoardUtil extends Engine
|
|||||||
return board.registerNewTeam(id);
|
return board.registerNewTeam(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Team createTeam(Scoreboard board, String id, Boolean persistent, String name, String prefix, String suffix, ChatColor color, Boolean friendlyFireEnabled, Boolean friendlyTruesightEnabled, Map<Option, OptionStatus> options, Set<String> members)
|
public static Team getTeam(Scoreboard board, String id, boolean creative)
|
||||||
{
|
{
|
||||||
Team team = createTeam(board, id);
|
Team team = board.getTeam(id);
|
||||||
setTeam(team, persistent, name, prefix, suffix, color, friendlyFireEnabled, friendlyTruesightEnabled, options, members);
|
if (team == null && creative) team = createTeam(board, id);
|
||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -560,21 +574,6 @@ public class BoardUtil extends Engine
|
|||||||
deleteTeam(team);
|
deleteTeam(team);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Team getTeam(Scoreboard board, String id, boolean creative)
|
|
||||||
{
|
|
||||||
Team team = board.getTeam(id);
|
|
||||||
if (team == null && creative) team = createTeam(board, id);
|
|
||||||
return team;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Team getTeam(Scoreboard board, String id, boolean creative, Boolean persistent, String name, String prefix, String suffix, ChatColor color, Boolean friendlyFireEnabled, Boolean friendlyTruesightEnabled, Map<Option, OptionStatus> options, Set<String> members)
|
|
||||||
{
|
|
||||||
Team team = getTeam(board, id, creative);
|
|
||||||
if (team == null) return null;
|
|
||||||
setTeam(team, persistent, name, prefix, suffix, color, friendlyFireEnabled, friendlyTruesightEnabled, options, members);
|
|
||||||
return team;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setTeam(Team team, Boolean persistent, String name, String prefix, String suffix, ChatColor color, Boolean friendlyFireEnabled, Boolean friendlyTruesightEnabled, Map<Option, OptionStatus> options, Set<String> members)
|
public static void setTeam(Team team, Boolean persistent, String name, String prefix, String suffix, ChatColor color, Boolean friendlyFireEnabled, Boolean friendlyTruesightEnabled, Map<Option, OptionStatus> options, Set<String> members)
|
||||||
{
|
{
|
||||||
setTeamPersistent(team, persistent);
|
setTeamPersistent(team, persistent);
|
||||||
@ -588,6 +587,30 @@ public class BoardUtil extends Engine
|
|||||||
setTeamMembers(team, members);
|
setTeamMembers(team, members);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setTeam(Team team, Team blueprint)
|
||||||
|
{
|
||||||
|
setTeam(team,
|
||||||
|
isTeamPersistent(blueprint),
|
||||||
|
getTeamName(blueprint),
|
||||||
|
getTeamPrefix(blueprint),
|
||||||
|
getTeamSuffix(blueprint),
|
||||||
|
getTeamColor(blueprint),
|
||||||
|
isTeamFriendlyFireEnabled(blueprint),
|
||||||
|
isTeamFriendlyTruesightEnabled(blueprint),
|
||||||
|
getTeamOptions(blueprint),
|
||||||
|
getTeamMembers(blueprint)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// TEAM > SEND
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static void sendTeamUpdate(Team team, Player player)
|
||||||
|
{
|
||||||
|
NmsBoard.get().sendTeamUpdatePacket(team, player);
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// TEAM > ID
|
// TEAM > ID
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -679,7 +702,7 @@ public class BoardUtil extends Engine
|
|||||||
|
|
||||||
public static ChatColor getTeamColor(Team team)
|
public static ChatColor getTeamColor(Team team)
|
||||||
{
|
{
|
||||||
return NmsTeamColor.get().get(team);
|
return NmsBoard.get().getColor(team);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setTeamColor(Team team, ChatColor color)
|
public static void setTeamColor(Team team, ChatColor color)
|
||||||
@ -687,7 +710,7 @@ public class BoardUtil extends Engine
|
|||||||
if (color == null) return;
|
if (color == null) return;
|
||||||
ChatColor before = getTeamColor(team);
|
ChatColor before = getTeamColor(team);
|
||||||
if (MUtil.equals(before, color)) return;
|
if (MUtil.equals(before, color)) return;
|
||||||
NmsTeamColor.get().set(team, color);
|
NmsBoard.get().setColor(team, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -869,7 +892,11 @@ public class BoardUtil extends Engine
|
|||||||
|
|
||||||
public static Team createPersonalTeam(Scoreboard board, Object key)
|
public static Team createPersonalTeam(Scoreboard board, Object key)
|
||||||
{
|
{
|
||||||
|
// Create
|
||||||
String id = getKey(key);
|
String id = getKey(key);
|
||||||
|
Team team = createTeam(board, id);
|
||||||
|
|
||||||
|
// Fill
|
||||||
Boolean persistent = PERSONAL_DEFAULT_PERSISTENT;
|
Boolean persistent = PERSONAL_DEFAULT_PERSISTENT;
|
||||||
String name = PERSONAL_DEFAULT_NAME;
|
String name = PERSONAL_DEFAULT_NAME;
|
||||||
String prefix = PERSONAL_DEFAULT_PREFIX;
|
String prefix = PERSONAL_DEFAULT_PREFIX;
|
||||||
@ -879,7 +906,11 @@ public class BoardUtil extends Engine
|
|||||||
Boolean friendlyTruesightEnabled = PERSONAL_DEFAULT_FRIENDLY_TRUESIGHT_ENABLED;
|
Boolean friendlyTruesightEnabled = PERSONAL_DEFAULT_FRIENDLY_TRUESIGHT_ENABLED;
|
||||||
Map<Option, OptionStatus> options = PERSONAL_DEFAULT_OPTIONS;
|
Map<Option, OptionStatus> options = PERSONAL_DEFAULT_OPTIONS;
|
||||||
Set<String> members = Collections.singleton(id);
|
Set<String> members = Collections.singleton(id);
|
||||||
return createTeam(board, id, persistent, name, prefix, suffix, color, friendlyFireEnabled, friendlyTruesightEnabled, options, members);
|
|
||||||
|
setTeam(team, persistent, name, prefix, suffix, color, friendlyFireEnabled, friendlyTruesightEnabled, options, members);
|
||||||
|
|
||||||
|
// Return
|
||||||
|
return team;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Team getPersonalTeam(Scoreboard board, Object key, boolean creative)
|
public static Team getPersonalTeam(Scoreboard board, Object key, boolean creative)
|
||||||
|
Loading…
Reference in New Issue
Block a user