Skip to content

Commit e30659e

Browse files
committed
Rework stopRiding Overwrite
1 parent 1910ecb commit e30659e

File tree

1 file changed

+26
-26
lines changed
  • src/mixins/java/org/spongepowered/common/mixin/core/world/entity

1 file changed

+26
-26
lines changed

src/mixins/java/org/spongepowered/common/mixin/core/world/entity/EntityMixin.java

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@
9898
import org.spongepowered.common.SpongeCommon;
9999
import org.spongepowered.common.accessor.server.level.ChunkMapAccessor;
100100
import org.spongepowered.common.accessor.server.level.ChunkMap_TrackedEntityAccessor;
101-
import org.spongepowered.common.accessor.world.entity.EntityAccessor;
102101
import org.spongepowered.common.accessor.world.entity.PortalProcessorAccessor;
103102
import org.spongepowered.common.bridge.commands.CommandSourceProviderBridge;
104103
import org.spongepowered.common.bridge.data.DataCompoundHolder;
@@ -182,6 +181,7 @@ public abstract class EntityMixin implements EntityBridge, PlatformEntityBridge,
182181
@Shadow public abstract boolean shadow$onGround();
183182
@Shadow @Nullable protected abstract String shadow$getEncodeId();
184183
@Shadow @javax.annotation.Nullable public PortalProcessor portalProcess;
184+
@Shadow public abstract void shadow$stopRiding();
185185
// @formatter:on
186186

187187
private boolean impl$isConstructing = true;
@@ -306,23 +306,15 @@ public abstract class EntityMixin implements EntityBridge, PlatformEntityBridge,
306306

307307
@Override
308308
public boolean bridge$dismountRidingEntity(final DismountType type) {
309-
if (!this.shadow$level().isClientSide && ShouldFire.RIDE_ENTITY_EVENT_DISMOUNT) {
310-
try (final CauseStackManager.StackFrame frame = PhaseTracker.getInstance().pushCauseFrame()) {
311-
frame.pushCause(this);
312-
frame.addContext(EventContextKeys.DISMOUNT_TYPE, type);
313-
if (SpongeCommon.post(SpongeEventFactory.
314-
createRideEntityEventDismount(frame.currentCause(), (org.spongepowered.api.entity.Entity) this.shadow$getVehicle()))) {
315-
return false;
316-
}
317-
}
318-
}
309+
final Entity vehicle = this.shadow$getVehicle();
310+
311+
try (final CauseStackManager.StackFrame frame = PhaseTracker.getInstance().pushCauseFrame()) {
312+
frame.addContext(EventContextKeys.DISMOUNT_TYPE, type);
319313

320-
final Entity tempEntity = this.shadow$getVehicle();
321-
if (tempEntity != null) {
322-
this.vehicle = null;
323-
((EntityAccessor) tempEntity).invoker$removePassenger((Entity) (Object) this);
314+
this.shadow$stopRiding();
324315
}
325-
return true;
316+
317+
return vehicle != this.shadow$getVehicle();
326318
}
327319

328320
@Override
@@ -616,18 +608,26 @@ public Entity changeDimension(final DimensionTransition transition) {
616608
}
617609
}
618610

619-
/**
620-
* @author rexbut - December 16th, 2016
621-
* @reason - adjusted to support {@link DismountTypes}
622-
*/
623-
@Overwrite
624-
public void stopRiding() {
611+
@Inject(method = "removeVehicle",
612+
at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/Entity;vehicle:Lnet/minecraft/world/entity/Entity;", opcode = Opcodes.PUTFIELD), cancellable = true)
613+
private void impl$onRemoveVehicle(final CallbackInfo ci) {
625614
final Entity vehicle = this.shadow$getVehicle();
626615
if (vehicle != null) {
627-
if (vehicle.isRemoved()) {
628-
this.bridge$dismountRidingEntity(DismountTypes.DEATH.get());
629-
} else {
630-
this.bridge$dismountRidingEntity(DismountTypes.PLAYER.get());
616+
if (this.shadow$level().isClientSide || !ShouldFire.RIDE_ENTITY_EVENT_DISMOUNT) {
617+
return;
618+
}
619+
620+
try (final CauseStackManager.StackFrame frame = PhaseTracker.getInstance().pushCauseFrame()) {
621+
frame.pushCause(this);
622+
if (!frame.currentContext().containsKey(EventContextKeys.DISMOUNT_TYPE)) {
623+
frame.addContext(EventContextKeys.DISMOUNT_TYPE, vehicle.isRemoved()
624+
? DismountTypes.DEATH.get()
625+
: DismountTypes.PLAYER.get());
626+
}
627+
if (SpongeCommon.post(SpongeEventFactory.
628+
createRideEntityEventDismount(frame.currentCause(), (org.spongepowered.api.entity.Entity) this.shadow$getVehicle()))) {
629+
ci.cancel();
630+
}
631631
}
632632
}
633633
}

0 commit comments

Comments
 (0)