diff --git a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java index 35d72a5ee..37f1164f1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java +++ b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java @@ -163,6 +163,7 @@ public class ModUtils { addNetworkMessage(RadarMenuCloseMessage.class, RadarMenuCloseMessage::encode, RadarMenuCloseMessage::decode, RadarMenuCloseMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(RadarSetPosMessage.class, RadarSetPosMessage::encode, RadarSetPosMessage::decode, RadarSetPosMessage::handler); addNetworkMessage(PlayerStopRidingMessage.class, PlayerStopRidingMessage::encode, PlayerStopRidingMessage::decode, PlayerStopRidingMessage::handler); + addNetworkMessage(AimVillagerMessage.class, AimVillagerMessage::encode, AimVillagerMessage::decode, AimVillagerMessage::handler); event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)), Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get()))); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java index f2a09e975..24dbd755b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java @@ -6,6 +6,7 @@ import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.network.ModVariables; +import com.atsuishio.superbwarfare.network.message.AimVillagerMessage; import com.atsuishio.superbwarfare.network.message.SimulationDistanceMessage; import com.atsuishio.superbwarfare.tools.*; import net.minecraft.server.level.ServerLevel; @@ -17,7 +18,7 @@ import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.npc.AbstractVillager; +import net.minecraft.world.entity.npc.Villager; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.event.AnvilUpdateEvent; @@ -100,12 +101,11 @@ public class PlayerEventHandler { public static void aimAtVillager(Player player) { if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom) { Entity entity = TraceTool.findLookingEntity(player, 10); - if (entity instanceof AbstractVillager villager) { - List gunner = SeekTool.seekLivingEntities(villager, villager.level(), 16, 120); - for (var e : gunner) { + if (entity instanceof Villager villager) { + List entities = SeekTool.seekLivingEntities(villager, villager.level(), 16, 120); + for (var e : entities) { if (e == player) { - // TODO 让村民恐慌并生气涨价 -// villager.getBrain().addActivity(Activity.PANIC, ); + ModUtils.PACKET_HANDLER.sendToServer(new AimVillagerMessage(villager.getId())); } } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/Cell.java b/src/main/java/com/atsuishio/superbwarfare/item/Cell.java index 64df6c82c..25f756345 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/Cell.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/Cell.java @@ -61,14 +61,11 @@ public class Cell extends Item { return 0xFFFF00; } - - @Override public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { super.inventoryTick(stack, world, entity, slot, selected); } - public static ItemStack getGunInstance() { ItemStack stack = new ItemStack(ModItems.TASER.get()); stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( @@ -81,5 +78,4 @@ public class Cell extends Item { public @NotNull Optional getTooltipImage(@NotNull ItemStack pStack) { return Optional.of(new CellImageComponent(pStack)); } - } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java index f66cfa382..732f40cba 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -39,6 +39,7 @@ import java.util.UUID; @Mod.EventBusSubscriber public abstract class GunItem extends Item { + public GunItem(Properties properties) { super(properties); } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/AimVillagerMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/AimVillagerMessage.java new file mode 100644 index 000000000..ac59d9f04 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/AimVillagerMessage.java @@ -0,0 +1,41 @@ +package com.atsuishio.superbwarfare.network.message; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.ai.gossip.GossipType; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.entity.schedule.Activity; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class AimVillagerMessage { + + private final int villagerId; + + public AimVillagerMessage(int villagerId) { + this.villagerId = villagerId; + } + + public static void encode(AimVillagerMessage message, FriendlyByteBuf buffer) { + buffer.writeInt(message.villagerId); + } + + public static AimVillagerMessage decode(FriendlyByteBuf buffer) { + return new AimVillagerMessage(buffer.readInt()); + } + + public static void handler(AimVillagerMessage message, Supplier context) { + context.get().enqueueWork(() -> { + var sender = context.get().getSender(); + if (sender == null) return; + + Entity entity = sender.level().getEntity(message.villagerId); + if (entity instanceof Villager villager) { + villager.getBrain().setActiveActivityIfPossible(Activity.PANIC); + villager.getGossips().add(sender.getUUID(), GossipType.MINOR_NEGATIVE, 10); + } + }); + context.get().setPacketHandled(true); + } +}