重制模拟按键交互

This commit is contained in:
Atsuihsio 2024-07-08 01:13:24 +08:00
parent c6cb9b75e1
commit 99aa83927a
6 changed files with 82 additions and 9 deletions

View file

@ -103,6 +103,7 @@ public class TargetMod {
addNetworkMessage(SensitivityMessage.class, SensitivityMessage::encode, SensitivityMessage::decode, SensitivityMessage::handler);
addNetworkMessage(AdjustZoomFovMessage.class, AdjustZoomFovMessage::encode, AdjustZoomFovMessage::decode, AdjustZoomFovMessage::handler);
addNetworkMessage(AdjustMortarAngleMessage.class, AdjustMortarAngleMessage::encode, AdjustMortarAngleMessage::decode, AdjustMortarAngleMessage::handler);
addNetworkMessage(InteractMessage.class, InteractMessage::encode, InteractMessage::decode, InteractMessage::handler);
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)),
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), TargetModPotion.SHOCK.get())));

View file

@ -81,9 +81,7 @@ public class ClickHandler {
event.setCanceled(true);
}
if (player.getMainHandItem().is(TargetModTags.Items.GUN)) {
if (!TargetModKeyMappings.INTERACT.isDown()) {
event.setCanceled(true);
}
event.setCanceled(true);
TargetMod.PACKET_HANDLER.sendToServer(new ZoomMessage(0));
}
}

View file

@ -1,10 +1,7 @@
package net.mcreator.target.init;
import net.mcreator.target.TargetMod;
import net.mcreator.target.network.message.DoubleJumpMessage;
import net.mcreator.target.network.message.FireModeMessage;
import net.mcreator.target.network.message.ReloadMessage;
import net.mcreator.target.network.message.SensitivityMessage;
import net.mcreator.target.network.message.*;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraftforge.api.distmarker.Dist;
@ -86,10 +83,16 @@ public class TargetModKeyMappings {
};
public static final KeyMapping INTERACT = new KeyMapping("key.target.interact", GLFW.GLFW_KEY_X, "key.categories.target") {
private boolean isDownOld = false;
@Override
public void setDown(boolean isDown) {
super.setDown(isDown);
if (isDownOld != isDown && isDown) {
TargetMod.PACKET_HANDLER.sendToServer(new InteractMessage(0));
InteractMessage.pressAction(Minecraft.getInstance().player, 0);
}
isDownOld = isDown;
}
};

View file

@ -0,0 +1,71 @@
package net.mcreator.target.network.message;
import net.mcreator.target.TargetMod;
import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.tools.TraceTool;
import net.minecraft.core.BlockPos;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.EntityHitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraft.core.Direction;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class InteractMessage {
private final int type;
public InteractMessage(int type) {
this.type = type;
}
public static InteractMessage decode(FriendlyByteBuf buffer) {
return new InteractMessage(buffer.readInt());
}
public static void encode(InteractMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.type);
}
public static void handler(InteractMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (context.getSender() != null) {
pressAction(context.getSender(), message.type);
}
});
context.setPacketHandled(true);
}
public static void pressAction(Player player, int type) {
Level level = player.level();
if (!level.isLoaded(player.blockPosition()))
return;
if (type == 0) {
if (player.getMainHandItem().is(TargetModTags.Items.GUN)) {
double block_range = player.getBlockReach();
double entity_range = player.getBlockReach();
Vec3 looking = Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(block_range)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos());
BlockPos _bp = BlockPos.containing(looking.x(), looking.y(), looking.z());
player.level().getBlockState(_bp).use(player.level(), player, InteractionHand.MAIN_HAND, BlockHitResult.miss(new Vec3(_bp.getX(), _bp.getY(), _bp.getZ()), Direction.UP, _bp));
Entity ent_looking = TraceTool.findLookingEntity(player, entity_range);
if (ent_looking == null)
return;
player.interactOn(ent_looking,InteractionHand.MAIN_HAND);
}
}
}
}

View file

@ -196,7 +196,7 @@
"key.target.fire_mode": "Fire Mode",
"key.target.sensitivity_increase": "Increase Sensitivity",
"key.target.sensitivity_reduce": "Reduce Sensitivity",
"key.target.interact": "Can RightClick Interact While Hold",
"key.target.interact": "Interact",
"effect.target.shock": "Shock",
"item.minecraft.potion.effect.target_shock": "Potion of Shock",

View file

@ -196,7 +196,7 @@
"key.target.fire_mode": "开火模式",
"key.target.sensitivity_increase": "增加灵敏度",
"key.target.sensitivity_reduce": "减少灵敏度",
"key.target.interact": "持枪时按住后可右键交互",
"key.target.interact": "交互",
"effect.target.shock": "电击",
"item.minecraft.potion.effect.target_shock": "电击药水",