diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/KeyMappingMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/KeyboardInputMixin.java similarity index 97% rename from src/main/java/com/atsuishio/superbwarfare/mixins/KeyMappingMixin.java rename to src/main/java/com/atsuishio/superbwarfare/mixins/KeyboardInputMixin.java index e0e9bb945..ee488867c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/KeyMappingMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/KeyboardInputMixin.java @@ -1,6 +1,7 @@ package com.atsuishio.superbwarfare.mixins; import com.atsuishio.superbwarfare.init.ModItems; +import com.atsuishio.superbwarfare.init.ModMobEffects; import net.minecraft.client.Minecraft; import net.minecraft.client.player.Input; import net.minecraft.client.player.KeyboardInput; @@ -10,10 +11,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.atsuishio.superbwarfare.init.ModMobEffects; @Mixin(KeyboardInput.class) -public abstract class KeyMappingMixin extends Input { +public abstract class KeyboardInputMixin extends Input { // 按键修改mixin @Inject(method = "tick", at = @At("RETURN")) diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/KeymappingMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/KeymappingMixin.java new file mode 100644 index 000000000..8b5e10882 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/KeymappingMixin.java @@ -0,0 +1,52 @@ +package com.atsuishio.superbwarfare.mixins; + +import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity; +import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity; +import com.mojang.blaze3d.platform.InputConstants; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.world.entity.player.Player; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(KeyMapping.class) +public class KeymappingMixin { + + @Shadow + private InputConstants.Key key; + + @Shadow + private int clickCount; + + @Inject(method = "consumeClick()Z", at = @At("HEAD"), cancellable = true) + public void consumeClick(CallbackInfoReturnable cir) { + Player player = Minecraft.getInstance().player; + if (player == null || !(player.getVehicle() instanceof VehicleEntity vehicle)) return; + + for (int i = 0; i < 9; i++) { + if (Minecraft.getInstance().options.keyHotbarSlots[i].getKey() == key) { + if (vehicle.getMaxPassengers() > 1 + && Screen.hasShiftDown() + && i < vehicle.getMaxPassengers() + && vehicle.getNthEntity(i) == null + ) { + if (this.clickCount > 0) { + --this.clickCount; + } + cir.setReturnValue(false); + } + + if (vehicle instanceof WeaponVehicleEntity weaponVehicle && weaponVehicle.banHand(player)) { + if (this.clickCount > 0) { + --this.clickCount; + } + cir.setReturnValue(false); + } + } + } + } +} diff --git a/src/main/resources/mixins.superbwarfare.json b/src/main/resources/mixins.superbwarfare.json index 39d36b6be..0dd1b5f64 100644 --- a/src/main/resources/mixins.superbwarfare.json +++ b/src/main/resources/mixins.superbwarfare.json @@ -16,7 +16,8 @@ "ClientPlayerEntityMixin", "GameRendererMixin", "ItemInHandLayerMixin", - "KeyMappingMixin", + "KeyboardInputMixin", + "KeymappingMixin", "LivingEntityRendererMixin", "MinecraftMixin", "MouseHandlerMixin"