diff --git a/src/main/java/buttondevteam/core/MainPlugin.java b/src/main/java/buttondevteam/core/MainPlugin.java index b8ae2da..966505b 100644 --- a/src/main/java/buttondevteam/core/MainPlugin.java +++ b/src/main/java/buttondevteam/core/MainPlugin.java @@ -36,8 +36,9 @@ public class MainPlugin extends JavaPlugin { TBMCCoreAPI.RegisterEventsForExceptions(new PlayerListener(), this); TBMCCoreAPI.RegisterUserClass(TBMCPlayerBase.class); TBMCChatAPI.RegisterChatChannel(Channel.GlobalChat = new Channel("§fg§f", Color.White, "g", null)); - TBMCChatAPI.RegisterChatChannel( - Channel.AdminChat = new Channel("§cADMIN§f", Color.Red, "a", s -> s.isOp() ? new RecipientTestResult(0) + TBMCChatAPI.RegisterChatChannel(Channel.AdminChat = new Channel("§cADMIN§f", Color.Red, "a", + s -> s.isOp() // + ? new RecipientTestResult(0) : new RecipientTestResult("You need to be an admin to use this channel."))); TBMCChatAPI.RegisterChatChannel(Channel.ModChat = new Channel("§9MOD§f", Color.Blue, "mod", s -> s.isOp() || (s instanceof Player && MainPlugin.permission.playerInGroup((Player) s, "mod")) diff --git a/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java b/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java index 5d7b1b1..beff3a4 100644 --- a/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java +++ b/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java @@ -205,11 +205,11 @@ public abstract class ChromaGamerBase implements AutoCloseable { * @return A data object with methods to get and set */ @SuppressWarnings("unchecked") - protected PlayerData data(String sectionname) { + protected PlayerData data(String sectionname, T def) { ThrowIfNoUser(); String mname = sectionname + "." + new Exception().getStackTrace()[2].getMethodName(); if (!datamap.containsKey(mname)) - datamap.put(mname, new PlayerData(mname, plugindata)); + datamap.put(mname, new PlayerData(mname, plugindata, def)); return datamap.get(mname); } @@ -219,11 +219,11 @@ public abstract class ChromaGamerBase implements AutoCloseable { * @return A data object with methods to get and set */ @SuppressWarnings("unchecked") - protected PlayerData data() { + protected PlayerData data(T def) { ThrowIfNoUser(); String mname = new Exception().getStackTrace()[1].getMethodName(); if (!datamap.containsKey(mname)) - datamap.put(mname, new PlayerData(mname, plugindata)); + datamap.put(mname, new PlayerData(mname, plugindata, def)); return datamap.get(mname); } @@ -236,11 +236,11 @@ public abstract class ChromaGamerBase implements AutoCloseable { * @return A data object with methods to get and set */ @SuppressWarnings("unchecked") - protected > EnumPlayerData dataEnum(String sectionname, Class cl) { + protected > EnumPlayerData dataEnum(String sectionname, Class cl, T def) { ThrowIfNoUser(); String mname = sectionname + "." + new Exception().getStackTrace()[2].getMethodName(); if (!dataenummap.containsKey(mname)) - dataenummap.put(mname, new EnumPlayerData(mname, plugindata, cl)); + dataenummap.put(mname, new EnumPlayerData(mname, plugindata, cl, def)); return dataenummap.get(mname); } @@ -250,11 +250,11 @@ public abstract class ChromaGamerBase implements AutoCloseable { * @return A data object with methods to get and set */ @SuppressWarnings("unchecked") - protected > EnumPlayerData dataEnum(Class cl) { + protected > EnumPlayerData dataEnum(Class cl, T def) { ThrowIfNoUser(); String mname = new Exception().getStackTrace()[1].getMethodName(); if (!dataenummap.containsKey(mname)) - dataenummap.put(mname, new EnumPlayerData(mname, plugindata, cl)); + dataenummap.put(mname, new EnumPlayerData(mname, plugindata, cl, def)); return dataenummap.get(mname); } diff --git a/src/main/java/buttondevteam/lib/player/EnumPlayerData.java b/src/main/java/buttondevteam/lib/player/EnumPlayerData.java index fcc31af..ddade7a 100644 --- a/src/main/java/buttondevteam/lib/player/EnumPlayerData.java +++ b/src/main/java/buttondevteam/lib/player/EnumPlayerData.java @@ -5,25 +5,22 @@ import org.bukkit.configuration.file.YamlConfiguration; public class EnumPlayerData> { private PlayerData data; private Class cl; + private T def; - public EnumPlayerData(String name, YamlConfiguration yaml, Class cl) { - data = new PlayerData(name, yaml); + public EnumPlayerData(String name, YamlConfiguration yaml, Class cl, T def) { + data = new PlayerData(name, yaml, ""); this.cl = cl; + this.def = def; } public T get() { String str = data.get(); - if (str == null || str.equals("")) - return null; + if (str.isEmpty()) + return def; return Enum.valueOf(cl, str); } public void set(T value) { data.set(value.toString()); } - - public T getOrDefault(T def) { - T value = get(); - return value == null ? def : value; - } } diff --git a/src/main/java/buttondevteam/lib/player/PlayerData.java b/src/main/java/buttondevteam/lib/player/PlayerData.java index 05d68ca..d9af642 100644 --- a/src/main/java/buttondevteam/lib/player/PlayerData.java +++ b/src/main/java/buttondevteam/lib/player/PlayerData.java @@ -5,15 +5,24 @@ import org.bukkit.configuration.file.YamlConfiguration; public class PlayerData { private String name; private YamlConfiguration yaml; + private T def; - public PlayerData(String name, YamlConfiguration yaml) { + public PlayerData(String name, YamlConfiguration yaml, T def) { this.name = name; this.yaml = yaml; + this.def = def; } @SuppressWarnings("unchecked") + // @Deprecated - What was once enforced (2 days ago from now) vanished now public T get() { - Object value = yaml.get(name); + Object value = yaml.get(name, def); + if (value instanceof Integer) { + if (def instanceof Short) // If the default is Short the value must be as well because both are T + return (T) (Short) ((Integer) value).shortValue(); + if (def instanceof Long) + return (T) (Long) ((Integer) value).longValue(); + } return (T) value; } @@ -21,11 +30,6 @@ public class PlayerData { yaml.set(name, value); } - public T getOrDefault(T def) { - T value = get(); - return value == null ? def : value; - } - @Override public String toString() { return get().toString(); diff --git a/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java b/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java index c1e3400..55613b8 100644 --- a/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java +++ b/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java @@ -38,7 +38,7 @@ public abstract class TBMCPlayerBase extends ChromaGamerBase { } public PlayerData PlayerName() { - return super.data(); + return super.data(null); } /** @@ -47,8 +47,8 @@ public abstract class TBMCPlayerBase extends ChromaGamerBase { * @return A data object with methods to get and set */ @Override - protected PlayerData data() { - return super.data(pluginname); + protected PlayerData data(T def) { + return super.data(pluginname, def); } /** @@ -57,8 +57,8 @@ public abstract class TBMCPlayerBase extends ChromaGamerBase { * @return A data object with methods to get and set */ @Override - protected > EnumPlayerData dataEnum(Class cl) { - return super.dataEnum(pluginname, cl); + protected > EnumPlayerData dataEnum(Class cl, T def) { + return super.dataEnum(pluginname, cl, def); } /** diff --git a/src/test/java/buttondevteam/core/PlayerDataTest.java b/src/test/java/buttondevteam/core/PlayerDataTest.java index 7bf9ed0..298d1c9 100644 --- a/src/test/java/buttondevteam/core/PlayerDataTest.java +++ b/src/test/java/buttondevteam/core/PlayerDataTest.java @@ -1,7 +1,12 @@ package buttondevteam.core; +import java.io.File; import java.util.UUID; + +import org.apache.commons.io.FileUtils; + import buttondevteam.core.TestPlayerClass.TestEnum; +import buttondevteam.lib.player.ChromaGamerBase; import buttondevteam.lib.player.TBMCPlayerBase; import junit.framework.Test; import junit.framework.TestCase; @@ -19,28 +24,32 @@ public class PlayerDataTest extends TestCase { return new TestSuite(PlayerDataTest.class); } - public void testConfig() { + public void testConfig() throws Exception { TestPrepare.PrepareServer(); + FileUtils.deleteDirectory(new File(ChromaGamerBase.TBMC_PLAYERS_DIR)); UUID uuid = new UUID(0L, 0L); try (TestPlayerClass p = TBMCPlayerBase.getPlayer(uuid, TestPlayerClass.class)) { p.PlayerName().set("Test"); assertEquals("Test", p.PlayerName().get()); - p.testenum().set(TestEnum.A); assertEquals(TestEnum.A, p.testenum().get()); - // p.TestShort().set((short) 5); - // assertEquals((short) 5, (short) (int) p.TestShort().get()); + assertEquals((short) 0, (short) p.TestShort().get()); + assertEquals(false, (boolean) p.TestBool().get()); + p.testenum().set(TestEnum.B); + assertEquals(TestEnum.B, p.testenum().get()); + p.TestShort().set((short) 5); + assertEquals((short) 5, (short) p.TestShort().get()); p.TestBool().set(true); assertEquals(true, (boolean) p.TestBool().get()); } catch (Exception e) { - e.printStackTrace(); + throw e; } try (TestPlayerClass p = TBMCPlayerBase.getPlayer(uuid, TestPlayerClass.class)) { assertEquals("Test", p.PlayerName().get()); - assertEquals(TestEnum.A, p.testenum().get()); - // assertEquals((short) 5, (short) p.TestShort().get()); + assertEquals(TestEnum.B, p.testenum().get()); + assertEquals((short) 5, (short) p.TestShort().get()); assertEquals(true, (boolean) p.TestBool().get()); } catch (Exception e) { - e.printStackTrace(); + throw e; } } } diff --git a/src/test/java/buttondevteam/core/TestPlayerClass.java b/src/test/java/buttondevteam/core/TestPlayerClass.java index 7f51c4d..3e1790b 100644 --- a/src/test/java/buttondevteam/core/TestPlayerClass.java +++ b/src/test/java/buttondevteam/core/TestPlayerClass.java @@ -8,7 +8,7 @@ import buttondevteam.lib.player.TBMCPlayerBase; @PlayerClass(pluginname = "TestPlugin") public class TestPlayerClass extends TBMCPlayerBase { public EnumPlayerData testenum() { - return dataEnum(TestEnum.class); + return dataEnum(TestEnum.class, TestEnum.A); } public enum TestEnum { @@ -16,10 +16,10 @@ public class TestPlayerClass extends TBMCPlayerBase { } public PlayerData TestShort() { - return data(); + return data((short) 0); } public PlayerData TestBool() { - return data(); + return data(false); } }