Skip to content

Commit

Permalink
feat: Add display of sharestones in JourneyMap #422
Browse files Browse the repository at this point in the history
  • Loading branch information
BlayTheNinth committed Dec 14, 2023
1 parent 5d310ca commit 4b97a2b
Showing 1 changed file with 37 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@
import net.blay09.mods.balm.api.Balm;
import net.blay09.mods.waystones.Waystones;
import net.blay09.mods.waystones.api.IWaystone;
import net.blay09.mods.waystones.api.KnownWaystonesEvent;
import net.blay09.mods.waystones.api.WaystoneTypes;
import net.blay09.mods.waystones.api.WaystoneUpdateReceivedEvent;
import net.blay09.mods.waystones.api.WaystonesListReceivedEvent;
import net.blay09.mods.waystones.config.WaystonesConfig;
import net.blay09.mods.waystones.config.WaystonesConfigData;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.Nullable;

import java.util.*;
Expand All @@ -22,6 +24,7 @@
public class JourneyMapIntegration implements IClientPlugin {

private static final UUID WAYSTONE_GROUP_ID = UUID.fromString("005bdf11-2dbb-4a27-8aa4-0184e86fa33c");
private static final UUID SHARESTONE_GROUP_ID = UUID.fromString("199e2989-df63-4ab4-bd5d-2fa24e72b4fc");

private IClientAPI api;
private boolean journeyMapReady;
Expand All @@ -31,7 +34,7 @@ public class JourneyMapIntegration implements IClientPlugin {

public JourneyMapIntegration() {
instance = this;
Balm.getEvents().onEvent(KnownWaystonesEvent.class, this::onKnownWaystones);
Balm.getEvents().onEvent(WaystonesListReceivedEvent.class, this::onWaystonesListReceived);
Balm.getEvents().onEvent(WaystoneUpdateReceivedEvent.class, this::onWaystoneUpdateReceived);
}

Expand Down Expand Up @@ -68,12 +71,16 @@ public void onEvent(ClientEvent clientEvent) {
}
}

public void onKnownWaystones(KnownWaystonesEvent event) {
if (shouldManageWaypoints()) {
runWhenJourneyMapIsReady(() -> updateAllWaypoints(event.getWaystones()));
public void onWaystonesListReceived(WaystonesListReceivedEvent event) {
if (shouldManageWaypoints() && isSupportedWaystoneType(event.getWaystoneType())) {
runWhenJourneyMapIsReady(() -> updateAllWaypoints(event.getWaystoneType(), event.getWaystones()));
}
}

private boolean isSupportedWaystoneType(ResourceLocation waystoneType) {
return waystoneType.equals(WaystoneTypes.WAYSTONE) || WaystoneTypes.isSharestone(waystoneType);
}

private static boolean shouldManageWaypoints() {
WaystonesConfigData config = WaystonesConfig.getActive();
if (config.compatibility.preferJourneyMapIntegration && Balm.isModLoaded("jmi")) {
Expand All @@ -97,28 +104,30 @@ private void runWhenJourneyMapIsReady(Runnable runnable) {
}
}

private void updateAllWaypoints(List<IWaystone> waystones) {
Set<String> stillExistingIds = new HashSet<>();
for (IWaystone waystone : waystones) {
stillExistingIds.add(waystone.getWaystoneUid().toString());
private void updateAllWaypoints(ResourceLocation waystoneType, List<IWaystone> waystones) {
final var idPrefix = waystoneType.getPath() + ":";
final var stillExistingIds = new HashSet<String>();
for (final var waystone : waystones) {
stillExistingIds.add(getPrefixedWaystoneId(waystone));
updateWaypoint(waystone);
}

List<Waypoint> waypoints = api.getWaypoints(Waystones.MOD_ID);
for (Waypoint waypoint : waypoints) {
if (!stillExistingIds.contains(waypoint.getId())) {
final var waypoints = api.getWaypoints(Waystones.MOD_ID);
for (final var waypoint : waypoints) {
if (waypoint.getId().startsWith(idPrefix) && !stillExistingIds.contains(waypoint.getId())) {
api.remove(waypoint);
}
}
}

private void updateWaypoint(IWaystone waystone) {
try {
String waystoneName = waystone.hasName() ? waystone.getName() : I18n.get("waystones.map.untitled_waystone");
Waypoint oldWaypoint = api.getWaypoint(Waystones.MOD_ID, waystone.getWaystoneUid().toString());
Waypoint waypoint = new Waypoint(Waystones.MOD_ID, waystone.getWaystoneUid().toString(), waystoneName, waystone.getDimension(), waystone.getPos());
final var prefixedId = getPrefixedWaystoneId(waystone);
final var oldWaypoint = api.getWaypoint(Waystones.MOD_ID, prefixedId);
final var waystoneName = waystone.hasName() ? waystone.getName() : I18n.get("waystones.map.untitled_waystone");
Waypoint waypoint = new Waypoint(Waystones.MOD_ID, prefixedId, waystoneName, waystone.getDimension(), waystone.getPos());
waypoint.setName(waystoneName);
waypoint.setGroup(new WaypointGroup(Waystones.MOD_ID, WAYSTONE_GROUP_ID.toString(), "Waystones"));
waypoint.setGroup(getWaystoneGroup(waystone));
if (oldWaypoint != null) {
waypoint.setEnabled(oldWaypoint.isEnabled());
if (oldWaypoint.hasColor()) {
Expand All @@ -135,4 +144,16 @@ private void updateWaypoint(IWaystone waystone) {
}
}

private static WaypointGroup getWaystoneGroup(IWaystone waystone) {
if (WaystoneTypes.isSharestone(waystone.getWaystoneType())) {
return new WaypointGroup(Waystones.MOD_ID, SHARESTONE_GROUP_ID.toString(), "Sharestones");
} else {
return new WaypointGroup(Waystones.MOD_ID, WAYSTONE_GROUP_ID.toString(), "Waystones");
}
}

private String getPrefixedWaystoneId(IWaystone waystone) {
return waystone.getWaystoneType().getPath() + ":" + waystone.getWaystoneUid().toString();
}

}

0 comments on commit 4b97a2b

Please sign in to comment.