添加无人机的交互功能
This commit is contained in:
parent
7dde921f67
commit
b9609a9f24
2 changed files with 41 additions and 2 deletions
|
@ -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<Attribute, AttributeModifier> getDefaultAttributeModifiers(EquipmentSlot equipmentSlot) {
|
||||
if (equipmentSlot == EquipmentSlot.MAINHAND) {
|
||||
ImmutableMultimap.Builder<Attribute, AttributeModifier> 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<Component> list, TooltipFlag flag) {
|
||||
TooltipTool.addMonitorTips(list, stack.getOrCreateTag().getString(LINKED_DRONE));
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue