Skip to content

Commit

Permalink
Another day another bunch of switching @redirects to
Browse files Browse the repository at this point in the history
@WrapOperation
  • Loading branch information
IThundxr committed Dec 11, 2023
1 parent 430e7b1 commit 26e8f8c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ private void recordFakePlayer(BlockPos controlsLocalPos, Collection<Integer> hel
snr$fakePlayer = false;
return true;
}
return instance.closerThan(pos, distance);
return original.call(instance, pos, distance);
}

@WrapOperation(method = "control", at = @At(value = "FIELD", target = "Lcom/simibubi/create/content/trains/entity/Train;throttle:D", opcode = Opcodes.GETFIELD))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.railwayteam.railways.mixin;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.llamalad7.mixinextras.sugar.Local;
import com.llamalad7.mixinextras.sugar.ref.LocalDoubleRef;
import com.railwayteam.railways.Railways;
Expand Down Expand Up @@ -54,8 +56,6 @@ public abstract class MixinNavigation implements IWaypointableNavigation, IGener

@Shadow private TravellingPoint signalScout;

@Shadow public double distanceToDestination;

@Shadow public abstract TravellingPoint.ITrackSelector controlSignalScout();

@Override
Expand All @@ -69,38 +69,38 @@ public abstract class MixinNavigation implements IWaypointableNavigation, IGener
}
}

@Redirect(method = "tick", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lcom/simibubi/create/content/trains/entity/Navigation;distanceToDestination:D"))
private double fixWaypointDistanceInTick(Navigation instance) {
@WrapOperation(method = "tick", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lcom/simibubi/create/content/trains/entity/Navigation;distanceToDestination:D"))
private double fixWaypointDistanceInTick(Navigation instance, Operation<Double> original) {
if (((IWaypointableNavigation) instance).snr$isWaypointMode())
return 1000;
return instance.distanceToDestination;
return original.call(instance);
}

@Redirect(method = "lambda$tick$0", at = @At(value = "INVOKE", target = "Lcom/simibubi/create/content/trains/station/GlobalStation;canApproachFrom(Lcom/simibubi/create/content/trains/graph/TrackNode;)Z"))
private boolean keepScoutingAtWaypoints(GlobalStation instance, TrackNode side) {
return instance.canApproachFrom(side) && !snr$isWaypointMode();
@WrapOperation(method = "lambda$tick$0", at = @At(value = "INVOKE", target = "Lcom/simibubi/create/content/trains/station/GlobalStation;canApproachFrom(Lcom/simibubi/create/content/trains/graph/TrackNode;)Z"))
private boolean keepScoutingAtWaypoints(GlobalStation instance, TrackNode side, Operation<Boolean> original) {
return original.call(instance, side) && !snr$isWaypointMode();
}

@Redirect(method = "tick", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lcom/simibubi/create/content/trains/entity/Navigation;waitingForSignal:Lcom/simibubi/create/foundation/utility/Pair;"),
@WrapOperation(method = "tick", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lcom/simibubi/create/content/trains/entity/Navigation;waitingForSignal:Lcom/simibubi/create/foundation/utility/Pair;"),
slice = @Slice(
from = @At(value = "CONSTANT", args = {"doubleValue=0.25d"}),
to = @At(value = "INVOKE", target = "Lcom/simibubi/create/content/trains/entity/Train;leaveStation()V")
))
private Pair<UUID, Boolean> brakeProperlyAtWaypoints(Navigation instance) {
return snr$isWaypointMode() ? null : instance.waitingForSignal;
private Pair<UUID, Boolean> brakeProperlyAtWaypoints(Navigation instance, Operation<Pair<UUID, Boolean>> original) {
return snr$isWaypointMode() ? null : original.call(instance);
}

@Redirect(method = "currentSignalResolved", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lcom/simibubi/create/content/trains/entity/Navigation;distanceToDestination:D"), slice =
@WrapOperation(method = "currentSignalResolved", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lcom/simibubi/create/content/trains/entity/Navigation;distanceToDestination:D"), slice =
@Slice(to = @At(value = "INVOKE", target = "Lcom/simibubi/create/content/trains/graph/TrackGraph;getPoint(Lcom/simibubi/create/content/trains/graph/EdgePointType;Ljava/util/UUID;)Lcom/simibubi/create/content/trains/signal/TrackEdgePoint;")))
private double preventSignalClearWithWaypoint(Navigation instance) {
private double preventSignalClearWithWaypoint(Navigation instance, Operation<Double> original) {
if (((IWaypointableNavigation) instance).snr$isWaypointMode())
return 10;
return instance.distanceToDestination;
return original.call(instance);
}

@Redirect(method = "search(DDZLcom/simibubi/create/content/trains/entity/Navigation$StationTest;)V", at = @At(value = "INVOKE", target = "Lcom/simibubi/create/content/trains/station/GlobalStation;getPresentTrain()Lcom/simibubi/create/content/trains/entity/Train;"))
private Train replacePresentTrain(GlobalStation instance) {
return ((ILimitedGlobalStation) instance).orDisablingTrain(instance.getPresentTrain(), train);
@WrapOperation(method = "search(DDZLcom/simibubi/create/content/trains/entity/Navigation$StationTest;)V", at = @At(value = "INVOKE", target = "Lcom/simibubi/create/content/trains/station/GlobalStation;getPresentTrain()Lcom/simibubi/create/content/trains/entity/Train;"))
private Train replacePresentTrain(GlobalStation instance, Operation<Train> original) {
return ((ILimitedGlobalStation) instance).orDisablingTrain(original.call(instance), train);
}

@SuppressWarnings("unused")
Expand Down

0 comments on commit 26e8f8c

Please sign in to comment.