移除弓箭发射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.init.*;
|
||||||
import net.mcreator.target.network.DoubleJumpMessage;
|
import net.mcreator.target.network.DoubleJumpMessage;
|
||||||
|
import net.mcreator.target.network.FireMessage;
|
||||||
import net.mcreator.target.network.GunsDataMessage;
|
import net.mcreator.target.network.GunsDataMessage;
|
||||||
import net.mcreator.target.network.ZoomMessage;
|
import net.mcreator.target.network.ZoomMessage;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
@ -85,5 +86,6 @@ public class TargetMod {
|
||||||
addNetworkMessage(ZoomMessage.class, ZoomMessage::buffer, ZoomMessage::new, ZoomMessage::handler);
|
addNetworkMessage(ZoomMessage.class, ZoomMessage::buffer, ZoomMessage::new, ZoomMessage::handler);
|
||||||
addNetworkMessage(DoubleJumpMessage.class, DoubleJumpMessage::buffer, DoubleJumpMessage::new, DoubleJumpMessage::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(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();
|
int button = event.getButton();
|
||||||
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
|
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 (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
|
||||||
if ((player.getMainHandItem()).is(ItemTags.create(new ResourceLocation("target:gun")))) {
|
if ((player.getMainHandItem()).is(ItemTags.create(new ResourceLocation("target:gun")))) {
|
||||||
event.setCanceled(true);
|
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;
|
package net.mcreator.target.network;
|
||||||
|
|
||||||
import net.mcreator.target.TargetMod;
|
import net.mcreator.target.entity.BocekarrowEntity;
|
||||||
import net.mcreator.target.procedures.BowlooseProcedure;
|
import net.mcreator.target.init.TargetModEntities;
|
||||||
|
import net.mcreator.target.init.TargetModItems;
|
||||||
import net.mcreator.target.procedures.PressFireProcedure;
|
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.network.FriendlyByteBuf;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.world.entity.player.Player;
|
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.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 net.minecraftforge.network.NetworkEvent;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
|
|
||||||
public class FireMessage {
|
public class FireMessage {
|
||||||
int type, pressedms;
|
private final int type;
|
||||||
|
|
||||||
public FireMessage(int type, int pressedms) {
|
public FireMessage(int type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.pressedms = pressedms;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public FireMessage(FriendlyByteBuf buffer) {
|
public FireMessage(FriendlyByteBuf buffer) {
|
||||||
this.type = buffer.readInt();
|
this.type = buffer.readInt();
|
||||||
this.pressedms = buffer.readInt();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void buffer(FireMessage message, FriendlyByteBuf buffer) {
|
public static void buffer(FireMessage message, FriendlyByteBuf buffer) {
|
||||||
buffer.writeInt(message.type);
|
buffer.writeInt(message.type);
|
||||||
buffer.writeInt(message.pressedms);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void handler(FireMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
public static void handler(FireMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
NetworkEvent.Context context = contextSupplier.get();
|
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);
|
context.setPacketHandled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void pressAction(Player player, int type) {
|
public static void pressAction(Player player, int type) {
|
||||||
Level world = player.level();
|
Level world = player.level();
|
||||||
// security measure to prevent arbitrary chunk generation
|
|
||||||
if (!world.hasChunkAt(player.blockPosition()))
|
if (!world.hasChunkAt(player.blockPosition())) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (type == 0) {
|
if (type == 0) {
|
||||||
PressFireProcedure.execute(player);
|
PressFireProcedure.execute(player);
|
||||||
} else if (type == 1) {
|
} else if (type == 1) {
|
||||||
|
@ -53,12 +60,81 @@ public class FireMessage {
|
||||||
capability.bowPullHold = false;
|
capability.bowPullHold = false;
|
||||||
capability.syncPlayerVariables(player);
|
capability.syncPlayerVariables(player);
|
||||||
});
|
});
|
||||||
BowlooseProcedure.execute(player);
|
|
||||||
|
handleBowShoot(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
private static void handleBowShoot(Player player) {
|
||||||
public static void registerMessage(FMLCommonSetupEvent event) {
|
ItemStack stack = player.getMainHandItem();
|
||||||
TargetMod.addNetworkMessage(FireMessage.class, FireMessage::buffer, FireMessage::new, FireMessage::handler);
|
|
||||||
|
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