修改二段跳的实现方式

This commit is contained in:
17146 2024-08-25 00:01:44 +08:00
parent b79a67cf60
commit 15f2319ea6
6 changed files with 59 additions and 57 deletions

View file

@ -6,14 +6,18 @@ import net.mcreator.superbwarfare.entity.ICannonEntity;
import net.mcreator.superbwarfare.entity.MortarEntity;
import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.init.ModMobEffects;
import net.mcreator.superbwarfare.init.ModSounds;
import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.network.ModVariables;
import net.mcreator.superbwarfare.network.message.*;
import net.mcreator.superbwarfare.tools.TraceTool;
import net.minecraft.client.Minecraft;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
@ -44,7 +48,7 @@ public class ClickHandler {
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(1));
}
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
if (Minecraft.getInstance().player.hasEffect(ModMobEffects.SHOCK.get())) {
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
event.setCanceled(true);
}
@ -59,7 +63,6 @@ public class ClickHandler {
Player player = Minecraft.getInstance().player;
if (player == null) return;
if (player.isSpectator()) return;
ItemStack stack = player.getMainHandItem();
@ -67,7 +70,7 @@ public class ClickHandler {
int button = event.getButton();
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
if (Minecraft.getInstance().player.hasEffect(ModMobEffects.SHOCK.get())) {
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
event.setCanceled(true);
return;
}
@ -75,7 +78,7 @@ public class ClickHandler {
event.setCanceled(true);
ModUtils.PACKET_HANDLER.sendToServer(new DroneFireMessage(0));
}
if (player.getVehicle() != null && (player.getVehicle() instanceof ICannonEntity)) {
if (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity) {
event.setCanceled(true);
ModUtils.PACKET_HANDLER.sendToServer(new VehicleFireMessage(0));
return;
@ -87,17 +90,17 @@ public class ClickHandler {
}
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
if (Minecraft.getInstance().player.hasEffect(ModMobEffects.SHOCK.get())) {
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
event.setCanceled(true);
}
if (player.getMainHandItem().is(ModTags.Items.GUN) || (player.isPassenger() && (player.getVehicle() instanceof ICannonEntity))) {
if (player.getMainHandItem().is(ModTags.Items.GUN) || (player.isPassenger() && player.getVehicle() instanceof ICannonEntity)) {
event.setCanceled(true);
ModUtils.PACKET_HANDLER.sendToServer(new ZoomMessage(0));
}
}
if (button == GLFW.GLFW_MOUSE_BUTTON_MIDDLE) {
if (Minecraft.getInstance().player.hasEffect(ModMobEffects.SHOCK.get())) {
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
event.setCanceled(true);
}
}
@ -114,7 +117,7 @@ public class ClickHandler {
double scroll = event.getScrollDelta();
if (stack.is(ModTags.Items.GUN) && (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) {
if (stack.is(ModTags.Items.GUN) && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom) {
var tag = stack.getOrCreateTag();
if (tag.getDouble("min_zoom") != 0 && tag.getDouble("max_zoom") != 0) {
ModUtils.PACKET_HANDLER.sendToServer(new AdjustZoomFovMessage(scroll));
@ -134,7 +137,17 @@ public class ClickHandler {
}
}
private static void setKeyState(int key, int state) {
private static void setKeyState(InputEvent.Key event) {
int key = event.getKey();
int state;
if (event.getAction() == InputConstants.PRESS) {
state = 1;
} else if (event.getAction() == InputConstants.RELEASE) {
state = 0;
} else {
return;
}
Player player = Minecraft.getInstance().player;
if (player == null) return;
@ -151,16 +164,34 @@ public class ClickHandler {
public static void onKeyPressed(InputEvent.Key event) {
if (notInGame()) return;
boolean clicked;
if (event.getAction() == InputConstants.PRESS) {
clicked = true;
} else if (event.getAction() == InputConstants.RELEASE) {
clicked = false;
} else {
Player player = Minecraft.getInstance().player;
if (player == null) return;
if (player.isSpectator()) return;
setKeyState(event);
int key = event.getKey();
if (key == Minecraft.getInstance().options.keyJump.getKey().getValue()) {
handleDoubleJump(player);
}
}
private static void handleDoubleJump(Player player) {
Level level = player.level();
double x = player.getX();
double y = player.getY();
double z = player.getZ();
if (!level.isLoaded(player.blockPosition())) {
return;
}
setKeyState(event.getKey(), clicked ? 1 : 0);
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).playerDoubleJump) {
player.setDeltaMovement(new Vec3(player.getLookAngle().x, 0.8, player.getLookAngle().z));
level.playLocalSound(x, y, z, ModSounds.DOUBLE_JUMP.get(), SoundSource.BLOCKS, 1, 1, false);
ModUtils.PACKET_HANDLER.sendToServer(new DoubleJumpMessage(false));
}
}
}

View file

@ -87,13 +87,14 @@ public class PlayerEventHandler {
handlePlayerSprint(player);
handleWeaponLevel(player);
handleAmmoCount(player);
handleGround(player);
handlePrepareZoom(player);
handleSpecialWeaponAmmo(player);
handleChangeFireRate(player);
handleBocekPulling(player);
handleGunRecoil(player);
}
handleGround(player);
handleDistantRange(player);
handleSimulationDistance(player);
handleCannonTime(player);

View file

@ -26,22 +26,6 @@ public class ModKeyMappings {
}
};
public static final KeyMapping DOUBLE_JUMP = new KeyMapping("key.superbwarfare.double_jump", GLFW.GLFW_KEY_SPACE, "key.categories.superbwarfare") {
private boolean isDownOld = false;
@Override
public void setDown(boolean isDown) {
super.setDown(isDown);
if (isDownOld != isDown && isDown) {
ModUtils.PACKET_HANDLER.sendToServer(new DoubleJumpMessage(0));
// if (Minecraft.getInstance().player != null) {
// DoubleJumpMessage.pressAction(Minecraft.getInstance().player, 0);
// }
}
isDownOld = isDown;
}
};
public static final KeyMapping FIRE_MODE = new KeyMapping("key.superbwarfare.fire_mode", GLFW.GLFW_KEY_N, "key.categories.superbwarfare") {
private boolean isDownOld = false;
@ -201,7 +185,6 @@ public class ModKeyMappings {
@SubscribeEvent
public static void registerKeyMappings(RegisterKeyMappingsEvent event) {
event.register(RELOAD);
event.register(DOUBLE_JUMP);
event.register(FIRE_MODE);
event.register(SENSITIVITY_INCREASE);
event.register(SENSITIVITY_REDUCE);
@ -221,7 +204,6 @@ public class ModKeyMappings {
public static void onClientTick(TickEvent.ClientTickEvent event) {
if (Minecraft.getInstance().screen == null) {
RELOAD.consumeClick();
DOUBLE_JUMP.consumeClick();
FIRE_MODE.consumeClick();
SENSITIVITY_INCREASE.consumeClick();
SENSITIVITY_REDUCE.consumeClick();

View file

@ -7,24 +7,23 @@ import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class DoubleJumpMessage {
private final int type;
private final boolean canDoubleJump;
public DoubleJumpMessage(int type) {
this.type = type;
public DoubleJumpMessage(boolean canDoubleJump) {
this.canDoubleJump = canDoubleJump;
}
public static DoubleJumpMessage decode(FriendlyByteBuf buffer) {
return new DoubleJumpMessage(buffer.readInt());
return new DoubleJumpMessage(buffer.readBoolean());
}
public static void encode(DoubleJumpMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.type);
buffer.writeBoolean(message.canDoubleJump);
}
public static void handler(DoubleJumpMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
@ -42,22 +41,13 @@ public class DoubleJumpMessage {
return;
}
if (message.type == 0) {
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).playerDoubleJump) {
player.setDeltaMovement(new Vec3(player.getLookAngle().x, 0.8, player.getLookAngle().z));
if (!level.isClientSide()) {
level.playSound(null, BlockPos.containing(x, y, z), ModSounds.DOUBLE_JUMP.get(), SoundSource.BLOCKS, 1, 1);
} else {
level.playLocalSound(x, y, z, ModSounds.DOUBLE_JUMP.get(), SoundSource.BLOCKS, 1, 1, false);
}
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.playerDoubleJump = false;
capability.playerDoubleJump = message.canDoubleJump;
capability.syncPlayerVariables(player);
});
}
}
}
});
context.setPacketHandled(true);
}

View file

@ -268,7 +268,6 @@
"key.categories.superbwarfare": "Superb Warfare",
"key.superbwarfare.reload": "Reload",
"key.superbwarfare.double_jump": "Double Jump",
"key.superbwarfare.fire_mode": "Fire Mode",
"key.superbwarfare.sensitivity_increase": "Increase Sensitivity",
"key.superbwarfare.sensitivity_reduce": "Reduce Sensitivity",

View file

@ -268,7 +268,6 @@
"key.categories.superbwarfare": "卓越前线",
"key.superbwarfare.reload": "装填子弹",
"key.superbwarfare.double_jump": "二段跳",
"key.superbwarfare.fire_mode": "开火模式",
"key.superbwarfare.sensitivity_increase": "增加灵敏度",
"key.superbwarfare.sensitivity_reduce": "减少灵敏度",