优化无人机操作网络包写法

This commit is contained in:
17146 2024-07-24 22:30:39 +08:00
parent 59de873d91
commit 231302de0a
11 changed files with 132 additions and 401 deletions

View file

@ -105,13 +105,7 @@ public class TargetMod {
addNetworkMessage(AdjustZoomFovMessage.class, AdjustZoomFovMessage::encode, AdjustZoomFovMessage::decode, AdjustZoomFovMessage::handler);
addNetworkMessage(AdjustMortarAngleMessage.class, AdjustMortarAngleMessage::encode, AdjustMortarAngleMessage::decode, AdjustMortarAngleMessage::handler);
addNetworkMessage(InteractMessage.class, InteractMessage::encode, InteractMessage::decode, InteractMessage::handler);
addNetworkMessage(DroneMoveLeftMessage.class, DroneMoveLeftMessage::encode, DroneMoveLeftMessage::decode, DroneMoveLeftMessage::handler);
addNetworkMessage(DroneMoveRightMessage.class, DroneMoveRightMessage::encode, DroneMoveRightMessage::decode, DroneMoveRightMessage::handler);
addNetworkMessage(DroneMoveForwardMessage.class, DroneMoveForwardMessage::encode, DroneMoveForwardMessage::decode, DroneMoveForwardMessage::handler);
addNetworkMessage(DroneMoveBackwardMessage.class, DroneMoveBackwardMessage::encode, DroneMoveBackwardMessage::decode, DroneMoveBackwardMessage::handler);
addNetworkMessage(DroneMoveUpMessage.class, DroneMoveUpMessage::encode, DroneMoveUpMessage::decode, DroneMoveUpMessage::handler);
addNetworkMessage(DroneMoveDownMessage.class, DroneMoveDownMessage::encode, DroneMoveDownMessage::decode, DroneMoveDownMessage::handler);
addNetworkMessage(DroneMovementMessage.class, DroneMovementMessage::encode, DroneMovementMessage::decode, DroneMovementMessage::handler);
addNetworkMessage(DroneFireMessage.class, DroneFireMessage::buffer, DroneFireMessage::new, DroneFireMessage::handler);
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)),

View file

@ -2,18 +2,15 @@ package net.mcreator.target.client;
import com.mojang.blaze3d.platform.InputConstants;
import net.mcreator.target.TargetMod;
import net.mcreator.target.client.gui.RangeHelper;
import net.mcreator.target.entity.Mk42Entity;
import net.mcreator.target.entity.MortarEntity;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModKeyMappings;
import net.mcreator.target.init.TargetModMobEffects;
import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.network.message.*;
import net.mcreator.target.tools.TraceTool;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
@ -151,54 +148,37 @@ public class ClickHandler {
@SubscribeEvent
public static void onKeyPressed(InputEvent.Key event) {
if (notInGame()) return;
if (event.getAction() != InputConstants.PRESS) return;
setKeyState(event.getKey(), 1);
boolean clicked;
if (event.getAction() == InputConstants.PRESS) {
clicked = true;
} else if (event.getAction() == InputConstants.RELEASE) {
clicked = false;
} else {
return;
}
setKeyState(event.getKey(), clicked ? 1 : 0);
int button = event.getKey();
if (button == GLFW.GLFW_KEY_A) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveLeftMessage(true));
TargetMod.PACKET_HANDLER.sendToServer(new DroneMovementMessage(0, clicked));
}
if (button == GLFW.GLFW_KEY_D) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveRightMessage(true));
TargetMod.PACKET_HANDLER.sendToServer(new DroneMovementMessage(1, clicked));
}
if (button == GLFW.GLFW_KEY_W) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveForwardMessage(true));
TargetMod.PACKET_HANDLER.sendToServer(new DroneMovementMessage(2, clicked));
}
if (button == GLFW.GLFW_KEY_S) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveBackwardMessage(true));
TargetMod.PACKET_HANDLER.sendToServer(new DroneMovementMessage(3, clicked));
}
if (button == GLFW.GLFW_KEY_SPACE) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveUpMessage(true));
TargetMod.PACKET_HANDLER.sendToServer(new DroneMovementMessage(4, clicked));
}
if (button == GLFW.GLFW_KEY_LEFT_CONTROL) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveDownMessage(true));
if (button == GLFW.GLFW_KEY_LEFT_SHIFT) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMovementMessage(5, clicked));
}
}
@SubscribeEvent
public static void onKeyReleased(InputEvent.Key event) {
if (notInGame()) return;
if (event.getAction() != InputConstants.RELEASE) return;
setKeyState(event.getKey(), 0);
int button = event.getKey();
if (button == GLFW.GLFW_KEY_A) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveLeftMessage(false));
}
if (button == GLFW.GLFW_KEY_D) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveRightMessage(false));
}
if (button == GLFW.GLFW_KEY_W) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveForwardMessage(false));
}
if (button == GLFW.GLFW_KEY_S) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveBackwardMessage(false));
}
if (button == GLFW.GLFW_KEY_SPACE) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveUpMessage(false));
}
if (button == GLFW.GLFW_KEY_LEFT_CONTROL) {
TargetMod.PACKET_HANDLER.sendToServer(new DroneMoveDownMessage(false));
}
}
}

View file

@ -1,14 +1,19 @@
package net.mcreator.target.entity;
import net.mcreator.target.init.*;
import net.mcreator.target.item.common.ammo.CannonShellItem;
import net.mcreator.target.init.TargetModEntities;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.item.Monitor;
import net.mcreator.target.tools.SoundTool;
import net.minecraft.ChatFormatting;
import net.minecraft.commands.CommandSource;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
@ -16,41 +21,29 @@ import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.*;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation;
import net.minecraft.world.entity.ai.navigation.PathNavigation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.registries.ForgeRegistries;
import software.bernie.geckolib.util.GeckoLibUtil;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.core.animation.AnimationController;
import software.bernie.geckolib.core.animation.AnimatableManager;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.animatable.GeoEntity;
import net.minecraftforge.network.PlayMessages;
import net.minecraftforge.network.NetworkHooks;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.Level;
import net.minecraft.world.entity.ai.navigation.PathNavigation;
import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.network.protocol.Packet;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.core.BlockPos;
import net.mcreator.target.item.Monitor;
import net.minecraftforge.network.PlayMessages;
import net.minecraftforge.registries.ForgeRegistries;
import software.bernie.geckolib.animatable.GeoEntity;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
import software.bernie.geckolib.core.animation.AnimationController;
import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.Objects;
@ -64,7 +57,6 @@ public class DroneEntity extends PathfinderMob implements GeoEntity {
private float moveZ = 0;
private boolean move = false;
public String animationprocedure = "empty";
public DroneEntity(PlayMessages.SpawnEntity packet, Level world) {

View file

@ -5,7 +5,6 @@ import net.mcreator.target.tools.ItemNBTTool;
import net.mcreator.target.tools.TooltipTool;
import net.minecraft.client.CameraType;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
@ -37,9 +36,13 @@ public class Monitor extends Item {
@Override
public InteractionResultHolder<ItemStack> use(Level world, Player player, InteractionHand hand) {
InteractionResultHolder<ItemStack> ar = super.use(world, player, hand);
Minecraft mc = Minecraft.getInstance();
ItemStack stack = player.getMainHandItem();
if (!ItemNBTTool.getBoolean(stack, LINKED, false)) {
return super.use(world, player, hand);
}
Minecraft mc = Minecraft.getInstance();
if (!stack.getOrCreateTag().getBoolean("Using")) {
stack.getOrCreateTag().putBoolean("Using", true);
mc.options.setCameraType(CameraType.THIRD_PERSON_BACK);
@ -50,17 +53,18 @@ public class Monitor extends Item {
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
if (drone != null) {
drone.getPersistentData().putBoolean("left",false);
drone.getPersistentData().putBoolean("right",false);
drone.getPersistentData().putBoolean("forward",false);
drone.getPersistentData().putBoolean("backward",false);
drone.getPersistentData().putBoolean("up",false);
drone.getPersistentData().putBoolean("down",false);
}
return ar;
drone.getPersistentData().putBoolean("left", false);
drone.getPersistentData().putBoolean("right", false);
drone.getPersistentData().putBoolean("forward", false);
drone.getPersistentData().putBoolean("backward", false);
drone.getPersistentData().putBoolean("up", false);
drone.getPersistentData().putBoolean("down", false);
}
return super.use(world, player, hand);
}
@Override
public void appendHoverText(ItemStack stack, Level world, List<Component> list, TooltipFlag flag) {

View file

@ -1,51 +0,0 @@
package net.mcreator.target.network.message;
import net.mcreator.target.entity.DroneEntity;
import net.mcreator.target.init.TargetModItems;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class DroneMoveBackwardMessage {
private final boolean backward;
public DroneMoveBackwardMessage(boolean backward) {
this.backward = backward;
}
public static DroneMoveBackwardMessage decode(FriendlyByteBuf buffer) {
return new DroneMoveBackwardMessage(buffer.readBoolean());
}
public static void encode(DroneMoveBackwardMessage message, FriendlyByteBuf buffer) {
buffer.writeBoolean(message.backward);
}
public static void handler(DroneMoveBackwardMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (context.getSender() != null) {
pressAction(context.getSender(), message.backward);
}
});
context.setPacketHandled(true);
}
public static void pressAction(Player player, boolean backward) {
ItemStack stack = player.getMainHandItem();
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
if (drone != null) {
if (backward) {
drone.getPersistentData().putBoolean("backward",true);
} else {
drone.getPersistentData().putBoolean("backward",false);
}
}
}
}
}

View file

@ -1,51 +0,0 @@
package net.mcreator.target.network.message;
import net.mcreator.target.entity.DroneEntity;
import net.mcreator.target.init.TargetModItems;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class DroneMoveDownMessage {
private final boolean down;
public DroneMoveDownMessage(boolean down) {
this.down = down;
}
public static DroneMoveDownMessage decode(FriendlyByteBuf buffer) {
return new DroneMoveDownMessage(buffer.readBoolean());
}
public static void encode(DroneMoveDownMessage message, FriendlyByteBuf buffer) {
buffer.writeBoolean(message.down);
}
public static void handler(DroneMoveDownMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (context.getSender() != null) {
pressAction(context.getSender(), message.down);
}
});
context.setPacketHandled(true);
}
public static void pressAction(Player player, boolean down) {
ItemStack stack = player.getMainHandItem();
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
if (drone != null) {
if (down) {
drone.getPersistentData().putBoolean("down",true);
} else {
drone.getPersistentData().putBoolean("down",false);
}
}
}
}
}

View file

@ -1,51 +0,0 @@
package net.mcreator.target.network.message;
import net.mcreator.target.entity.DroneEntity;
import net.mcreator.target.init.TargetModItems;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class DroneMoveForwardMessage {
private final boolean forward;
public DroneMoveForwardMessage(boolean forward) {
this.forward = forward;
}
public static DroneMoveForwardMessage decode(FriendlyByteBuf buffer) {
return new DroneMoveForwardMessage(buffer.readBoolean());
}
public static void encode(DroneMoveForwardMessage message, FriendlyByteBuf buffer) {
buffer.writeBoolean(message.forward);
}
public static void handler(DroneMoveForwardMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (context.getSender() != null) {
pressAction(context.getSender(), message.forward);
}
});
context.setPacketHandled(true);
}
public static void pressAction(Player player, boolean forward) {
ItemStack stack = player.getMainHandItem();
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
if (drone != null) {
if (forward) {
drone.getPersistentData().putBoolean("forward",true);
} else {
drone.getPersistentData().putBoolean("forward",false);
}
}
}
}
}

View file

@ -1,52 +0,0 @@
package net.mcreator.target.network.message;
import net.mcreator.target.entity.DroneEntity;
import net.mcreator.target.init.TargetModItems;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class DroneMoveLeftMessage {
private final boolean left;
public DroneMoveLeftMessage(boolean left) {
this.left = left;
}
public static DroneMoveLeftMessage decode(FriendlyByteBuf buffer) {
return new DroneMoveLeftMessage(buffer.readBoolean());
}
public static void encode(DroneMoveLeftMessage message, FriendlyByteBuf buffer) {
buffer.writeBoolean(message.left);
}
public static void handler(DroneMoveLeftMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (context.getSender() != null) {
pressAction(context.getSender(), message.left);
}
});
context.setPacketHandled(true);
}
public static void pressAction(Player player, boolean left) {
ItemStack stack = player.getMainHandItem();
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
if (drone != null) {
if (left) {
drone.getPersistentData().putBoolean("left",true);
} else {
drone.getPersistentData().putBoolean("left",false);
}
}
}
}
}

View file

@ -1,51 +0,0 @@
package net.mcreator.target.network.message;
import net.mcreator.target.entity.DroneEntity;
import net.mcreator.target.init.TargetModItems;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class DroneMoveRightMessage {
private final boolean right;
public DroneMoveRightMessage(boolean right) {
this.right = right;
}
public static DroneMoveRightMessage decode(FriendlyByteBuf buffer) {
return new DroneMoveRightMessage(buffer.readBoolean());
}
public static void encode(DroneMoveRightMessage message, FriendlyByteBuf buffer) {
buffer.writeBoolean(message.right);
}
public static void handler(DroneMoveRightMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (context.getSender() != null) {
pressAction(context.getSender(), message.right);
}
});
context.setPacketHandled(true);
}
public static void pressAction(Player player, boolean left) {
ItemStack stack = player.getMainHandItem();
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
if (drone != null) {
if (left) {
drone.getPersistentData().putBoolean("right",true);
} else {
drone.getPersistentData().putBoolean("right",false);
}
}
}
}
}

View file

@ -1,51 +0,0 @@
package net.mcreator.target.network.message;
import net.mcreator.target.entity.DroneEntity;
import net.mcreator.target.init.TargetModItems;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class DroneMoveUpMessage {
private final boolean up;
public DroneMoveUpMessage(boolean up) {
this.up = up;
}
public static DroneMoveUpMessage decode(FriendlyByteBuf buffer) {
return new DroneMoveUpMessage(buffer.readBoolean());
}
public static void encode(DroneMoveUpMessage message, FriendlyByteBuf buffer) {
buffer.writeBoolean(message.up);
}
public static void handler(DroneMoveUpMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (context.getSender() != null) {
pressAction(context.getSender(), message.up);
}
});
context.setPacketHandled(true);
}
public static void pressAction(Player player, boolean up) {
ItemStack stack = player.getMainHandItem();
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
if (drone != null) {
if (up) {
drone.getPersistentData().putBoolean("up",true);
} else {
drone.getPersistentData().putBoolean("up",false);
}
}
}
}
}

View file

@ -0,0 +1,68 @@
package net.mcreator.target.network.message;
import net.mcreator.target.entity.DroneEntity;
import net.mcreator.target.init.TargetModItems;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class DroneMovementMessage {
private final int direction;
private final boolean clicked;
public DroneMovementMessage(int direction, boolean clicked) {
this.direction = direction;
this.clicked = clicked;
}
public static DroneMovementMessage decode(FriendlyByteBuf buffer) {
return new DroneMovementMessage(buffer.readInt(), buffer.readBoolean());
}
public static void encode(DroneMovementMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.direction);
buffer.writeBoolean(message.clicked);
}
public static void handler(DroneMovementMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
if (context.getSender() != null) {
Player player = context.getSender();
ItemStack stack = player.getMainHandItem();
if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst()
.ifPresent(drone -> {
switch (message.direction) {
case 0:
drone.getPersistentData().putBoolean("left", message.clicked);
break;
case 1:
drone.getPersistentData().putBoolean("right", message.clicked);
break;
case 2:
drone.getPersistentData().putBoolean("forward", message.clicked);
break;
case 3:
drone.getPersistentData().putBoolean("backward", message.clicked);
break;
case 4:
drone.getPersistentData().putBoolean("up", message.clicked);
break;
case 5:
drone.getPersistentData().putBoolean("down", message.clicked);
break;
}
});
}
}
});
context.setPacketHandled(true);
}
}