Component disable on error
This commit is contained in:
parent
9dae442950
commit
1139f832b6
4 changed files with 21 additions and 114 deletions
|
@ -119,20 +119,33 @@ public abstract class Component<TP extends JavaPlugin> {
|
|||
}
|
||||
|
||||
/**
|
||||
* Registers a component checking it's dependencies and calling {@link #register(JavaPlugin)}.<br>
|
||||
* Make sure to register the dependencies first.
|
||||
* Enables or disables the given component. If the component fails to enable, it will be disabled.
|
||||
*
|
||||
* @param component The component to register
|
||||
* @param enabled Whether it's enabled or not
|
||||
*/
|
||||
public static void setComponentEnabled(Component<?> component, boolean enabled) throws UnregisteredComponentException {
|
||||
if (!components.containsKey(component.getClass()))
|
||||
throw new UnregisteredComponentException(component);
|
||||
if (component.enabled == enabled) return; //Don't do anything
|
||||
if (component.enabled = enabled) {
|
||||
updateConfig(component.getPlugin(), component);
|
||||
component.enable();
|
||||
if (ButtonPlugin.configGenAllowed(component)) {
|
||||
IHaveConfig.pregenConfig(component, null);
|
||||
try {
|
||||
updateConfig(component.getPlugin(), component);
|
||||
component.enable();
|
||||
if (ButtonPlugin.configGenAllowed(component)) {
|
||||
IHaveConfig.pregenConfig(component, null);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
try { //Automatically disable components that fail to enable properly
|
||||
setComponentEnabled(component, false);
|
||||
throw e;
|
||||
} catch (Exception ex) {
|
||||
Throwable t = ex;
|
||||
for (var th = t; th != null; th = th.getCause())
|
||||
t = th; //Set if not null
|
||||
t.initCause(e);
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
component.disable();
|
||||
|
|
|
@ -22,4 +22,5 @@ softdepend:
|
|||
- Towny
|
||||
- Votifier
|
||||
- Multiverse-Core
|
||||
- Essentials
|
||||
- Essentials
|
||||
api-version: '1.13'
|
||||
|
|
|
@ -1,82 +0,0 @@
|
|||
package buttondevteam.core;
|
||||
|
||||
import buttondevteam.core.TestPlayerClass.TestEnum;
|
||||
import buttondevteam.lib.player.ChromaGamerBase;
|
||||
import buttondevteam.lib.player.TBMCPlayerBase;
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.FileVisitResult;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.SimpleFileVisitor;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PlayerDataTest extends TestCase {
|
||||
public PlayerDataTest() {
|
||||
super("Player data test");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite() {
|
||||
return new TestSuite(PlayerDataTest.class);
|
||||
}
|
||||
|
||||
public void testConfig() throws Exception {
|
||||
TestPrepare.PrepareServer();
|
||||
//FileUtils.deleteDirectory(new File(ChromaGamerBase.TBMC_PLAYERS_DIR));
|
||||
File file = new File(ChromaGamerBase.TBMC_PLAYERS_DIR);
|
||||
if (file.exists()) {
|
||||
Files.walkFileTree(file.toPath(), new SimpleFileVisitor<Path>() {
|
||||
@Override
|
||||
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
|
||||
throws IOException {
|
||||
Files.delete(file);
|
||||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileVisitResult postVisitDirectory(Path dir, IOException e)
|
||||
throws IOException {
|
||||
if (e == null) {
|
||||
Files.delete(dir);
|
||||
return FileVisitResult.CONTINUE;
|
||||
} else {
|
||||
// directory iteration failed
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
UUID uuid = new UUID(0L, 0L);
|
||||
try (TestPlayerClass p = TBMCPlayerBase.getPlayer(uuid, TestPlayerClass.class)) {
|
||||
p.PlayerName().set("Test");
|
||||
assertEquals("Test", p.PlayerName().get());
|
||||
assertEquals(TestEnum.A, p.testenum().get());
|
||||
assertEquals((short) 0, (short) p.TestShort().get());
|
||||
assertFalse(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);
|
||||
assertTrue(p.TestBool().get());
|
||||
} catch (Exception e) {
|
||||
throw e;
|
||||
}
|
||||
try (TestPlayerClass p = TBMCPlayerBase.getPlayer(uuid, TestPlayerClass.class)) {
|
||||
assertEquals("Test", p.PlayerName().get());
|
||||
assertEquals(TestEnum.B, p.testenum().get());
|
||||
assertEquals((short) 5, (short) p.TestShort().get());
|
||||
assertTrue(p.TestBool().get());
|
||||
} catch (Exception e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
package buttondevteam.core;
|
||||
|
||||
import buttondevteam.lib.player.EnumPlayerData;
|
||||
import buttondevteam.lib.player.PlayerClass;
|
||||
import buttondevteam.lib.player.PlayerData;
|
||||
import buttondevteam.lib.player.TBMCPlayerBase;
|
||||
|
||||
@PlayerClass(pluginname = "TestPlugin")
|
||||
public class TestPlayerClass extends TBMCPlayerBase {
|
||||
public EnumPlayerData<TestEnum> testenum() {
|
||||
return dataEnum(TestEnum.class, TestEnum.A);
|
||||
}
|
||||
|
||||
public enum TestEnum {
|
||||
A, B
|
||||
}
|
||||
|
||||
public PlayerData<Short> TestShort() {
|
||||
return data((short) 0);
|
||||
}
|
||||
|
||||
public PlayerData<Boolean> TestBool() {
|
||||
return data(false);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue