1+ package xyz .lisbammisakait .skill ;
2+
3+ import net .minecraft .entity .damage .DamageSources ;
4+ import net .minecraft .entity .damage .DamageType ;
5+ import net .minecraft .entity .effect .StatusEffectInstance ;
6+ import net .minecraft .entity .effect .StatusEffects ;
7+ import net .minecraft .entity .mob .DrownedEntity ;
8+ import net .minecraft .entity .player .PlayerEntity ;
9+ import net .minecraft .item .Item ;
10+ import net .minecraft .item .ItemStack ;
11+ import net .minecraft .network .packet .s2c .play .PositionFlag ;
12+ import net .minecraft .registry .RegistryKeys ;
13+ import net .minecraft .registry .entry .RegistryEntry ;
14+ import net .minecraft .server .MinecraftServer ;
15+ import net .minecraft .server .network .ServerPlayerEntity ;
16+ import net .minecraft .server .world .ServerWorld ;
17+ import net .minecraft .util .math .Box ;
18+ import net .minecraft .util .math .Vec3d ;
19+ import xyz .lisbammisakait .RelightTheThreePointStrategy ;
20+ import xyz .lisbammisakait .compoennt .RtTPSComponents ;
21+ import xyz .lisbammisakait .item .ModItems ;
22+ import xyz .lisbammisakait .tools .SafeTp ;
23+ import net .minecraft .entity .damage .DamageSource ;
24+ import net .minecraft .entity .player .PlayerEntity ;
25+ import net .minecraft .entity .LivingEntity ;
26+
27+ import java .util .Collections ;
28+ import java .util .List ;
29+ import java .util .Set ;
30+
31+ public class SunJianASkill extends Item implements ActiveSkillable {
32+
33+ public SunJianASkill (Settings settings ) {
34+ super (settings );
35+ }
36+
37+ @ Override
38+ public void castSkill (MinecraftServer server , ServerPlayerEntity serverplayer , ItemStack stack ) {
39+ // 创建一个新的物品栈
40+ ItemStack newItemStack = new ItemStack (ModItems .UNLAUNCHABLE , 1 );
41+ // 将技能B位置更换为新的物品栈
42+ serverplayer .getInventory ().main .set (8 , newItemStack );
43+
44+ // 获取服务器中的所有玩家列表
45+ List <ServerPlayerEntity > playerList = server .getPlayerManager ().getPlayerList ();
46+ // 移除当前玩家自身
47+ playerList .remove (serverplayer );
48+ //移出正常复活的玩家
49+ //交给家霖
50+
51+ if (!playerList .isEmpty ()) {
52+ // 随机选择一名其他玩家
53+ Collections .shuffle (playerList );
54+ ServerPlayerEntity targetPlayer = playerList .get (0 );
55+
56+ // 获取目标玩家的位置
57+ Vec3d targetPosition = targetPlayer .getPos ();
58+ ServerWorld targetWorld = (ServerWorld ) targetPlayer .getWorld ();
59+
60+ // 传送当前玩家到目标玩家的位置
61+ Set <PositionFlag > flags = Collections .emptySet ();
62+ float yaw = serverplayer .getYaw ();
63+ float pitch = serverplayer .getPitch ();
64+ boolean resetCamera = false ;
65+ SafeTp .safeTp (serverplayer ,targetWorld , targetPosition .getX (), targetPosition .getY () + 5 , targetPosition .getZ (),flags , yaw , pitch , resetCamera );
66+ RelightTheThreePointStrategy .LOGGER .info (serverplayer .getName ().getString () + " 传送到了 " + targetPlayer .getName ().getString () + " 的位置" );
67+
68+ //赋予减速
69+ targetPlayer .addStatusEffect (new StatusEffectInstance (StatusEffects .SLOWNESS , 4 * 20 , 3 ));
70+
71+ //检测二段伤害
72+ if (isMarkInSlot (serverplayer ))//检测物品栏
73+ {
74+ if (serverplayer .getInventory ().getStack (4 ).get (RtTPSComponents .REMAININGRESPAWNCOUNT_TYPE ) <= 2 )
75+ {
76+ targetPlayer .addStatusEffect (new StatusEffectInstance (StatusEffects .INSTANT_DAMAGE , 1 , 3 ));
77+ /*ServerWorld world = (ServerWorld) serverplayer.getWorld();
78+ DamageSource damageSource = new DamageSource(, serverplayer);
79+ targetPlayer.damage(world, damageSource,40);*/
80+ ServerWorld world = (ServerWorld ) serverplayer .getWorld ();
81+ DamageSource damageSource = new DamageSource (serverplayer .getRegistryManager ()
82+ .getOrThrow (RegistryKeys .DAMAGE_TYPE )
83+ .getEntry (new DamageType ("player" ,0.0F )));
84+ targetPlayer .damage (world , damageSource ,40F );
85+ }
86+ }
87+ }
88+ }
89+ //检查玩家快捷栏第5格是否为mark
90+ public static boolean isMarkInSlot (PlayerEntity player ) {
91+ // 快捷栏第5格对应的索引是4(索引从0开始)
92+ int slotIndex = 4 ;
93+ // 获取玩家的快捷栏物品栈
94+ ItemStack itemStack = player .getInventory ().getStack (slotIndex );
95+ // 检查物品栈是否为空以及物品是否为钻石剑
96+ return !itemStack .isEmpty () && itemStack .getItem () == ModItems .MARK ;
97+ }
98+ }
0 commit comments