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>
|
* Enables or disables the given component. If the component fails to enable, it will be disabled.
|
||||||
* Make sure to register the dependencies first.
|
|
||||||
*
|
*
|
||||||
* @param component The component to register
|
* @param component The component to register
|
||||||
|
* @param enabled Whether it's enabled or not
|
||||||
*/
|
*/
|
||||||
public static void setComponentEnabled(Component<?> component, boolean enabled) throws UnregisteredComponentException {
|
public static void setComponentEnabled(Component<?> component, boolean enabled) throws UnregisteredComponentException {
|
||||||
if (!components.containsKey(component.getClass()))
|
if (!components.containsKey(component.getClass()))
|
||||||
throw new UnregisteredComponentException(component);
|
throw new UnregisteredComponentException(component);
|
||||||
if (component.enabled == enabled) return; //Don't do anything
|
if (component.enabled == enabled) return; //Don't do anything
|
||||||
if (component.enabled = enabled) {
|
if (component.enabled = enabled) {
|
||||||
updateConfig(component.getPlugin(), component);
|
try {
|
||||||
component.enable();
|
updateConfig(component.getPlugin(), component);
|
||||||
if (ButtonPlugin.configGenAllowed(component)) {
|
component.enable();
|
||||||
IHaveConfig.pregenConfig(component, null);
|
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 {
|
} else {
|
||||||
component.disable();
|
component.disable();
|
||||||
|
|
|
@ -22,4 +22,5 @@ softdepend:
|
||||||
- Towny
|
- Towny
|
||||||
- Votifier
|
- Votifier
|
||||||
- Multiverse-Core
|
- 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