diff --git a/src/main/java/net/mcreator/target/TargetMod.java b/src/main/java/net/mcreator/target/TargetMod.java index d236a50b4..d43501d37 100644 --- a/src/main/java/net/mcreator/target/TargetMod.java +++ b/src/main/java/net/mcreator/target/TargetMod.java @@ -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()))); diff --git a/src/main/java/net/mcreator/target/client/ClickHandler.java b/src/main/java/net/mcreator/target/client/ClickHandler.java index ced580891..1a3650f48 100644 --- a/src/main/java/net/mcreator/target/client/ClickHandler.java +++ b/src/main/java/net/mcreator/target/client/ClickHandler.java @@ -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)); } } diff --git a/src/main/java/net/mcreator/target/init/TargetModKeyMappings.java b/src/main/java/net/mcreator/target/init/TargetModKeyMappings.java index ef04f254d..a2bd0eafd 100644 --- a/src/main/java/net/mcreator/target/init/TargetModKeyMappings.java +++ b/src/main/java/net/mcreator/target/init/TargetModKeyMappings.java @@ -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; } }; diff --git a/src/main/java/net/mcreator/target/network/message/InteractMessage.java b/src/main/java/net/mcreator/target/network/message/InteractMessage.java new file mode 100644 index 000000000..f6761e7db --- /dev/null +++ b/src/main/java/net/mcreator/target/network/message/InteractMessage.java @@ -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 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); + } + } + } +} diff --git a/src/main/resources/assets/target/lang/en_us.json b/src/main/resources/assets/target/lang/en_us.json index 39dd6ca58..d27b3b489 100644 --- a/src/main/resources/assets/target/lang/en_us.json +++ b/src/main/resources/assets/target/lang/en_us.json @@ -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", diff --git a/src/main/resources/assets/target/lang/zh_cn.json b/src/main/resources/assets/target/lang/zh_cn.json index 5000b631d..fb072127a 100644 --- a/src/main/resources/assets/target/lang/zh_cn.json +++ b/src/main/resources/assets/target/lang/zh_cn.json @@ -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": "电击药水",