添加无人机的交互功能
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.entity.DroneEntity;
|
||||||
import net.mcreator.target.tools.ItemNBTTool;
|
import net.mcreator.target.tools.ItemNBTTool;
|
||||||
import net.mcreator.target.tools.TooltipTool;
|
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.network.chat.Component;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResultHolder;
|
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.ItemStack;
|
||||||
import net.minecraft.world.item.TooltipFlag;
|
import net.minecraft.world.item.TooltipFlag;
|
||||||
import net.minecraft.world.level.Level;
|
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;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -59,6 +64,19 @@ public class Monitor extends Item {
|
||||||
return super.use(world, player, hand);
|
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
|
@Override
|
||||||
public void appendHoverText(ItemStack stack, Level world, List<Component> list, TooltipFlag flag) {
|
public void appendHoverText(ItemStack stack, Level world, List<Component> list, TooltipFlag flag) {
|
||||||
TooltipTool.addMonitorTips(list, stack.getOrCreateTag().getString(LINKED_DRONE));
|
TooltipTool.addMonitorTips(list, stack.getOrCreateTag().getString(LINKED_DRONE));
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package net.mcreator.target.network.message;
|
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.init.TargetModTags;
|
||||||
import net.mcreator.target.tools.TraceTool;
|
import net.mcreator.target.tools.TraceTool;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
@ -8,6 +10,7 @@ import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.level.ClipContext;
|
import net.minecraft.world.level.ClipContext;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
import net.minecraft.world.phys.BlockHitResult;
|
||||||
|
@ -47,6 +50,7 @@ public class InteractMessage {
|
||||||
if (!level.isLoaded(player.blockPosition()))
|
if (!level.isLoaded(player.blockPosition()))
|
||||||
return;
|
return;
|
||||||
if (type == 0) {
|
if (type == 0) {
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (player.getMainHandItem().is(TargetModTags.Items.GUN)) {
|
if (player.getMainHandItem().is(TargetModTags.Items.GUN)) {
|
||||||
double block_range = player.getBlockReach();
|
double block_range = player.getBlockReach();
|
||||||
double entity_range = player.getBlockReach();
|
double entity_range = player.getBlockReach();
|
||||||
|
@ -59,6 +63,23 @@ public class InteractMessage {
|
||||||
if (lookingEntity == null)
|
if (lookingEntity == null)
|
||||||
return;
|
return;
|
||||||
player.interactOn(lookingEntity, InteractionHand.MAIN_HAND);
|
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