移除弓箭发射procedure
This commit is contained in:
parent
bf12d1c0b6
commit
33f0adc359
4 changed files with 98 additions and 108 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue