Skip to content

Commit ca5ad2c

Browse files
committed
2. Update town & nation endpoints
1 parent bd088c8 commit ca5ad2c

8 files changed

Lines changed: 285 additions & 32 deletions

File tree

src/main/java/net/earthmc/emcapi/endpoint/towny/NationsEndpoint.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.earthmc.emcapi.endpoint.towny;
22

3+
import com.google.gson.JsonArray;
34
import com.google.gson.JsonElement;
45
import com.google.gson.JsonObject;
56
import com.palmergames.bukkit.towny.TownyAPI;
@@ -10,10 +11,15 @@
1011
import com.palmergames.bukkit.towny.permissions.TownyPerms;
1112
import io.javalin.http.BadRequestResponse;
1213
import net.earthmc.emcapi.EMCAPI;
14+
import net.earthmc.emcapi.integration.EmbargoesIntegration;
15+
import net.earthmc.emcapi.integration.Integrations;
16+
import net.earthmc.emcapi.integration.PactsIntegration;
1317
import net.earthmc.emcapi.manager.NationMetadataManager;
1418
import net.earthmc.emcapi.object.endpoint.PostEndpoint;
1519
import net.earthmc.emcapi.util.EndpointUtils;
1620
import net.earthmc.emcapi.util.JSONUtil;
21+
import net.earthmc.lynchpin.api.towny.embargoes.Embargo;
22+
import net.earthmc.lynchpin.api.towny.pacts.Pact;
1723
import org.jetbrains.annotations.Nullable;
1824

1925
import java.util.List;
@@ -50,6 +56,7 @@ public JsonElement getJsonElement(Nation nation, @Nullable String key) {
5056
nationObject.addProperty("dynmapColour", NationMetadataManager.getDynmapColour(nation));
5157
nationObject.addProperty("dynmapOutline", NationMetadataManager.getDynmapOutline(nation));
5258
nationObject.addProperty("wiki", NationMetadataManager.getWikiURL(nation));
59+
nationObject.addProperty("discord", NationMetadataManager.getDiscordURL(nation));
5360

5461
nationObject.add("king", EndpointUtils.getResidentJsonObject(nation.getKing()));
5562
nationObject.add("capital", EndpointUtils.getTownJsonObject(nation.getCapital()));
@@ -90,6 +97,59 @@ public JsonElement getJsonElement(Nation nation, @Nullable String key) {
9097
}
9198
nationObject.add("ranks", ranksObject);
9299

100+
nationObject.add("embargoes", getEmbargoesObject(nation));
101+
nationObject.add("pacts", getPactsObject(nation));
102+
93103
return nationObject;
94104
}
105+
106+
private JsonObject getEmbargoesObject(Nation nation) {
107+
JsonObject json = new JsonObject();
108+
EmbargoesIntegration integration = Integrations.getIntegration("lynchpin-towny-embargoes");
109+
if (integration == null || !integration.isEnabled()) {
110+
return json;
111+
}
112+
113+
JsonArray byNation = new JsonArray();
114+
JsonArray againstNation = new JsonArray();
115+
for (Embargo embargo : integration.getEmbargoes(nation)) {
116+
if (nation.equals(embargo.getSender())) {
117+
Nation other = embargo.getAgainst();
118+
byNation.add(EndpointUtils.getNationJsonObject(other));
119+
} else {
120+
Nation other = embargo.getSender();
121+
againstNation.add(EndpointUtils.getNationJsonObject(other));
122+
}
123+
}
124+
json.add("own", byNation);
125+
json.add("against", againstNation);
126+
127+
return json;
128+
}
129+
130+
private JsonObject getPactsObject(Nation nation) {
131+
JsonObject json = new JsonObject();
132+
PactsIntegration integration = Integrations.getIntegration("lynchpin-towny-pacts");
133+
if (integration == null || !integration.isEnabled()) {
134+
return json;
135+
}
136+
137+
JsonObject active = new JsonObject();
138+
JsonObject pending = new JsonObject();
139+
140+
for (Pact pact : integration.getActivePacts(nation)) {
141+
Nation other = nation.equals(pact.getSenderNation()) ? pact.getReceivingNation() : pact.getSenderNation();
142+
active.add(other.getName(), EndpointUtils.getPactObject(pact));
143+
}
144+
145+
for (Pact pact : integration.getPendingPacts(nation)) {
146+
Nation other = nation.equals(pact.getSenderNation()) ? pact.getReceivingNation() : pact.getSenderNation();
147+
pending.add(other.getName(), EndpointUtils.getPactObject(pact));
148+
}
149+
150+
json.add("active", active);
151+
json.add("pending", pending);
152+
153+
return json;
154+
}
95155
}

src/main/java/net/earthmc/emcapi/endpoint/towny/TownsEndpoint.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@
1010
import com.palmergames.bukkit.towny.permissions.TownyPerms;
1111
import io.javalin.http.BadRequestResponse;
1212
import net.earthmc.emcapi.EMCAPI;
13+
import net.earthmc.emcapi.integration.Integrations;
1314
import net.earthmc.emcapi.integration.QuartersIntegration;
15+
import net.earthmc.emcapi.integration.WarpsIntegration;
1416
import net.earthmc.emcapi.manager.TownMetadataManager;
1517
import net.earthmc.emcapi.object.endpoint.PostEndpoint;
1618
import net.earthmc.emcapi.util.EndpointUtils;
1719
import net.earthmc.emcapi.util.JSONUtil;
20+
import net.earthmc.lynchpin.api.towny.warps.Warp;
1821
import org.jetbrains.annotations.Nullable;
1922

2023
import java.util.UUID;
@@ -49,6 +52,7 @@ public JsonElement getJsonElement(Town town, @Nullable String key) {
4952
townObject.addProperty("board", town.getBoard().isEmpty() ? null : town.getBoard());
5053
townObject.addProperty("founder", town.getFounder());
5154
townObject.addProperty("wiki", TownMetadataManager.getWikiURL(town));
55+
townObject.addProperty("discord", TownMetadataManager.getDiscordURL(town));
5256

5357
townObject.add("mayor", EndpointUtils.getResidentJsonObject(town.getMayor()));
5458
townObject.add("nation", EndpointUtils.getNationJsonObject(town.getNationOrNull()));
@@ -68,8 +72,10 @@ public JsonElement getJsonElement(Town town, @Nullable String key) {
6872
statusObject.addProperty("isRuined", town.isRuined());
6973
statusObject.addProperty("isForSale", town.isForSale());
7074
statusObject.addProperty("hasNation", town.hasNation());
71-
statusObject.addProperty("hasOverclaimShield", TownMetadataManager.hasOverclaimShield(town));
7275
statusObject.addProperty("canOutsidersSpawn", TownMetadataManager.getCanOutsidersSpawn(town));
76+
statusObject.addProperty("canPassiveMobsSpawn", TownMetadataManager.getPassiveMobs(town));
77+
statusObject.addProperty("hasSnowAccumulation", TownMetadataManager.getSnow(town));
78+
statusObject.addProperty("hasFriendlyFire", TownMetadataManager.getFriendlyFire(town));
7379
townObject.add("status", statusObject);
7480

7581
JsonObject statsObject = new JsonObject();
@@ -108,7 +114,7 @@ public JsonElement getJsonElement(Town town, @Nullable String key) {
108114
townObject.add("trusted", EndpointUtils.getResidentArray(town.getTrustedResidents().stream().toList()));
109115
townObject.add("outlaws", EndpointUtils.getResidentArray(town.getOutlaws().stream().toList()));
110116

111-
final QuartersIntegration quartersIntegration = plugin.integrations().quartersIntegration();
117+
final QuartersIntegration quartersIntegration = Integrations.getIntegration("Quarters");
112118
JsonArray quartersArray = quartersIntegration.isEnabled() ? quartersIntegration.getQuartersArrayForTown(town) : new JsonArray();
113119
townObject.add("quarters", quartersArray);
114120

@@ -118,6 +124,22 @@ public JsonElement getJsonElement(Town town, @Nullable String key) {
118124
}
119125
townObject.add("ranks", ranksObject);
120126

127+
townObject.add("warps", getWarpsObject(town));
128+
121129
return townObject;
122130
}
131+
132+
private JsonObject getWarpsObject(Town town) {
133+
JsonObject json = new JsonObject();
134+
WarpsIntegration integration = Integrations.getIntegration("lynchpin-towny-warps");
135+
if (integration == null || !integration.isEnabled()) {
136+
return json;
137+
}
138+
139+
for (Warp warp : integration.getWarps(town)) {
140+
json.add(warp.getName(), EndpointUtils.getWarpObject(warp));
141+
}
142+
143+
return json;
144+
}
123145
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package net.earthmc.emcapi.integration;
2+
3+
import com.palmergames.bukkit.towny.object.Nation;
4+
import net.earthmc.lynchpin.api.towny.TownyProvider;
5+
import net.earthmc.lynchpin.api.towny.embargoes.Embargo;
6+
import net.earthmc.lynchpin.api.towny.embargoes.TownyEmbargo;
7+
8+
import java.util.Set;
9+
10+
public class EmbargoesIntegration extends Integration {
11+
private TownyEmbargo module;
12+
13+
public EmbargoesIntegration() {
14+
super("Lynchpin");
15+
try {
16+
this.module = TownyProvider.instance().embargoes();
17+
} catch (Exception ignored) {
18+
plugin.getLogger().warning("Not loading towny-embargoes integration due to the module not being present/enabled");
19+
}
20+
}
21+
22+
@Override
23+
public boolean isEnabled() {
24+
return super.isEnabled() && module != null && module.isEnabled();
25+
}
26+
27+
@Override
28+
public void register() {
29+
Integrations.addIntegration("lynchpin-towny-embargoes", this);
30+
}
31+
32+
public Set<Embargo> getEmbargoes(Nation nation) {
33+
return module.getEmbargoes(nation);
34+
}
35+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package net.earthmc.emcapi.integration;
2+
3+
import com.palmergames.bukkit.towny.object.Nation;
4+
import net.earthmc.lynchpin.api.towny.TownyProvider;
5+
import net.earthmc.lynchpin.api.towny.pacts.Pact;
6+
import net.earthmc.lynchpin.api.towny.pacts.TownyPacts;
7+
8+
import java.util.List;
9+
10+
public class PactsIntegration extends Integration {
11+
private TownyPacts module;
12+
13+
public PactsIntegration() {
14+
super("Lynchpin");
15+
try {
16+
this.module = TownyProvider.instance().pacts();
17+
} catch (Exception ignored) {
18+
plugin.getLogger().warning("Not loading towny-pacts integration due to the module not being present/enabled");
19+
}
20+
}
21+
22+
@Override
23+
public boolean isEnabled() {
24+
return super.isEnabled() && module != null && module.isEnabled();
25+
}
26+
27+
@Override
28+
public void register() {
29+
Integrations.addIntegration("lynchpin-towny-pacts", this);
30+
}
31+
32+
public List<Pact> getActivePacts(Nation nation) {
33+
return module.getActivePacts(nation);
34+
}
35+
36+
public List<Pact> getPendingPacts(Nation nation) {
37+
return module.getPendingPacts(nation);
38+
}
39+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package net.earthmc.emcapi.integration;
2+
3+
import com.palmergames.bukkit.towny.object.Town;
4+
import net.earthmc.lynchpin.api.towny.TownyProvider;
5+
import net.earthmc.lynchpin.api.towny.warps.TownyWarps;
6+
import net.earthmc.lynchpin.api.towny.warps.Warp;
7+
8+
import java.util.Set;
9+
10+
public class WarpsIntegration extends Integration {
11+
private TownyWarps module;
12+
13+
public WarpsIntegration() {
14+
super("Lynchpin");
15+
try {
16+
this.module = TownyProvider.instance().warps();
17+
} catch (Exception ignored) {
18+
plugin.getLogger().warning("Not loading towny-warps integration due to the module not being present/enabled");
19+
}
20+
}
21+
22+
@Override
23+
public boolean isEnabled() {
24+
return super.isEnabled() && module != null && module.isEnabled();
25+
}
26+
27+
@Override
28+
public void register() {
29+
Integrations.addIntegration("lynchpin-towny-warps", this);
30+
}
31+
32+
public Set<Warp> getWarps(Town town) {
33+
return module.getWarps(town);
34+
}
35+
}

src/main/java/net/earthmc/emcapi/manager/NationMetadataManager.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,47 +7,50 @@
77

88
import java.util.ArrayList;
99
import java.util.List;
10+
import java.util.Objects;
1011
import java.util.UUID;
1112

1213
public class NationMetadataManager {
1314

1415
private static final String DEFAULT_DYNMAP_COLOUR = "3FB4FF";
1516

1617
public static String getDynmapColour(Nation nation) {
17-
StringDataField sdf = (StringDataField) nation.getMetadata("dynmapColour");
18-
if (sdf == null) return DEFAULT_DYNMAP_COLOUR;
19-
20-
return sdf.getValue().toUpperCase();
18+
return Objects.requireNonNullElse(getStringField(nation, "dynmapColour"), DEFAULT_DYNMAP_COLOUR).toUpperCase();
2119
}
2220

2321
public static String getDynmapOutline(Nation nation) {
24-
StringDataField sdf = (StringDataField) nation.getMetadata("dynmapOutline");
25-
if (sdf == null) return DEFAULT_DYNMAP_COLOUR;
26-
27-
return sdf.getValue().toUpperCase();
22+
return Objects.requireNonNullElse(getStringField(nation, "dynmapOutline"), DEFAULT_DYNMAP_COLOUR).toUpperCase();
2823
}
2924

3025
public static String getWikiURL(Nation nation) {
31-
StringDataField sdf = (StringDataField) nation.getMetadata("wiki_url");
32-
if (sdf == null)
33-
return null;
26+
return getStringField(nation, "wiki_url");
27+
}
3428

35-
return sdf.getValue();
29+
public static String getDiscordURL(Nation nation) {
30+
return getStringField(nation, "discord_url");
3631
}
3732

3833
public static List<Resident> getNationOutlaws(Nation nation) {
3934
if (nation == null) return List.of();
4035

41-
StringDataField sdf = (StringDataField) nation.getMetadata("townycommandaddons_nation_outlaws");
42-
if (sdf == null || sdf.getValue() == null || sdf.getValue().isEmpty()) return List.of();
36+
String value = getStringField(nation, "townycommandaddons_nation_outlaws");
37+
if (value == null || value.isEmpty()) return List.of();
4338

4439
List<Resident> outlawedResidents = new ArrayList<>();
45-
for (String string : sdf.getValue().split(",")) {
40+
for (String string : value.split(",")) {
4641
Resident resident = TownyAPI.getInstance().getResident(UUID.fromString(string));
4742
if (resident == null) continue;
4843

4944
outlawedResidents.add(resident);
5045
}
5146
return outlawedResidents;
5247
}
48+
49+
private static String getStringField(Nation nation, String field) {
50+
if (nation.getMetadata(field) instanceof StringDataField sdf) {
51+
return sdf.getValue();
52+
}
53+
54+
return null;
55+
}
5356
}

0 commit comments

Comments
 (0)