Skip to content

Commit a585070

Browse files
committed
Take mending into account in PlayerRandCracker
1 parent 9caf937 commit a585070

File tree

4 files changed

+40
-6
lines changed

4 files changed

+40
-6
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ dependencies {
2525
modCompile "net.fabricmc:fabric-loader:${project.loader_version}"
2626
modCompile "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
2727

28-
modImplementation 'net.earthcomputer:multiconnect:1.2.7.1:api'
29-
include 'net.earthcomputer:multiconnect:1.2.7.1:api'
28+
modImplementation 'net.earthcomputer:multiconnect:1.3.8:api'
29+
include 'net.earthcomputer:multiconnect:1.3.8:api'
3030
}
3131

3232
processResources {

src/main/java/net/earthcomputer/clientcommands/features/PlayerRandCracker.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import net.earthcomputer.clientcommands.TempRules;
44
import net.earthcomputer.clientcommands.command.ClientCommandManager;
5+
import net.earthcomputer.multiconnect.api.MultiConnectAPI;
6+
import net.earthcomputer.multiconnect.api.Protocols;
57
import net.minecraft.client.MinecraftClient;
68
import net.minecraft.client.network.ClientPlayerEntity;
79
import net.minecraft.client.resource.language.I18n;
@@ -102,7 +104,8 @@ public static void onEntityCramming() {
102104
}
103105

104106
public static void onDrink() {
105-
resetCracker("drink");
107+
// TODO: was this ever a thing?
108+
//resetCracker("drink");
106109
}
107110

108111
public static void onEat() {
@@ -126,7 +129,9 @@ public static void onSprinting() {
126129
}
127130

128131
public static void onEquipmentBreak() {
129-
resetCracker("itemBreak");
132+
if (MultiConnectAPI.instance().getProtocolVersion() <= Protocols.V1_13_2) {
133+
resetCracker("itemBreak");
134+
}
130135
}
131136

132137
public static void onPotionParticles() {
@@ -144,6 +149,10 @@ public static void onAnvilUse() {
144149
resetCracker("anvil");
145150
}
146151

152+
public static void onMending() {
153+
resetCracker("mending");
154+
}
155+
147156
public static void onFrostWalker() {
148157
resetCracker("frostWalker");
149158
}

src/main/java/net/earthcomputer/clientcommands/mixin/MixinClientPlayerEntity.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
package net.earthcomputer.clientcommands.mixin;
22

3+
import com.mojang.authlib.GameProfile;
34
import com.mojang.brigadier.StringReader;
45
import net.earthcomputer.clientcommands.command.ClientCommandManager;
56
import net.earthcomputer.clientcommands.features.PlayerRandCracker;
67
import net.earthcomputer.clientcommands.interfaces.IKeyBinding;
78
import net.earthcomputer.clientcommands.script.ScriptManager;
9+
import net.earthcomputer.multiconnect.api.MultiConnectAPI;
10+
import net.earthcomputer.multiconnect.api.Protocols;
811
import net.minecraft.client.MinecraftClient;
12+
import net.minecraft.client.network.AbstractClientPlayerEntity;
913
import net.minecraft.client.network.ClientPlayerEntity;
14+
import net.minecraft.client.world.ClientWorld;
15+
import net.minecraft.enchantment.Enchantments;
16+
import net.minecraft.entity.ExperienceOrbEntity;
1017
import net.minecraft.entity.ItemEntity;
1118
import net.minecraft.entity.damage.DamageSource;
19+
import net.minecraft.item.ItemStack;
1220
import org.spongepowered.asm.mixin.Mixin;
1321
import org.spongepowered.asm.mixin.Unique;
1422
import org.spongepowered.asm.mixin.injection.At;
@@ -17,10 +25,14 @@
1725
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1826

1927
@Mixin(ClientPlayerEntity.class)
20-
public class MixinClientPlayerEntity {
28+
public class MixinClientPlayerEntity extends AbstractClientPlayerEntity {
2129

2230
@Unique private boolean wasSprintPressed = false;
2331

32+
public MixinClientPlayerEntity(ClientWorld world, GameProfile profile) {
33+
super(world, profile);
34+
}
35+
2436
@Inject(method = "sendChatMessage", at = @At("HEAD"), cancellable = true)
2537
private void onSendChatMessage(String message, CallbackInfo ci) {
2638
if (message.startsWith("/")) {
@@ -38,6 +50,16 @@ private void onSendChatMessage(String message, CallbackInfo ci) {
3850
}
3951
}
4052

53+
@Inject(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/AbstractClientPlayerEntity;tick()V"))
54+
private void onTick(CallbackInfo ci) {
55+
if (Enchantments.MENDING.getEquipment(this).values().stream()
56+
.anyMatch(stack -> stack.isDamaged() || MultiConnectAPI.instance().getProtocolVersion() <= Protocols.V1_15_2)) {
57+
if (!world.getEntitiesByClass(ExperienceOrbEntity.class, getBoundingBox(), null).isEmpty()) {
58+
PlayerRandCracker.onMending();
59+
}
60+
}
61+
}
62+
4163
@Inject(method = "dropSelectedItem", at = @At("HEAD"))
4264
public void onDropSelectedItem(boolean dropAll, CallbackInfoReturnable<ItemEntity> ci) {
4365
PlayerRandCracker.onDropItem();

src/main/java/net/earthcomputer/clientcommands/mixin/MixinLivingEntity.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.spongepowered.asm.mixin.gen.Invoker;
2525
import org.spongepowered.asm.mixin.injection.At;
2626
import org.spongepowered.asm.mixin.injection.Inject;
27+
import org.spongepowered.asm.mixin.injection.Slice;
2728
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2829

2930
@Mixin(LivingEntity.class)
@@ -56,7 +57,9 @@ public void onEat(CallbackInfo ci) {
5657
PlayerRandCracker.onEat();
5758
}
5859

59-
@Inject(method = "baseTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;"))
60+
@Inject(method = "baseTick",
61+
slice = @Slice(from = @At(value = "FIELD", target = "Lnet/minecraft/tag/FluidTags;WATER:Lnet/minecraft/tag/Tag$Identified;", ordinal = 0)),
62+
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getBlockState(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/BlockState;", ordinal = 0))
6063
public void onUnderwater(CallbackInfo ci) {
6164
if (isThePlayer())
6265
PlayerRandCracker.onUnderwater();

0 commit comments

Comments
 (0)