Skip to content

Commit bc6baad

Browse files
authored
Replace RunAroundLikeCrazyGoalMixin::tick overwrite with injects (#4151)
1 parent 772c198 commit bc6baad

File tree

1 file changed

+33
-45
lines changed

1 file changed

+33
-45
lines changed

src/mixins/java/org/spongepowered/common/mixin/core/world/entity/ai/goal/RunAroundLikeCrazyGoalMixin.java

+33-45
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,18 @@
2424
*/
2525
package org.spongepowered.common.mixin.core.world.entity.ai.goal;
2626

27-
import net.minecraft.world.entity.Entity;
2827
import net.minecraft.world.entity.ai.goal.RunAroundLikeCrazyGoal;
2928
import net.minecraft.world.entity.animal.horse.AbstractHorse;
30-
import net.minecraft.world.entity.player.Player;
3129
import org.spongepowered.api.entity.living.animal.horse.HorseLike;
3230
import org.spongepowered.api.event.CauseStackManager;
3331
import org.spongepowered.api.event.SpongeEventFactory;
3432
import org.spongepowered.api.event.cause.entity.DismountTypes;
3533
import org.spongepowered.asm.mixin.Final;
3634
import org.spongepowered.asm.mixin.Mixin;
37-
import org.spongepowered.asm.mixin.Mutable;
38-
import org.spongepowered.asm.mixin.Overwrite;
3935
import org.spongepowered.asm.mixin.Shadow;
36+
import org.spongepowered.asm.mixin.injection.At;
37+
import org.spongepowered.asm.mixin.injection.Inject;
38+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
4039
import org.spongepowered.common.SpongeCommon;
4140
import org.spongepowered.common.bridge.world.entity.EntityBridge;
4241
import org.spongepowered.common.event.tracking.PhaseTracker;
@@ -45,51 +44,40 @@
4544
public abstract class RunAroundLikeCrazyGoalMixin extends GoalMixin {
4645

4746
// @formatter:off
48-
@Shadow @Final @Mutable private AbstractHorse horse;
47+
@Shadow @Final private AbstractHorse horse;
4948
// @formatter:on
5049

51-
/**
52-
* @author rexbut - December 16th, 2016
53-
* @author i509VCB - February 18th, 2020 - 1.14.4
54-
*
55-
* @reason - adjusted to support {@link DismountTypes}
56-
*/
57-
@Overwrite
58-
public void tick() {
59-
if (!this.horse.isTamed() && this.horse.getRandom().nextInt(50) == 0) {
60-
Entity entity = this.horse.getPassengers().get(0);
61-
62-
if (entity == null) {
63-
return;
64-
}
65-
66-
if (entity instanceof Player) {
67-
int i = this.horse.getTemper();
68-
int j = this.horse.getMaxTemper();
69-
70-
if (j > 0 && this.horse.getRandom().nextInt(j) < i) {
71-
// Sponge start - Fire Tame Entity event
72-
try (CauseStackManager.StackFrame frame = PhaseTracker.getCauseStackManager().pushCauseFrame()) {
73-
frame.pushCause(entity);
74-
if (SpongeCommon.post(SpongeEventFactory.createTameEntityEvent(frame.currentCause(), (HorseLike) this.horse))) {
75-
return;
76-
}
77-
}
78-
// Sponge end
79-
this.horse.tameWithName((Player)entity);
80-
return;
81-
}
82-
83-
this.horse.modifyTemper(5);
50+
@Inject(
51+
method = "tick",
52+
at = @At(
53+
value = "INVOKE",
54+
target = "Lnet/minecraft/world/entity/animal/horse/AbstractHorse;tameWithName(Lnet/minecraft/world/entity/player/Player;)Z"
55+
),
56+
cancellable = true
57+
)
58+
private void impl$throwTameEntityEvent(final CallbackInfo ci) {
59+
try (CauseStackManager.StackFrame frame = PhaseTracker.getCauseStackManager().pushCauseFrame()) {
60+
frame.pushCause(this.horse.getFirstPassenger());
61+
if (SpongeCommon.post(SpongeEventFactory.createTameEntityEvent(frame.currentCause(), (HorseLike) this.horse))) {
62+
ci.cancel();
8463
}
64+
}
65+
}
8566

86-
// Sponge start - Throw an event before calling entity states
87-
// this.horseHost.ejectPassengers(); // Vanilla
88-
if (((EntityBridge) this.horse).bridge$removePassengers(DismountTypes.DERAIL.get())) {
89-
// Sponge end
90-
this.horse.makeMad();
91-
this.horse.level().broadcastEntityEvent(this.horse, (byte)6);
92-
}
67+
@Inject(
68+
method = "tick",
69+
at = @At(
70+
value = "INVOKE",
71+
target = "Lnet/minecraft/world/entity/animal/horse/AbstractHorse;ejectPassengers()V"
72+
),
73+
cancellable = true
74+
)
75+
private void impl$handleDismountTypes(final CallbackInfo ci) {
76+
if (((EntityBridge) this.horse).bridge$removePassengers(DismountTypes.DERAIL.get())) {
77+
this.horse.makeMad();
78+
this.horse.level().broadcastEntityEvent(this.horse, (byte)6);
9379
}
80+
81+
ci.cancel();
9482
}
9583
}

0 commit comments

Comments
 (0)