diff --git a/src/main/java/net/mcreator/target/item/Monitor.java b/src/main/java/net/mcreator/target/item/Monitor.java index 1f6d31af9..1894a5d82 100644 --- a/src/main/java/net/mcreator/target/item/Monitor.java +++ b/src/main/java/net/mcreator/target/item/Monitor.java @@ -3,8 +3,6 @@ package net.mcreator.target.item; import net.mcreator.target.entity.DroneEntity; 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.network.chat.Component; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; @@ -13,6 +11,13 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.EquipmentSlot; + +import com.google.common.collect.Multimap; +import com.google.common.collect.ImmutableMultimap; import java.util.List; @@ -59,6 +64,19 @@ public class Monitor extends Item { return super.use(world, player, hand); } + @Override + public Multimap getDefaultAttributeModifiers(EquipmentSlot equipmentSlot) { + if (equipmentSlot == EquipmentSlot.MAINHAND) { + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.putAll(super.getDefaultAttributeModifiers(equipmentSlot)); + builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Item modifier", 4d, AttributeModifier.Operation.ADDITION)); + builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Item modifier", -2.4, AttributeModifier.Operation.ADDITION)); + return builder.build(); + } + return super.getDefaultAttributeModifiers(equipmentSlot); + } + + @Override public void appendHoverText(ItemStack stack, Level world, List list, TooltipFlag flag) { TooltipTool.addMonitorTips(list, stack.getOrCreateTag().getString(LINKED_DRONE)); diff --git a/src/main/java/net/mcreator/target/network/message/InteractMessage.java b/src/main/java/net/mcreator/target/network/message/InteractMessage.java index e816d443e..3a7e6b6c7 100644 --- a/src/main/java/net/mcreator/target/network/message/InteractMessage.java +++ b/src/main/java/net/mcreator/target/network/message/InteractMessage.java @@ -1,5 +1,7 @@ package net.mcreator.target.network.message; +import net.mcreator.target.entity.DroneEntity; +import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModTags; import net.mcreator.target.tools.TraceTool; import net.minecraft.core.BlockPos; @@ -8,6 +10,7 @@ import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Level; import net.minecraft.world.phys.BlockHitResult; @@ -47,6 +50,7 @@ public class InteractMessage { if (!level.isLoaded(player.blockPosition())) return; if (type == 0) { + ItemStack stack = player.getMainHandItem(); if (player.getMainHandItem().is(TargetModTags.Items.GUN)) { double block_range = player.getBlockReach(); double entity_range = player.getBlockReach(); @@ -59,6 +63,23 @@ public class InteractMessage { if (lookingEntity == null) return; player.interactOn(lookingEntity, InteractionHand.MAIN_HAND); + + } else if (stack.is(TargetModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked") && !player.getCooldowns().isOnCooldown(stack.getItem())) { + + 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) { + Vec3 looking = Vec3.atLowerCornerOf(player.level().clip(new ClipContext(drone.getEyePosition(), drone.getEyePosition().add(drone.getLookAngle().scale(2)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos()); + BlockPos blockPos = BlockPos.containing(looking.x(), looking.y(), looking.z()); + player.level().getBlockState(blockPos).use(player.level(), player, InteractionHand.MAIN_HAND, BlockHitResult.miss(new Vec3(blockPos.getX(), blockPos.getY(), blockPos.getZ()), Direction.UP, blockPos)); + + Entity lookingEntity = TraceTool.findLookingEntity(drone, 2); + if (lookingEntity == null) + return; + player.attack(lookingEntity); + player.getCooldowns().addCooldown(stack.getItem(), 13); + } } } }