From 33f0adc3594c97d38a36ce6a39fdd5a6bcbea664 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Mon, 13 May 2024 18:14:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=BC=93=E7=AE=AD=E5=8F=91?= =?UTF-8?q?=E5=B0=84procedure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/net/mcreator/target/TargetMod.java | 2 + .../mcreator/target/client/ClickHandler.java | 4 +- .../mcreator/target/network/FireMessage.java | 112 +++++++++++++++--- .../target/procedures/BowlooseProcedure.java | 88 -------------- 4 files changed, 98 insertions(+), 108 deletions(-) delete mode 100644 src/main/java/net/mcreator/target/procedures/BowlooseProcedure.java diff --git a/src/main/java/net/mcreator/target/TargetMod.java b/src/main/java/net/mcreator/target/TargetMod.java index 63ffd55d9..1845fd60d 100644 --- a/src/main/java/net/mcreator/target/TargetMod.java +++ b/src/main/java/net/mcreator/target/TargetMod.java @@ -2,6 +2,7 @@ package net.mcreator.target; import net.mcreator.target.init.*; import net.mcreator.target.network.DoubleJumpMessage; +import net.mcreator.target.network.FireMessage; import net.mcreator.target.network.GunsDataMessage; import net.mcreator.target.network.ZoomMessage; import net.minecraft.network.FriendlyByteBuf; @@ -85,5 +86,6 @@ public class TargetMod { addNetworkMessage(ZoomMessage.class, ZoomMessage::buffer, ZoomMessage::new, ZoomMessage::handler); addNetworkMessage(DoubleJumpMessage.class, DoubleJumpMessage::buffer, DoubleJumpMessage::new, DoubleJumpMessage::handler); addNetworkMessage(GunsDataMessage.class, GunsDataMessage::encode, GunsDataMessage::decode, GunsDataMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); + addNetworkMessage(FireMessage.class, FireMessage::buffer, FireMessage::new, FireMessage::handler); } } diff --git a/src/main/java/net/mcreator/target/client/ClickHandler.java b/src/main/java/net/mcreator/target/client/ClickHandler.java index 9250a8603..5cad0bd78 100644 --- a/src/main/java/net/mcreator/target/client/ClickHandler.java +++ b/src/main/java/net/mcreator/target/client/ClickHandler.java @@ -48,7 +48,7 @@ public class ClickHandler { int button = event.getButton(); if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { - TargetMod.PACKET_HANDLER.sendToServer(new FireMessage(1, 0)); + TargetMod.PACKET_HANDLER.sendToServer(new FireMessage(1)); } } @@ -75,7 +75,7 @@ public class ClickHandler { if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { if ((player.getMainHandItem()).is(ItemTags.create(new ResourceLocation("target:gun")))) { event.setCanceled(true); - TargetMod.PACKET_HANDLER.sendToServer(new FireMessage(0, 0)); + TargetMod.PACKET_HANDLER.sendToServer(new FireMessage(0)); } } } diff --git a/src/main/java/net/mcreator/target/network/FireMessage.java b/src/main/java/net/mcreator/target/network/FireMessage.java index 00f551d64..8aa9d2fb6 100644 --- a/src/main/java/net/mcreator/target/network/FireMessage.java +++ b/src/main/java/net/mcreator/target/network/FireMessage.java @@ -1,48 +1,55 @@ package net.mcreator.target.network; -import net.mcreator.target.TargetMod; -import net.mcreator.target.procedures.BowlooseProcedure; +import net.mcreator.target.entity.BocekarrowEntity; +import net.mcreator.target.init.TargetModEntities; +import net.mcreator.target.init.TargetModItems; import net.mcreator.target.procedures.PressFireProcedure; +import net.mcreator.target.tools.GunsTool; +import net.minecraft.commands.CommandSource; +import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.AbstractArrow; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; -@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public class FireMessage { - int type, pressedms; + private final int type; - public FireMessage(int type, int pressedms) { + public FireMessage(int type) { this.type = type; - this.pressedms = pressedms; } public FireMessage(FriendlyByteBuf buffer) { this.type = buffer.readInt(); - this.pressedms = buffer.readInt(); } public static void buffer(FireMessage message, FriendlyByteBuf buffer) { buffer.writeInt(message.type); - buffer.writeInt(message.pressedms); } public static void handler(FireMessage message, Supplier contextSupplier) { NetworkEvent.Context context = contextSupplier.get(); - context.enqueueWork(() -> pressAction(context.getSender(), message.type)); + context.enqueueWork(() -> { + if (context.getSender() != null) { + pressAction(context.getSender(), message.type); + } + }); context.setPacketHandled(true); } public static void pressAction(Player player, int type) { Level world = player.level(); - // security measure to prevent arbitrary chunk generation - if (!world.hasChunkAt(player.blockPosition())) + + if (!world.hasChunkAt(player.blockPosition())) { return; + } + if (type == 0) { PressFireProcedure.execute(player); } else if (type == 1) { @@ -53,12 +60,81 @@ public class FireMessage { capability.bowPullHold = false; capability.syncPlayerVariables(player); }); - BowlooseProcedure.execute(player); + + handleBowShoot(player); } } - @SubscribeEvent - public static void registerMessage(FMLCommonSetupEvent event) { - TargetMod.addNetworkMessage(FireMessage.class, FireMessage::buffer, FireMessage::new, FireMessage::handler); + private static void handleBowShoot(Player player) { + ItemStack stack = player.getMainHandItem(); + + if (stack.getItem() != TargetModItems.BOCEK.get()) { + return; + } + + double power = stack.getOrCreateTag().getDouble("power"); + + if (!player.level().isClientSide() && player.getServer() != null) { + player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, + player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "stopsound @a player target:bocek_pull_1p"); + player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, + player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "stopsound @a player target:bocek_pull_3p"); + } + + if (stack.getOrCreateTag().getDouble("power") >= 6) { + stack.getOrCreateTag().putDouble("speed", stack.getOrCreateTag().getDouble("power")); + if ((player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).zooming) { + Level level = player.level(); + if (!level.isClientSide()) { + float damage = (float) (0.02 * stack.getOrCreateTag().getDouble("damage") * (1 + 0.05 * stack.getOrCreateTag().getDouble("level"))); + + BocekarrowEntity arrow = new BocekarrowEntity(TargetModEntities.BOCEKARROW.get(), level); + arrow.setOwner(player); + arrow.setBaseDamage(damage); + arrow.setKnockback(0); + arrow.setSilent(true); + arrow.setPierceLevel((byte) 2); + arrow.pickup = AbstractArrow.Pickup.ALLOWED; + + arrow.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); + arrow.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) (4 * power), (float) 0.02); + level.addFreshEntity(arrow); + } + + if (!player.level().isClientSide() && player.getServer() != null) { + player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, + player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:bocek_zoom_fire_1p player @s ~ ~ ~ 10 1"); + player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, + player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:bocek_zoom_fire_3p player @a ~ ~ ~ 2 1"); + } + } else { + for (int index0 = 0; index0 < 10; index0++) { + GunsTool.spawnBullet(player); + } + + if (!player.level().isClientSide() && player.getServer() != null) { + player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, + player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:bocek_shatter_cap_fire_1p player @s ~ ~ ~ 10 1"); + player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, + player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:bocek_shatter_cap_fire_3p player @a ~ ~ ~ 2 1"); + } + } + + player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.recoilHorizon = Math.random() < 0.5 ? -1 : 1; + capability.recoil = 0.1; + capability.firing = 1; + capability.syncPlayerVariables(player); + }); + + player.getCooldowns().addCooldown(player.getMainHandItem().getItem(), 7); + player.getMainHandItem().getOrCreateTag().putDouble("arrowempty", 7); + player.getMainHandItem().getOrCreateTag().putDouble("power", 0); + stack.getOrCreateTag().putDouble("fireanim", 2); + + if (!player.isCreative()) { + player.getInventory().clearOrCountMatchingItems(p -> Items.ARROW == p.getItem(), 1, player.inventoryMenu.getCraftSlots()); + } + } } } diff --git a/src/main/java/net/mcreator/target/procedures/BowlooseProcedure.java b/src/main/java/net/mcreator/target/procedures/BowlooseProcedure.java deleted file mode 100644 index 65749b8d3..000000000 --- a/src/main/java/net/mcreator/target/procedures/BowlooseProcedure.java +++ /dev/null @@ -1,88 +0,0 @@ -package net.mcreator.target.procedures; - -import net.mcreator.target.entity.BocekarrowEntity; -import net.mcreator.target.init.TargetModEntities; -import net.mcreator.target.init.TargetModItems; -import net.mcreator.target.network.TargetModVariables; -import net.mcreator.target.tools.GunsTool; -import net.minecraft.commands.CommandSource; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.projectile.AbstractArrow; -import net.minecraft.world.entity.projectile.Projectile; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.level.Level; - -public class BowlooseProcedure { - public static void execute(Player player) { - ItemStack usehand = ItemStack.EMPTY; - double power; - power = player.getMainHandItem().getOrCreateTag().getDouble("power"); - if (!player.level().isClientSide() && player.getServer() != null) { - player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, - player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "stopsound @a player target:bocek_pull_1p"); - player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, - player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "stopsound @a player target:bocek_pull_3p"); - } - if (player.getMainHandItem().getItem() == TargetModItems.BOCEK.get() - && player.getMainHandItem().getOrCreateTag().getDouble("power") >= 6) { - player.getMainHandItem().getOrCreateTag().putDouble("speed", - (player.getMainHandItem().getOrCreateTag().getDouble("power"))); - if ((player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).zooming) { - Level projectileLevel = player.level(); - if (!projectileLevel.isClientSide()) { - Projectile _entityToSpawn = new Object() { - public Projectile getArrow(Level level, Entity shooter, float damage, int knockback, byte piercing) { - AbstractArrow entityToSpawn = new BocekarrowEntity(TargetModEntities.BOCEKARROW.get(), level); - entityToSpawn.setOwner(shooter); - entityToSpawn.setBaseDamage(damage); - entityToSpawn.setKnockback(knockback); - entityToSpawn.setSilent(true); - entityToSpawn.setPierceLevel(piercing); - entityToSpawn.pickup = AbstractArrow.Pickup.ALLOWED; - return entityToSpawn; - } - }.getArrow(projectileLevel, player, (float) (0.02 * player.getMainHandItem().getOrCreateTag().getDouble("damage") * (1 + 0.05 * player.getMainHandItem().getOrCreateTag().getDouble("level"))), 0, (byte) 2); - _entityToSpawn.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); - _entityToSpawn.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (float) (4 * power), (float) 0.02); - projectileLevel.addFreshEntity(_entityToSpawn); - } - if (!player.level().isClientSide() && player.getServer() != null) { - player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, - player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:bocek_zoom_fire_1p player @s ~ ~ ~ 10 1"); - player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, - player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:bocek_zoom_fire_3p player @a ~ ~ ~ 2 1"); - } - } else { - for (int index0 = 0; index0 < 10; index0++) { - GunsTool.spawnBullet(player); - } - - if (!player.level().isClientSide() && player.getServer() != null) { - player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, - player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:bocek_shatter_cap_fire_1p player @s ~ ~ ~ 10 1"); - player.getServer().getCommands().performPrefixedCommand(new CommandSourceStack(CommandSource.NULL, player.position(), player.getRotationVector(), (ServerLevel) player.level(), 4, - player.getName().getString(), player.getDisplayName(), player.level().getServer(), player), "playsound target:bocek_shatter_cap_fire_3p player @a ~ ~ ~ 2 1"); - } - } - player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.recoilHorizon = Math.random() < 0.5 ? -1 : 1; - capability.recoil = 0.1; - capability.firing = 1; - capability.syncPlayerVariables(player); - }); - - player.getCooldowns().addCooldown(player.getMainHandItem().getItem(), 7); - player.getMainHandItem().getOrCreateTag().putDouble("arrowempty", 7); - player.getMainHandItem().getOrCreateTag().putDouble("power", 0); - usehand.getOrCreateTag().putDouble("fireanim", 2); - - if (!player.isCreative()) { - player.getInventory().clearOrCountMatchingItems(p -> Items.ARROW == p.getItem(), 1, player.inventoryMenu.getCraftSlots()); - } - } - } -}