移除弓箭发射procedure

This commit is contained in:
17146 2024-05-13 18:14:31 +08:00
parent bf12d1c0b6
commit 33f0adc359
4 changed files with 98 additions and 108 deletions

View file

@ -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);
}
}

View file

@ -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));
}
}
}

View file

@ -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<NetworkEvent.Context> 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());
}
}
}
}

View file

@ -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());
}
}
}
}