重制模拟按键交互
This commit is contained in:
parent
c6cb9b75e1
commit
99aa83927a
6 changed files with 82 additions and 9 deletions
|
@ -103,6 +103,7 @@ public class TargetMod {
|
||||||
addNetworkMessage(SensitivityMessage.class, SensitivityMessage::encode, SensitivityMessage::decode, SensitivityMessage::handler);
|
addNetworkMessage(SensitivityMessage.class, SensitivityMessage::encode, SensitivityMessage::decode, SensitivityMessage::handler);
|
||||||
addNetworkMessage(AdjustZoomFovMessage.class, AdjustZoomFovMessage::encode, AdjustZoomFovMessage::decode, AdjustZoomFovMessage::handler);
|
addNetworkMessage(AdjustZoomFovMessage.class, AdjustZoomFovMessage::encode, AdjustZoomFovMessage::decode, AdjustZoomFovMessage::handler);
|
||||||
addNetworkMessage(AdjustMortarAngleMessage.class, AdjustMortarAngleMessage::encode, AdjustMortarAngleMessage::decode, AdjustMortarAngleMessage::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)),
|
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())));
|
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), TargetModPotion.SHOCK.get())));
|
||||||
|
|
|
@ -81,9 +81,7 @@ public class ClickHandler {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
if (player.getMainHandItem().is(TargetModTags.Items.GUN)) {
|
if (player.getMainHandItem().is(TargetModTags.Items.GUN)) {
|
||||||
if (!TargetModKeyMappings.INTERACT.isDown()) {
|
event.setCanceled(true);
|
||||||
event.setCanceled(true);
|
|
||||||
}
|
|
||||||
TargetMod.PACKET_HANDLER.sendToServer(new ZoomMessage(0));
|
TargetMod.PACKET_HANDLER.sendToServer(new ZoomMessage(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
package net.mcreator.target.init;
|
package net.mcreator.target.init;
|
||||||
|
|
||||||
import net.mcreator.target.TargetMod;
|
import net.mcreator.target.TargetMod;
|
||||||
import net.mcreator.target.network.message.DoubleJumpMessage;
|
import net.mcreator.target.network.message.*;
|
||||||
import net.mcreator.target.network.message.FireModeMessage;
|
|
||||||
import net.mcreator.target.network.message.ReloadMessage;
|
|
||||||
import net.mcreator.target.network.message.SensitivityMessage;
|
|
||||||
import net.minecraft.client.KeyMapping;
|
import net.minecraft.client.KeyMapping;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
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") {
|
public static final KeyMapping INTERACT = new KeyMapping("key.target.interact", GLFW.GLFW_KEY_X, "key.categories.target") {
|
||||||
|
private boolean isDownOld = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDown(boolean isDown) {
|
public void setDown(boolean isDown) {
|
||||||
super.setDown(isDown);
|
super.setDown(isDown);
|
||||||
|
if (isDownOld != isDown && isDown) {
|
||||||
|
TargetMod.PACKET_HANDLER.sendToServer(new InteractMessage(0));
|
||||||
|
InteractMessage.pressAction(Minecraft.getInstance().player, 0);
|
||||||
|
}
|
||||||
|
isDownOld = isDown;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -196,7 +196,7 @@
|
||||||
"key.target.fire_mode": "Fire Mode",
|
"key.target.fire_mode": "Fire Mode",
|
||||||
"key.target.sensitivity_increase": "Increase Sensitivity",
|
"key.target.sensitivity_increase": "Increase Sensitivity",
|
||||||
"key.target.sensitivity_reduce": "Reduce Sensitivity",
|
"key.target.sensitivity_reduce": "Reduce Sensitivity",
|
||||||
"key.target.interact": "Can RightClick Interact While Hold",
|
"key.target.interact": "Interact",
|
||||||
|
|
||||||
"effect.target.shock": "Shock",
|
"effect.target.shock": "Shock",
|
||||||
"item.minecraft.potion.effect.target_shock": "Potion of Shock",
|
"item.minecraft.potion.effect.target_shock": "Potion of Shock",
|
||||||
|
|
|
@ -196,7 +196,7 @@
|
||||||
"key.target.fire_mode": "开火模式",
|
"key.target.fire_mode": "开火模式",
|
||||||
"key.target.sensitivity_increase": "增加灵敏度",
|
"key.target.sensitivity_increase": "增加灵敏度",
|
||||||
"key.target.sensitivity_reduce": "减少灵敏度",
|
"key.target.sensitivity_reduce": "减少灵敏度",
|
||||||
"key.target.interact": "持枪时按住后可右键交互",
|
"key.target.interact": "交互",
|
||||||
|
|
||||||
"effect.target.shock": "电击",
|
"effect.target.shock": "电击",
|
||||||
"item.minecraft.potion.effect.target_shock": "电击药水",
|
"item.minecraft.potion.effect.target_shock": "电击药水",
|
||||||
|
|
Loading…
Add table
Reference in a new issue