Skip to content

Commit a0b8c70

Browse files
committed
Push many many changes
1 parent 01bb777 commit a0b8c70

File tree

84 files changed

+3320
-1070
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+3320
-1070
lines changed

API/build.gradle

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,55 @@
1-
plugins {
2-
id 'java'
3-
}
4-
5-
repositories {
6-
mavenCentral()
7-
8-
}
9-
10-
dependencies {
11-
12-
}
13-
14-
jar {
15-
destinationDirectory = file("$rootProject.rootDir/output")
1+
plugins {
2+
id 'java'
3+
id "io.github.goooler.shadow" version "8.1.8"
4+
}
5+
6+
repositories {
7+
mavenCentral()
8+
}
9+
10+
configurations {
11+
shadow
12+
}
13+
14+
dependencies {
15+
shadow "org.spongepowered:configurate-hocon:4.1.2"
16+
}
17+
18+
tasks.build.dependsOn tasks.shadowJar
19+
20+
shadowJar {
21+
configurations = [project.configurations.shadow]
22+
archiveClassifier = ''
23+
destinationDirectory = file("$rootProject.rootDir/output")
24+
}
25+
26+
def templateSource = file('src/main/java')
27+
def templateDest = layout.buildDirectory.dir('generatedJavaSrc')
28+
def generateTemplates = tasks.register('generateTemplates', Copy) { task ->
29+
def props = [
30+
'version': project.version,
31+
'name': rootProject.modin_name,
32+
'id': rootProject.modin_id,
33+
'description': rootProject.modin_description,
34+
'website': rootProject.modin_website,
35+
'source': rootProject.modin_source,
36+
'issues': rootProject.modin_issues,
37+
'license': rootProject.modin_license
38+
]
39+
task.inputs.properties props
40+
41+
task.from templateSource
42+
task.into templateDest
43+
task.expand props
44+
}
45+
46+
sourceSets.main.java.srcDirs = ["src/main/java"]
47+
48+
compileJava.dependsOn(generateTemplates)
49+
compileJava.mustRunAfter(generateTemplates)
50+
compileJava.doFirst {
51+
sourceSets.main.java.srcDirs = ["build/generatedJavaSrc"]
52+
}
53+
compileJava.doLast {
54+
sourceSets.main.java.srcDirs = ["src/main/java"]
1655
}
Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,35 @@
1-
package net.kore.pronouns.api;
2-
3-
import net.kore.pronouns.api.provider.PlatformProvider;
4-
5-
public class InstanceHolder {
6-
private static PlatformProvider platformProvider;
7-
public static PlatformProvider getPlatformProvider() {
8-
if (platformProvider == null) throw new IllegalStateException("No PlatformProvider given.");
9-
return platformProvider;
10-
}
11-
12-
public static void setPlatformProvider(PlatformProvider provider) {
13-
if (platformProvider != null) throw new IllegalStateException("PlatformProvider already given!");
14-
platformProvider = provider;
15-
}
16-
}
1+
package net.kore.pronouns.api;
2+
3+
import net.kore.pronouns.api.config.PronounConfig;
4+
import net.kore.pronouns.api.provider.IPlatformProvider;
5+
6+
public class InstanceHolder {
7+
private static IPlatformProvider platformProvider;
8+
public static IPlatformProvider getPlatformProvider() {
9+
if (platformProvider == null) throw new IllegalStateException("No PlatformProvider given.");
10+
return platformProvider;
11+
}
12+
13+
public static void setPlatformProvider(IPlatformProvider provider) {
14+
if (platformProvider != null) throw new IllegalStateException("PlatformProvider already given!");
15+
platformProvider = provider;
16+
}
17+
18+
private static PronounConfig pronounConfig;
19+
public static PronounConfig getPronounConfig() {
20+
if (pronounConfig == null) {
21+
try {
22+
pronounConfig = platformProvider.getConfig();
23+
} catch (Exception e) {
24+
pronounConfig = new PronounConfig();
25+
platformProvider.error("Unable to load config file, loading in a default. Error provided below.");
26+
platformProvider.printThrowable(e);
27+
}
28+
}
29+
return pronounConfig;
30+
}
31+
32+
public static void setPronounConfig(PronounConfig pronounConfig) {
33+
InstanceHolder.pronounConfig = pronounConfig;
34+
}
35+
}
Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
package net.kore.pronouns.api;
2-
3-
import net.kore.pronouns.api.data.AccountData;
4-
5-
import java.util.List;
6-
import java.util.UUID;
7-
import java.util.concurrent.CompletableFuture;
8-
9-
public class PronounsAPI {
10-
public static CompletableFuture<AccountData> getPronounDBAccount(UUID uuid) {
11-
return InstanceHolder.getPlatformProvider().getPronounDBAccount(uuid);
12-
}
13-
14-
public static CompletableFuture<List<AccountData>> getPronounDBAccounts(UUID... uuids) {
15-
return InstanceHolder.getPlatformProvider().getPronounDBAccounts(uuids);
16-
}
17-
}
1+
package net.kore.pronouns.api;
2+
3+
import net.kore.pronouns.api.data.AccountData;
4+
5+
import java.util.List;
6+
import java.util.UUID;
7+
import java.util.concurrent.CompletableFuture;
8+
9+
public class PronounsAPI {
10+
public static CompletableFuture<AccountData> getPronounDBAccount(UUID uuid) {
11+
return InstanceHolder.getPlatformProvider().getPronounAccount(uuid);
12+
}
13+
14+
public static CompletableFuture<List<AccountData>> getPronounDBAccounts(UUID... uuids) {
15+
return InstanceHolder.getPlatformProvider().getPronounAccounts(uuids);
16+
}
17+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package net.kore.pronouns.api;
2+
3+
public class PronounsMeta {
4+
public static final String ID = "${id}";
5+
public static final String NAME = "${name}";
6+
public static final String VERSION = "${version}";
7+
public static final String DESCRIPTION = "${description}";
8+
public static final String WEBSITE = "${website}";
9+
public static final String SOURCE = "${source}";
10+
public static final String ISSUES = "${issues}";
11+
public static final String LICENSE = "${license}";
12+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package net.kore.pronouns.api.config;
2+
3+
import net.kore.pronouns.api.data.AccountData;
4+
import net.kore.pronouns.api.data.DecorationData;
5+
import net.kore.pronouns.api.data.PronounData;
6+
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
7+
8+
import java.util.UUID;
9+
10+
@ConfigSerializable
11+
public class AccountObject {
12+
public PronounData p1;
13+
public PronounData p2;
14+
public PronounData p3;
15+
16+
public DecorationData d;
17+
18+
public AccountData getAccountData(UUID uuid) {
19+
return new AccountData(uuid, p1, p2, p3, d);
20+
}
21+
22+
public static AccountObject fromAccountData(AccountData accountData) {
23+
AccountObject accountObject = new AccountObject();
24+
accountObject.p1 = accountData.pronoun1();
25+
accountObject.p2 = accountData.pronoun2();
26+
accountObject.p3 = accountData.pronoun3();
27+
accountObject.d = accountData.decorationData();
28+
return accountObject;
29+
}
30+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package net.kore.pronouns.api.config;
2+
3+
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
4+
5+
@ConfigSerializable
6+
public class HOCONConfig {
7+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package net.kore.pronouns.api.config;
2+
3+
import net.kore.pronouns.api.language.LanguageSet;
4+
import net.kore.pronouns.api.language.Languages;
5+
6+
public enum Language {
7+
ENGLISH(Languages.english()),
8+
GERMAN(Languages.german());
9+
10+
private final LanguageSet languageSet;
11+
12+
Language(LanguageSet languageSet) {
13+
this.languageSet = languageSet;
14+
}
15+
16+
public LanguageSet getLanguageSet() {
17+
return languageSet;
18+
}
19+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package net.kore.pronouns.api.config;
2+
3+
import net.kore.pronouns.api.InstanceHolder;
4+
import net.kore.pronouns.api.language.LanguageSet;
5+
import org.spongepowered.configurate.CommentedConfigurationNode;
6+
import org.spongepowered.configurate.hocon.HoconConfigurationLoader;
7+
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
8+
import org.spongepowered.configurate.objectmapping.meta.Comment;
9+
10+
import java.nio.file.Path;
11+
import java.util.UUID;
12+
13+
@ConfigSerializable
14+
public class PronounConfig {
15+
//
16+
// Static helpers
17+
//
18+
public static PronounConfig get() {
19+
return InstanceHolder.getPronounConfig();
20+
}
21+
22+
public static LanguageSet currentLanguage() {
23+
return get().language().getLanguageSet();
24+
}
25+
26+
@Comment(
27+
"""
28+
Only changes on a server restart
29+
PRONOUNDB - Uses PronounDB for all Pronoun fetches, disables the set pronoun command
30+
HOCON - Store user data in a local HOCON file
31+
SQLITE - Store user data in a local DB file
32+
"""
33+
)
34+
private PronounStorageType provider = PronounStorageType.PRONOUNDB;
35+
36+
private Language language = Language.ENGLISH;
37+
38+
private PronounDBConfig pronoundb = new PronounDBConfig();
39+
private HOCONConfig hocon = new HOCONConfig();
40+
private SQLiteConfig sqlite = new SQLiteConfig();
41+
42+
public PronounStorageType provider() {
43+
return provider;
44+
}
45+
46+
public Language language() {
47+
return language;
48+
}
49+
50+
public PronounDBConfig pronoundb() {
51+
return pronoundb;
52+
}
53+
public HOCONConfig hocon() {
54+
return hocon;
55+
}
56+
public SQLiteConfig sqlite() {
57+
return sqlite;
58+
}
59+
60+
//
61+
// Helper methods
62+
//
63+
64+
// Returns NULL if setting pronouns is allowed
65+
public String disallowSetMessageMM() {
66+
String link = pronoundb.homePageLink();
67+
68+
return switch (provider) {
69+
case PRONOUNDB -> "<hover:show_text:'<green>Click to open</green>'><click:OPEN_URL:" + link + ">Set your pronouns at " + pronoundb().displayName() + "</click></hover>";
70+
case HOCON, SQLITE -> null;
71+
};
72+
}
73+
74+
// Returns NULL if nothing went wrong
75+
public String saveAccountObject(UUID uuid, AccountObject accountObject) {
76+
switch (provider) {
77+
case PRONOUNDB -> throw new IllegalStateException("Cannot save an account while using PronounDB.");
78+
case HOCON -> {
79+
Path path = InstanceHolder.getPlatformProvider().getDataPath().resolve("pronouns-player-data.conf");
80+
81+
try {
82+
HoconConfigurationLoader loader = HoconConfigurationLoader.builder().path(path).build();
83+
84+
CommentedConfigurationNode root = loader.load();
85+
86+
root.node(uuid.toString()).set(accountObject);
87+
88+
loader.save(root);
89+
} catch (Exception e) {
90+
InstanceHolder.getPlatformProvider().printThrowable(e);
91+
return "<red>Failed to save data. See console for more detail.";
92+
}
93+
}
94+
case SQLITE -> {
95+
return "<red>SQLite is not finished.";
96+
}
97+
}
98+
return null;
99+
}
100+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package net.kore.pronouns.api.config;
2+
3+
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
4+
5+
@ConfigSerializable
6+
// Not needed, these values can change, the compiler just doesn't know.
7+
@SuppressWarnings({"FieldMayBeFinal", "FieldCanBeLocal"})
8+
public class PronounDBConfig {
9+
private String displayName = "PronounDB";
10+
private String homePageLink = "https://pronoundb.org/";
11+
private String apiLink = "https://pronoundb.org/api/v2";
12+
13+
public String displayName() {
14+
return displayName;
15+
}
16+
17+
public String homePageLink() {
18+
return homePageLink;
19+
}
20+
21+
public String apiLink() {
22+
return apiLink;
23+
}
24+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package net.kore.pronouns.api.config;
2+
3+
public enum PronounStorageType {
4+
PRONOUNDB,
5+
HOCON,
6+
SQLITE
7+
}

0 commit comments

Comments
 (0)