Skip to content

Commit

Permalink
Waystones Syncing
Browse files Browse the repository at this point in the history
  • Loading branch information
rfresh2 committed Jul 21, 2023
1 parent 7f844c0 commit 4ea75f5
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 4 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ dependencies {
implementation(fg.deobf("maven.modrinth:xaeros-world-map:1.30.5_Forge_1.12"))
implementation(fg.deobf("maven.modrinth:xaeros-minimap:23.5.0_Forge_1.12"))
implementation(fg.deobf('cabaletta:baritone-deobf-unoptimized-mcp-dev:1.2')).setChanging(true)
implementation(fg.deobf("curse.maven:waystones-245755:2859589"))

annotationProcessor('org.spongepowered:mixin:0.8.5:processor') {
exclude module: 'gson'
Expand Down
32 changes: 32 additions & 0 deletions src/main/java/xaeroplus/event/ForgeEventHandler.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package xaeroplus.event;

import net.blay09.mods.waystones.util.WaystoneActivatedEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.fml.common.Optional;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import xaero.common.XaeroMinimapSession;
import xaero.common.minimap.waypoints.render.WaypointsIngameRenderer;
Expand All @@ -14,4 +16,34 @@ public void onRenderWorldLastEvent(final RenderWorldLastEvent event) {
WaypointsIngameRenderer waypointsIngameRenderer = minimapSession.getModMain().getInterfaces().getMinimapInterface().getWaypointsIngameRenderer();
((CustomWaypointsIngameRenderer) waypointsIngameRenderer).renderWaypointBeacons(minimapSession, event.getContext(), event.getPartialTicks());
}

@SubscribeEvent
@Optional.Method(modid = "waystones")
public void onWaystoneActivated(WaystoneActivatedEvent event) {
// XaeroMinimapSession minimapSession = XaeroMinimapSession.getCurrentSession();
// if (minimapSession == null) return;
// final WaypointsManager waypointsManager = minimapSession.getWaypointsManager();
// final WaypointSet waypointSet = waypointsManager.getWaypoints();
// if (waypointSet == null) return;
// final List<Waypoint> waypoints = waypointSet.getList();
// final double dimDiv = waypointsManager.getDimensionDivision(waypointsManager.getCurrentContainerID());
// final int x = OptimizedMath.myFloor(event.getPos().getX() * dimDiv);
// final int z = OptimizedMath.myFloor(event.getPos().getZ() * dimDiv);
// waypoints.add(new Waypoint(
// x,
// event.getPos().getY(),
// z,
// event.getWaystoneName() + " [Waystone]",
// event.getWaystoneName().substring(0, 1).toUpperCase(Locale.ROOT),
// (int) (Math.random() * COLORS.length),
// 0,
// false
// ));
// try {
// XaeroMinimap.instance.getSettings().saveWaypoints(waypointsManager.getCurrentWorld());
// } catch (IOException e) {
// XaeroPlus.LOGGER.warn("Failed to save waypoints", e);
// }
// SupportMods.xaeroMinimap.requestWaypointsRefresh();
}
}
88 changes: 88 additions & 0 deletions src/main/java/xaeroplus/module/impl/WaystoneSync.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package xaeroplus.module.impl;

import net.blay09.mods.waystones.client.ClientWaystones;
import net.blay09.mods.waystones.util.WaystoneActivatedEvent;
import net.blay09.mods.waystones.util.WaystoneEntry;
import net.minecraftforge.fml.common.Optional;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
import xaero.common.XaeroMinimapSession;
import xaero.common.minimap.waypoints.Waypoint;
import xaero.common.minimap.waypoints.WaypointSet;
import xaero.common.minimap.waypoints.WaypointsManager;
import xaero.common.misc.OptimizedMath;
import xaero.map.mods.SupportMods;
import xaeroplus.event.XaeroWorldChangeEvent;
import xaeroplus.module.Module;
import xaeroplus.util.WaystonesHelper;

import java.util.List;
import java.util.Locale;

import static xaero.common.settings.ModSettings.COLORS;

@Module.ModuleInfo()
public class WaystoneSync extends Module {
private static final long delay = 3000L;
private long lastSync = 0L;

@SubscribeEvent
@Optional.Method(modid = "waystones")
public void onClientTickEvent(final TickEvent.ClientTickEvent event) {
// wouldn't need this tick event if we knew when waystones were removed
if (event.phase != TickEvent.Phase.END) return;
if (!WaystonesHelper.isWaystonesPresent()) return;
if (System.currentTimeMillis() - lastSync < delay) return;
syncWaystones();
}

@SubscribeEvent
@Optional.Method(modid = "waystones")
public void onWorldChangeEvent(XaeroWorldChangeEvent event) {
syncWaystones();
}

@SubscribeEvent
@Optional.Method(modid = "waystones")
public void onWaystoneActivatedEvent(WaystoneActivatedEvent event) {
syncWaystones();
}

private void syncWaystones() {
lastSync = System.currentTimeMillis();
WaystoneEntry[] knownWaystones = ClientWaystones.getKnownWaystones();
XaeroMinimapSession minimapSession = XaeroMinimapSession.getCurrentSession();
if (minimapSession == null) return;
final WaypointsManager waypointsManager = minimapSession.getWaypointsManager();
final WaypointSet waypointSet = waypointsManager.getWaypoints();
if (waypointSet == null) return;
final List<Waypoint> waypoints = waypointSet.getList();
waypoints.removeIf(waypoint -> waypoint.isTemporary() && waypoint.getName().endsWith(" [Waystone]"));
for (WaystoneEntry waystoneEntry : knownWaystones) {
final double dimDiv = getDimensionDivision(waystoneEntry.getDimensionId(), waypointsManager);
final int x = OptimizedMath.myFloor(waystoneEntry.getPos().getX() * dimDiv);
final int z = OptimizedMath.myFloor(waystoneEntry.getPos().getZ() * dimDiv);
waypoints.add(new Waypoint(
x,
waystoneEntry.getPos().getY(),
z,
waystoneEntry.getName() + " [Waystone]",
waystoneEntry.getName().substring(0, 1).toUpperCase(Locale.ROOT),
Math.abs(waystoneEntry.getName().hashCode()) % COLORS.length,
0,
true
));
}
SupportMods.xaeroMinimap.requestWaypointsRefresh();
}

private double getDimensionDivision(final int waystoneDim, final WaypointsManager waypointsManager) {
String currentContainerID = waypointsManager.getCurrentContainerID();
String dimPart = currentContainerID.substring(currentContainerID.lastIndexOf(47) + 1);
Integer waypointContainerDim = waypointsManager.getDimensionForDirectoryName(dimPart);
if (waystoneDim == waypointContainerDim) return 1.0;
double waypointsContainerDimDiv = waypointContainerDim == -1 ? 8.0 : 1.0;
double waystoneDimDiv = waystoneDim == -1 ? 8.0 : 1.0;
return waystoneDimDiv / waypointsContainerDimDiv;
}
}
16 changes: 12 additions & 4 deletions src/main/java/xaeroplus/settings/XaeroPlusSettingRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
import xaeroplus.module.impl.BaritoneGoalSync;
import xaeroplus.module.impl.NewChunks;
import xaeroplus.module.impl.PortalSkipDetection;
import xaeroplus.util.BaritoneHelper;
import xaeroplus.util.ColorHelper;
import xaeroplus.util.Shared;
import xaeroplus.util.WDLHelper;
import xaeroplus.module.impl.WaystoneSync;
import xaeroplus.util.*;

import static xaeroplus.settings.XaeroPlusSettingsReflectionHax.SettingLocation;
import static xaeroplus.settings.XaeroPlusSettingsReflectionHax.markChunksDirtyInWriteDistance;
Expand Down Expand Up @@ -51,6 +49,16 @@ public final class XaeroPlusSettingRegistry {
},
true,
SettingLocation.WORLD_MAP_MAIN);
public static final XaeroPlusBooleanSetting waystonesWaypointSyncSetting = XaeroPlusBooleanSetting.create(
"Waystones Waypoint Sync",
"setting.world_map.waystones_sync",
"setting.world_map.waystones_sync.tooltip",
WaystonesHelper::isWaystonesPresent,
(b) -> {
if (WaystonesHelper.isWaystonesPresent()) ModuleManager.getModule(WaystoneSync.class).setEnabled(b);
},
true,
SettingLocation.WORLD_MAP_MAIN);
public static final XaeroPlusBooleanSetting persistMapDimensionSwitchSetting = XaeroPlusBooleanSetting.create(
"Persist WM Dim Switch",
"setting.world_map.persist_dimension_switch",
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/xaeroplus/util/WaystonesHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package xaeroplus.util;

import net.blay09.mods.waystones.Waystones;
import xaeroplus.XaeroPlus;

public class WaystonesHelper {
private static boolean isWaystonesPresent = false;
private static boolean checked = false;

public static boolean isWaystonesPresent() {
if (!checked) {
try {
Class.forName(Waystones.class.getName());
XaeroPlus.LOGGER.info("Found Waystones. Enabling Waystones support.");
isWaystonesPresent = true;
} catch (final Throwable e) {
XaeroPlus.LOGGER.info("Waystones not found. Disabling Waystones support.");
isWaystonesPresent = false;
}
checked = true;
}
return isWaystonesPresent;
}
}
2 changes: 2 additions & 0 deletions src/main/resources/assets/xaeroplus/lang/en_us.lang
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,5 @@ gui.world_map.baritone_path_here=Baritone Path Here
gui.world_map.baritone_elytra_here=Baritone Elytra Here
gui.xaeroplus.check_github_button=Go to XaeroPlus Github for updates
gui.waypoints.toggle_enable_all=Toggle Enable All
setting.world_map.waystones_sync=Waystones Sync
setting.world_map.waystones_sync.tooltip=Syncs Waystones as waypoints.

0 comments on commit 4ea75f5

Please sign in to comment.