Skip to content

Commit

Permalink
Fix Advanced Memory Card Behaviour with Dimensions
Browse files Browse the repository at this point in the history
  • Loading branch information
IntegerLimit committed Jan 3, 2025
1 parent 4a0efc7 commit 2389839
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

public interface AccessibleInfoList {

void labs$setPlayerPos(Vec3d pos);
void labs$setPlayerPos(Vec3d pos, int dim);

void labs$properlyResetScrollbar(WidgetScrollBar scrollBar, int numEntries);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,13 @@

public interface AccessibleInfoWrapper {

void labs$calculateDistance(Vec3d playerPos);
void labs$calculateDistance(Vec3d playerPos, int dim);

double labs$getDistance();

boolean labs$isDifferentDim();

String labs$getDimensionName();

void labs$setConnectionAmt(int amt);
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,19 +96,33 @@ private static int compareTypeThenDist(InfoWrapper a, InfoWrapper b, boolean com
if (a.getOutput() != b.getOutput()) return a.getOutput() ? 1 : -1; // Inputs First

if (!compareNameBackup)
return Double.compare(getDistance(a), getDistance(b)); // Furthest Last
return compareDistance(a, b); // Furthest Last
return compareDistThenName(a, b);
}

private static int compareDistThenName(InfoWrapper a, InfoWrapper b) {
double distA = getDistance(a);
double distB = getDistance(b);
int compDist = compareDistance(a, b);

if (distA == distB) return StringUtils.compareIgnoreCase(a.getName(), b.getName());
return Double.compare(distA, distB);
if (compDist == 0) return StringUtils.compareIgnoreCase(a.getName(), b.getName());
return compDist;
}

private static double getDistance(InfoWrapper info) {
return ((AccessibleInfoWrapper) (Object) (info)).labs$getDistance();
/**
* Compares distance, but checks for different dimensions first.
*/
private static int compareDistance(InfoWrapper a, InfoWrapper b) {
if (getAccess(a).labs$isDifferentDim()) {
if (getAccess(b).labs$isDifferentDim())
return Integer.compare(a.getLoc().getDim(), b.getLoc().getDim());
return 1; // Different Dimensions Last
}
if (getAccess(b).labs$isDifferentDim())
return -1; // Different Dimensions Last

return Double.compare(getAccess(a).labs$getDistance(), getAccess(b).labs$getDistance());
}

private static AccessibleInfoWrapper getAccess(InfoWrapper info) {
return ((AccessibleInfoWrapper) (Object) (info));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,9 @@ private void getCustomSortRules(CallbackInfoReturnable<List<String>> cir) {

@Inject(method = "<init>", at = @At("TAIL"))
private void setup(S2COpenGui msg, CallbackInfo ci) {
labs$getAccessibleInfo().labs$setPlayerPos(Minecraft.getMinecraft().player.getPositionVector());
// Cannot use gui.mc at this point
var player = Minecraft.getMinecraft().player;
labs$getAccessibleInfo().labs$setPlayerPos(player.getPositionVector(), player.dimension);
labs$getAccessibleInfo().labs$setSortMode(LabsClientCache.sortMode);
labs$getAccessibleInfo().labs$setSortReversed(LabsClientCache.sortReversed);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ public abstract class InfoListMixin implements AccessibleInfoList {
@Unique
private Vec3d labs$playerPos;

@Unique
private int labs$playerDim;

@Unique
private SortModes labs$sortMode = SortModes.DEFAULT;

Expand Down Expand Up @@ -96,8 +99,9 @@ public abstract class InfoListMixin implements AccessibleInfoList {

@Unique
@Override
public void labs$setPlayerPos(Vec3d pos) {
public void labs$setPlayerPos(Vec3d pos, int dim) {
labs$playerPos = pos;
labs$playerDim = dim;
labs$calcDistFor(masterMap.values());
}

Expand All @@ -117,7 +121,7 @@ public abstract class InfoListMixin implements AccessibleInfoList {
@Unique
private void labs$calcDistFor(Iterable<InfoWrapper> infos) {
for (InfoWrapper info : infos) {
((AccessibleInfoWrapper) (Object) info).labs$calculateDistance(labs$playerPos);
((AccessibleInfoWrapper) (Object) info).labs$calculateDistance(labs$playerPos, labs$playerDim);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import net.minecraft.util.math.Vec3d;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.common.DimensionManager;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
Expand Down Expand Up @@ -42,6 +44,12 @@ public class InfoWrapperMixin implements AccessibleInfoWrapper {
@Unique
private double labs$distanceToPlayer = 0.0;

@Unique
private boolean labs$differentDim = false;

@Unique
private String labs$dimensionName = null;

@Unique
@Override
public double labs$getDistance() {
Expand All @@ -50,7 +58,30 @@ public class InfoWrapperMixin implements AccessibleInfoWrapper {

@Unique
@Override
public void labs$calculateDistance(Vec3d playerPos) {
public boolean labs$isDifferentDim() {
return labs$differentDim;
}

@Unique
@Override
public String labs$getDimensionName() {
if (labs$dimensionName != null)
return labs$dimensionName;

labs$dimensionName = DimensionManager.getProviderType(loc.getDim()).getName().replace("_", " ");
labs$dimensionName = WordUtils.capitalizeFully(labs$dimensionName);
return labs$dimensionName;
}

@Unique
@Override
public void labs$calculateDistance(Vec3d playerPos, int playerDim) {
if (loc.getDim() != playerDim) {
labs$differentDim = true;
labs$distanceToPlayer = 0.0;
return;
}

// Change X, Y and Z Positions Based on Facing

// Add 0.5 (middle of block)
Expand Down Expand Up @@ -131,7 +162,9 @@ private void provideChannelInfo(P2PInfo info, CallbackInfo ci) {
info.getPos().getX(), info.getPos().getY(), info.getPos().getZ()));
hover.add(TextFormatting.YELLOW + LabsTranslate.translate("gui.advanced_memory_card.side",
StringUtils.capitalize(info.getFacing().getName2())));
hover.add(TextFormatting.YELLOW + LabsTranslate.translate("gui.advanced_memory_card.dim", info.getDim()));
hover.add(TextFormatting.YELLOW +
LabsTranslate.translate("nomilabs.gui.advanced_memory_card.hover_info.dim",
labs$getDimensionName(), loc.getDim()));

// ME Tunnel Specific
var channels = labs$getThis().getChannels();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,18 @@ private String cancelExistingChannelHandling(InfoWrapper instance) {
target = "Lcom/projecturanus/betterp2p/client/gui/widget/WidgetP2PDevice;updateButtonVisibility()V"),
require = 1)
private void renderDistance(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) {
var accessibleInfo = ((AccessibleInfoWrapper) (Object) labs$getThis().getInfoSupplier().invoke());
// noinspection DataFlowIssue
gui.mc.fontRenderer.drawString(LabsTranslate.translate("nomilabs.gui.advanced_memory_card.info.dist",
accessibleInfo.labs$getDistance()),
x + P2PEntryConstants.LEFT_ALIGN, y + 33, 0);
var info = labs$getThis().getInfoSupplier().invoke();
var accessible = ((AccessibleInfoWrapper) (Object) info);
String distString;

if (accessible.labs$isDifferentDim())
distString = LabsTranslate.translate("nomilabs.gui.advanced_memory_card.info.dim",
accessible.labs$getDimensionName(), info.getLoc().getDim());
else
distString = LabsTranslate.translate("nomilabs.gui.advanced_memory_card.info.dist",
accessible.labs$getDistance());

gui.mc.fontRenderer.drawString(distString, x + P2PEntryConstants.LEFT_ALIGN, y + 33, 0);
}

@Inject(method = "updateButtonVisibility", at = @At("TAIL"))
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/assets/nomilabs/lang/en_us.lang
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,11 @@ nomilabs.gui.better_p2p.error.same_output=P2P is already an {}.
nomilabs.gui.advanced_memory_card.button.refresh=Refresh List

nomilabs.gui.advanced_memory_card.info.dist=Distance: %sm
nomilabs.gui.advanced_memory_card.info.dim=In Dim: %s (%s)
nomilabs.gui.advanced_memory_card.info.type=Type: %s - %s

nomilabs.gui.advanced_memory_card.hover_info.title=§bP2P - %s
nomilabs.gui.advanced_memory_card.hover_info.dim=Dim: %s (%s)

nomilabs.gui.advanced_memory_card.hover_info.connections.input.none=§cNo Inputs
nomilabs.gui.advanced_memory_card.hover_info.connections.input.one=§a1 Input
Expand Down

0 comments on commit 2389839

Please sign in to comment.