Skip to content

Commit 97836d4

Browse files
committed
🐛 Fix kill mob challenge not accepting player type
1 parent ef67752 commit 97836d4

File tree

4 files changed

+43
-18
lines changed

4 files changed

+43
-18
lines changed

common/src/main/java/com/mrcrayfish/backpacked/Bootstrap.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ public static void init()
4444
InteractWithBlockChallenge.Tracker.registerEvent();
4545
InteractWithEntityChallenge.Tracker.registerEvent();
4646
TravelDistanceChallenge.Tracker.registerEvent();
47-
KillMobChallenge.Tracker.registerEvent();
4847
MineBlockChallenge.Tracker.registerEvent();
4948
CraftItemChallenge.Tracker.registerEvent();
5049
MerchantTradeChallenge.Tracker.registerEvent();

common/src/main/java/com/mrcrayfish/backpacked/common/challenge/impl/KillMobChallenge.java

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import net.minecraft.resources.ResourceLocation;
1515
import net.minecraft.server.level.ServerPlayer;
1616
import net.minecraft.util.ExtraCodecs;
17+
import net.minecraft.world.damagesource.DamageSource;
1718
import net.minecraft.world.entity.Entity;
1819
import net.minecraft.world.entity.EntityType;
1920
import net.minecraft.world.entity.LivingEntity;
@@ -81,24 +82,21 @@ private boolean test(LivingEntity entity, ItemStack stack, ServerPlayer player)
8182
return this.entityPredicate.map(p -> p.matches(player, entity)).orElse(true) && this.itemPredicate.map(p -> p.test(stack)).orElse(true);
8283
}
8384

84-
public static void registerEvent()
85+
// Called via LivingEntityMixin and ServerPlayerMixin
86+
public static void onLivingEntityDeath(LivingEntity entity, DamageSource source)
8587
{
86-
EntityEvents.LIVING_ENTITY_DEATH.register((entity, source) -> {
87-
if(entity.level().isClientSide())
88-
return false;
89-
90-
Entity cause = source.getEntity();
91-
if(cause != null && cause.getType() == EntityType.PLAYER) {
92-
ServerPlayer player = (ServerPlayer) cause;
93-
UnlockManager.getIncompleteTrackers(player, Tracker.class).forEach(tracker -> {
94-
ItemStack heldItem = player.getMainHandItem();
95-
if(tracker.test(entity, heldItem, player)) {
96-
tracker.increment(player);
97-
}
98-
});
99-
}
100-
return false;
101-
});
88+
Entity cause = source.getEntity();
89+
if(cause != null && cause.getType() == EntityType.PLAYER)
90+
{
91+
ServerPlayer player = (ServerPlayer) cause;
92+
UnlockManager.getIncompleteTrackers(player, Tracker.class).forEach(tracker -> {
93+
ItemStack heldItem = player.getMainHandItem();
94+
if(tracker.test(entity, heldItem, player))
95+
{
96+
tracker.increment(player);
97+
}
98+
});
99+
}
102100
}
103101
}
104102
}

common/src/main/java/com/mrcrayfish/backpacked/mixin/common/LivingEntityMixin.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,27 @@
44
import com.llamalad7.mixinextras.sugar.Local;
55
import com.mrcrayfish.backpacked.Config;
66
import com.mrcrayfish.backpacked.common.augment.AugmentHandler;
7+
import com.mrcrayfish.backpacked.common.challenge.impl.KillMobChallenge;
78
import com.mrcrayfish.backpacked.core.ModSyncedDataKeys;
9+
import net.minecraft.server.level.ServerPlayer;
810
import net.minecraft.world.InteractionHand;
11+
import net.minecraft.world.damagesource.DamageSource;
912
import net.minecraft.world.entity.LivingEntity;
1013
import net.minecraft.world.entity.player.Player;
1114
import net.minecraft.world.item.ItemStack;
1215
import net.minecraft.world.item.Items;
1316
import org.spongepowered.asm.mixin.Mixin;
17+
import org.spongepowered.asm.mixin.Shadow;
1418
import org.spongepowered.asm.mixin.injection.At;
19+
import org.spongepowered.asm.mixin.injection.Inject;
20+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1521

1622
@Mixin(LivingEntity.class)
1723
public class LivingEntityMixin
1824
{
25+
@Shadow
26+
protected boolean dead;
27+
1928
@ModifyExpressionValue(method = "checkTotemDeathProtection", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getItemInHand(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;"))
2029
private ItemStack backpacked$CheckBackpackForTotem(ItemStack original, @Local(ordinal = 0) InteractionHand hand)
2130
{
@@ -34,4 +43,14 @@ public class LivingEntityMixin
3443
}
3544
return original;
3645
}
46+
47+
@Inject(method = "die", at = @At(value = "TAIL"))
48+
private void backpacked$OnDeath(DamageSource source, CallbackInfo ci)
49+
{
50+
LivingEntity entity = (LivingEntity) (Object) this;
51+
if(this.dead && !entity.isRemoved() && !entity.level().isClientSide())
52+
{
53+
KillMobChallenge.Tracker.onLivingEntityDeath(entity, source);
54+
}
55+
}
3756
}

common/src/main/java/com/mrcrayfish/backpacked/mixin/common/ServerPlayerMixin.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
import com.mrcrayfish.backpacked.common.MovementType;
44
import com.mrcrayfish.backpacked.common.augment.AugmentHandler;
5+
import com.mrcrayfish.backpacked.common.challenge.impl.KillMobChallenge;
56
import com.mrcrayfish.backpacked.event.BackpackedEvents;
67
import com.mrcrayfish.backpacked.event.BackpackedInteractAccess;
78
import net.minecraft.core.BlockPos;
89
import net.minecraft.resources.ResourceLocation;
910
import net.minecraft.server.level.ServerLevel;
1011
import net.minecraft.server.level.ServerPlayer;
12+
import net.minecraft.world.damagesource.DamageSource;
1113
import net.minecraft.world.entity.player.Player;
1214
import org.spongepowered.asm.mixin.Mixin;
1315
import org.spongepowered.asm.mixin.Unique;
@@ -118,4 +120,11 @@ public abstract class ServerPlayerMixin implements BackpackedInteractAccess
118120
int brightness = level.getMaxLocalRawBrightness(pos);
119121
AugmentHandler.onPlayerChangedBlockPos(player, level, pos, brightness);
120122
}
123+
124+
@Inject(method = "die", at = @At(value = "TAIL"))
125+
private void backpacked$OnDeath(DamageSource source, CallbackInfo ci)
126+
{
127+
ServerPlayer player = (ServerPlayer) (Object) this;
128+
KillMobChallenge.Tracker.onLivingEntityDeath(player, source);
129+
}
121130
}

0 commit comments

Comments
 (0)