Skip to content

Commit cacb90d

Browse files
committed
1.完成缴械
2.新增工具类
1 parent b198a65 commit cacb90d

File tree

9 files changed

+68
-53
lines changed

9 files changed

+68
-53
lines changed

src/main/java/xyz/lisbammisakait/RelightTheThreePointStrategy.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import net.minecraft.entity.attribute.EntityAttributeInstance;
1313
import net.minecraft.entity.attribute.EntityAttributes;
1414
import net.minecraft.entity.damage.DamageSource;
15+
import net.minecraft.entity.player.PlayerEntity;
1516
import net.minecraft.entity.player.PlayerInventory;
1617
import net.minecraft.inventory.Inventory;
1718
import net.minecraft.item.ItemStack;
@@ -20,14 +21,18 @@
2021
import net.minecraft.scoreboard.ScoreboardCriterion;
2122
import net.minecraft.scoreboard.ScoreboardObjective;
2223
import net.minecraft.server.MinecraftServer;
23-
import net.minecraft.server.command.SpreadPlayersCommand;
2424
import net.minecraft.server.network.ServerPlayerEntity;
2525
import net.minecraft.server.world.ServerWorld;
2626
import net.minecraft.text.Text;
27+
import net.minecraft.util.ActionResult;
28+
import net.minecraft.util.Hand;
2729
import net.minecraft.util.Identifier;
30+
import net.minecraft.util.hit.EntityHitResult;
2831
import net.minecraft.util.math.Vec2f;
2932
import net.minecraft.util.math.random.Random;
3033
import net.minecraft.world.GameMode;
34+
import net.minecraft.world.World;
35+
import org.jetbrains.annotations.Nullable;
3136
import org.slf4j.Logger;
3237
import org.slf4j.LoggerFactory;
3338
import xyz.lisbammisakait.compoennt.RtTPSComponents;
@@ -39,7 +44,7 @@
3944
import java.util.Collection;
4045
import java.util.Collections;
4146
import java.util.concurrent.atomic.AtomicInteger;
42-
import static xyz.lisbammisakait.skill.MarkItem.markSlot;
47+
import static xyz.lisbammisakait.skill.MarkItem.MARKSLOT;
4348
import static xyz.lisbammisakait.tools.Pile.*;
4449

4550
public class RelightTheThreePointStrategy implements ModInitializer {
@@ -64,7 +69,7 @@ public void onInitialize() {
6469
//以下为新api
6570
ServerLivingEntityEvents.ALLOW_DEATH.register(this::handlePlayerDeath);
6671

67-
// AttackEntityCallback.EVENT.register(this::)
72+
AttackEntityCallback.EVENT.register(this::deadPlayerDisarm);
6873
// 注册获取剩余复活次数的命令
6974
// CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> dispatcher.register(literal("getrsc")
7075
// .then(argument("target", EntityArgumentType.player())
@@ -108,10 +113,19 @@ public void onInitialize() {
108113
// });
109114
// });
110115
}
116+
117+
private ActionResult deadPlayerDisarm(PlayerEntity playerEntity, World world, Hand hand, Entity entity, @Nullable EntityHitResult entityHitResult) {
118+
ItemStack mark = playerEntity.getInventory().getStack(MARKSLOT);
119+
if(mark.getOrDefault(RtTPSComponents.ISWITHINRESPAWNPHASE_TYPE,false)){
120+
return ActionResult.FAIL;
121+
}
122+
return ActionResult.PASS;
123+
}
124+
111125
private boolean handlePlayerDeath(LivingEntity livingEntity, DamageSource damageSource, float damageAmount){
112126
if(livingEntity instanceof ServerPlayerEntity){
113127
ServerPlayerEntity player = (ServerPlayerEntity) livingEntity;
114-
ItemStack mark = player.getInventory().getStack(markSlot);
128+
ItemStack mark = player.getInventory().getStack(MARKSLOT);
115129
int rsc = mark.get(RtTPSComponents.REMAININGRESPAWNCOUNT_TYPE);
116130
mark.set(RtTPSComponents.REMAININGRESPAWNCOUNT_TYPE, rsc - 1);
117131
if(rsc==-1) {
@@ -131,7 +145,7 @@ private boolean handleGameOver(LivingEntity livingEntity){
131145
AtomicInteger deadPlayerCount = new AtomicInteger();
132146
//检测玩家是否全部死亡
133147
server.getPlayerManager().getPlayerList().parallelStream().forEach(player -> {
134-
if(player.getInventory().getStack(markSlot).get(RtTPSComponents.REMAININGRESPAWNCOUNT_TYPE)==0){
148+
if(player.getInventory().getStack(MARKSLOT).get(RtTPSComponents.REMAININGRESPAWNCOUNT_TYPE)==0){
135149
deadPlayerCount.getAndIncrement();
136150
}
137151
});
@@ -159,7 +173,6 @@ private boolean handleGameOver(LivingEntity livingEntity){
159173
}
160174
return false;
161175
}
162-
//TODO 死亡缴械
163176
private void respawnPlayer(ServerPlayerEntity player) {
164177
player.setHealth(player.getMaxHealth());
165178
player.clearStatusEffects();
@@ -170,7 +183,7 @@ private void respawnPlayer(ServerPlayerEntity player) {
170183
Notifiee.sendMessage(Text.of(player.getName() + "死亡"), true);
171184
});
172185
//设置复活状态
173-
player.getInventory().getStack(markSlot).set(RtTPSComponents.ISWITHINRESPAWNPHASE_TYPE, true);
186+
player.getInventory().getStack(MARKSLOT).set(RtTPSComponents.ISWITHINRESPAWNPHASE_TYPE, true);
174187
//复活倒计时
175188
Runnable runnable = () -> {
176189
try {
@@ -180,7 +193,6 @@ private void respawnPlayer(ServerPlayerEntity player) {
180193
}
181194
player.sendMessage(Text.of("复活倒计时:0s"), true);
182195
Inventory inventory= player.getInventory();
183-
inventory.getStack(markSlot).set(RtTPSComponents.ISWITHINRESPAWNPHASE_TYPE, false);
184196
int faction = inventory.getStack(0).getOrDefault(RtTPSComponents.FACTION_TYPE, 0);
185197
int maxY = 257;
186198
switch (faction){
@@ -201,6 +213,7 @@ private void respawnPlayer(ServerPlayerEntity player) {
201213
getMinDistance(Collections.singleton(player), world,han, maxY, false);
202214
break;
203215
}
216+
inventory.getStack(MARKSLOT).set(RtTPSComponents.ISWITHINRESPAWNPHASE_TYPE, false);
204217
// player.teleport(player.getServer().getWorld(player.getWorld().getRegistryKey()), 0, 98, 0, Collections.emptySet(), 0, 0, false);
205218
} catch (InterruptedException e) {
206219
throw new RuntimeException(e);

src/main/java/xyz/lisbammisakait/item/RtTPSSwordItem.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,17 @@
66
import net.minecraft.entity.attribute.EntityAttributeInstance;
77
import net.minecraft.entity.attribute.EntityAttributeModifier;
88
import net.minecraft.entity.attribute.EntityAttributes;
9-
import net.minecraft.entity.effect.StatusEffectInstance;
10-
import net.minecraft.entity.effect.StatusEffects;
119
import net.minecraft.entity.player.PlayerEntity;
1210
import net.minecraft.item.ItemStack;
1311
import net.minecraft.item.SwordItem;
1412
import net.minecraft.item.ToolMaterial;
15-
import net.minecraft.util.ActionResult;
16-
import net.minecraft.util.Hand;
17-
import net.minecraft.util.Identifier;
1813
import net.minecraft.world.World;
1914
import xyz.lisbammisakait.RelightTheThreePointStrategy;
2015
import xyz.lisbammisakait.compoennt.RtTPSComponents;
2116

2217
import java.util.HashMap;
2318
import java.util.Map;
2419

25-
import static xyz.lisbammisakait.skill.MarkItem.markSlot;
26-
2720
public abstract class RtTPSSwordItem extends SwordItem {
2821
public final Map<Entity, Long> lastHitTime = new HashMap<>();
2922
public RtTPSSwordItem(ToolMaterial material, float attackDamage, float attackSpeed, Settings settings) {

src/main/java/xyz/lisbammisakait/skill/ActiveSkillable.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
package xyz.lisbammisakait.skill;
22

3-
import net.minecraft.client.MinecraftClient;
4-
import net.minecraft.entity.player.PlayerEntity;
53
import net.minecraft.item.ItemStack;
64
import net.minecraft.server.MinecraftServer;
75
import net.minecraft.server.network.ServerPlayerEntity;
86
import xyz.lisbammisakait.compoennt.RtTPSComponents;
97

10-
import static xyz.lisbammisakait.skill.MarkItem.markSlot;
8+
import static xyz.lisbammisakait.skill.MarkItem.MARKSLOT;
119

1210
public interface ActiveSkillable {
1311
default void castSkill(MinecraftServer server, ServerPlayerEntity player, ItemStack stack){
14-
if(!player.getInventory().getStack(markSlot).get(RtTPSComponents.ISWITHINRESPAWNPHASE_TYPE)){
12+
if(!player.getInventory().getStack(MARKSLOT).get(RtTPSComponents.ISWITHINRESPAWNPHASE_TYPE)){
1513
processPracticalSkill(server, player, stack);
1614
}
1715
}

src/main/java/xyz/lisbammisakait/skill/LiuBeiASkill.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public void processPracticalSkill(MinecraftServer server, ServerPlayerEntity pla
4949
if (currentHealth < maxHealth) {
5050
player.setHealth(Math.min(currentHealth + RECOVERHEALTH, maxHealth));
5151
}
52-
RelightTheThreePointStrategy.LOGGER.info("给自己添加瞬间指令效果");
52+
//给自己添加瞬间指令效果
5353
// ClientPlayNetworking.send(new LiuBeiASkillPayload(RANGE));
5454
EntityFinder entityFinder = new EntityFinder();
5555
List<LivingEntity> nearbyEntities = entityFinder.getNearbyEntities(player,server.getWorld(player.getWorld().getRegistryKey()),RANGE,LivingEntity.class);

src/main/java/xyz/lisbammisakait/skill/LiuBeiBSkill.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ public void processPracticalSkill(MinecraftServer server, ServerPlayerEntity pla
2929
// 如果物品正在冷却中,直接返回
3030
return;
3131
}
32-
RelightTheThreePointStrategy.LOGGER.info("给自己添加凋零与力量效果");
3332
player.addStatusEffect(new StatusEffectInstance(StatusEffects.WITHER, WITHER_EFFECT_DURATION * 20, WITHER_EFFECT_AMPLIFIER));
3433
player.addStatusEffect(new StatusEffectInstance(StatusEffects.STRENGTH, STRENGTH_EFFECT_DURATION * 20, STRENGTH_EFFECT_AMPLIFIER));
3534
player.getItemCooldownManager().set(stack, COOLDOWN * 20);

src/main/java/xyz/lisbammisakait/skill/MarkItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import java.util.List;
99

1010
public class MarkItem extends Item implements PassiveSkillable {
11-
public static final int markSlot = 4;
11+
public static final int MARKSLOT = 4;
1212
public MarkItem(Settings settings) {
1313
super(settings);
1414
}

src/main/java/xyz/lisbammisakait/skill/SunJianASkill.java

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,29 @@
11
package xyz.lisbammisakait.skill;
22

3-
import net.minecraft.entity.damage.DamageSources;
43
import net.minecraft.entity.damage.DamageType;
54
import net.minecraft.entity.effect.StatusEffectInstance;
65
import net.minecraft.entity.effect.StatusEffects;
7-
import net.minecraft.entity.mob.DrownedEntity;
86
import net.minecraft.entity.player.PlayerEntity;
97
import net.minecraft.item.Item;
108
import net.minecraft.item.ItemStack;
119
import net.minecraft.network.packet.s2c.play.PositionFlag;
1210
import net.minecraft.registry.RegistryKeys;
13-
import net.minecraft.registry.entry.RegistryEntry;
1411
import net.minecraft.server.MinecraftServer;
1512
import net.minecraft.server.network.ServerPlayerEntity;
1613
import net.minecraft.server.world.ServerWorld;
17-
import net.minecraft.text.Text;
18-
import net.minecraft.util.math.Box;
1914
import net.minecraft.util.math.Vec3d;
2015
import xyz.lisbammisakait.RelightTheThreePointStrategy;
2116
import xyz.lisbammisakait.compoennt.RtTPSComponents;
22-
import xyz.lisbammisakait.item.HutouzhanjinqiangItem;
2317
import xyz.lisbammisakait.item.ModItems;
18+
import xyz.lisbammisakait.tools.PlayerListGet;
2419
import xyz.lisbammisakait.tools.SafeTp;
2520
import net.minecraft.entity.damage.DamageSource;
26-
import net.minecraft.entity.player.PlayerEntity;
27-
import net.minecraft.entity.LivingEntity;
2821

2922
import java.util.Collections;
3023
import java.util.List;
3124
import java.util.Set;
3225

33-
import static xyz.lisbammisakait.skill.MarkItem.markSlot;
26+
import static xyz.lisbammisakait.skill.MarkItem.MARKSLOT;
3427

3528
public class SunJianASkill extends Item implements ActiveSkillable {
3629
public final int SLOWNESSTIME = 4;
@@ -40,24 +33,19 @@ public SunJianASkill(Settings settings) {
4033

4134
@Override
4235
public void processPracticalSkill(MinecraftServer server, ServerPlayerEntity serverplayer, ItemStack stack) {
43-
// // 创建一个新的物品栈
44-
// ItemStack newItemStack = new ItemStack(ModItems.UNLAUNCHABLE, 1);
45-
// // 将技能B位置更换为新的物品栈
46-
// serverplayer.getInventory().main.set(8, newItemStack);
47-
boolean isExhausted = stack.getOrDefault(RtTPSComponents.LIMITEDSKILLEXHAUSTED_TYPE,true);
48-
if (isExhausted) {
49-
serverplayer.sendMessage(Text.of("你已经使用过该技能"), true);
50-
return;
51-
}
52-
stack.set(RtTPSComponents.LIMITEDSKILLEXHAUSTED_TYPE, true);
53-
54-
// 获取服务器中的所有玩家列表
55-
List<ServerPlayerEntity> playerList = server.getPlayerManager().getPlayerList();
56-
// 移除当前玩家自身
57-
playerList.remove(serverplayer);
58-
//移出正常复活的玩家
59-
//交给家霖
36+
// 创建一个新的物品栈
37+
ItemStack newItemStack = new ItemStack(ModItems.UNLAUNCHABLE, 1);
38+
// 将技能B位置更换为新的物品栈
39+
serverplayer.getInventory().main.set(8, newItemStack);
40+
// boolean isExhausted = stack.getOrDefault(RtTPSComponents.LIMITEDSKILLEXHAUSTED_TYPE,true);
41+
// if (isExhausted) {
42+
// serverplayer.sendMessage(Text.of("你已经使用过该技能"), true);
43+
// return;
44+
// }
45+
// stack.set(RtTPSComponents.LIMITEDSKILLEXHAUSTED_TYPE, true);
6046

47+
// 获取服务器中的除了自己和死亡的人之外的所有玩家
48+
List<ServerPlayerEntity> playerList = PlayerListGet.getNonSelfAndNonRespawningPlayers(server, serverplayer);
6149
if (!playerList.isEmpty()) {
6250
// 随机选择一名其他玩家
6351
Collections.shuffle(playerList);
@@ -81,7 +69,7 @@ public void processPracticalSkill(MinecraftServer server, ServerPlayerEntity ser
8169
//检测二段伤害
8270
if(isMarkInSlot(serverplayer))//检测物品栏
8371
{
84-
if (serverplayer.getInventory().getStack(markSlot).get(RtTPSComponents.REMAININGRESPAWNCOUNT_TYPE) <= 2)
72+
if (serverplayer.getInventory().getStack(MARKSLOT).get(RtTPSComponents.REMAININGRESPAWNCOUNT_TYPE) <= 2)
8573
{
8674
targetPlayer.addStatusEffect(new StatusEffectInstance(StatusEffects.INSTANT_DAMAGE, 1, 3));
8775
/*ServerWorld world = (ServerWorld) serverplayer.getWorld();
@@ -100,7 +88,7 @@ public void processPracticalSkill(MinecraftServer server, ServerPlayerEntity ser
10088
//检查玩家快捷栏第5格是否为mark
10189
public static boolean isMarkInSlot(PlayerEntity player) {
10290
// 获取玩家的快捷栏物品栈
103-
ItemStack itemStack = player.getInventory().getStack(markSlot);
91+
ItemStack itemStack = player.getInventory().getStack(MARKSLOT);
10492
// 检查物品栈是否为空以及物品是否为mark
10593
return !itemStack.isEmpty() && itemStack.getItem() == ModItems.MARK;
10694
}

src/main/java/xyz/lisbammisakait/skill/ZhangJiaoASKill.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import net.minecraft.util.math.BlockPos;
1313
import xyz.lisbammisakait.RelightTheThreePointStrategy;
1414
import xyz.lisbammisakait.compoennt.RtTPSComponents;
15+
import xyz.lisbammisakait.tools.PlayerListGet;
1516

1617
import java.lang.invoke.MethodHandles;
1718
import java.lang.invoke.VarHandle;
@@ -43,10 +44,11 @@ public void processPracticalSkill(MinecraftServer server, ServerPlayerEntity pla
4344
player.getItemCooldownManager().set(stack, COOLDOWN * 20);
4445
}
4546
public void spawnLightningBolt(MinecraftServer server, ItemStack stack,ServerPlayerEntity serverplayer) {
46-
List<ServerPlayerEntity> playList = server.getPlayerManager().getPlayerList();
47-
RelightTheThreePointStrategy.LOGGER.info(playList.toString());
47+
// List<ServerPlayerEntity> playList = server.getPlayerManager().getPlayerList();
48+
List<ServerPlayerEntity> playerList = PlayerListGet.getNonSelfAndNonRespawningPlayers(server, serverplayer);
49+
RelightTheThreePointStrategy.LOGGER.info(playerList.toString());
4850
ServerWorld serverWorld = server.getWorld(serverplayer.getEntityWorld().getRegistryKey());
49-
for(PlayerEntity player:playList){
51+
for(PlayerEntity player:playerList){
5052

5153
if(!player.equals(serverplayer)){
5254
BlockPos underneathOfPlayer = player.getBlockPos();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package xyz.lisbammisakait.tools;
2+
3+
import net.minecraft.entity.player.PlayerEntity;
4+
import net.minecraft.server.MinecraftServer;
5+
import net.minecraft.server.network.ServerPlayerEntity;
6+
import xyz.lisbammisakait.compoennt.RtTPSComponents;
7+
8+
import java.util.List;
9+
import java.util.stream.Collectors;
10+
11+
import static xyz.lisbammisakait.skill.MarkItem.MARKSLOT;
12+
13+
public class PlayerListGet {
14+
public static List<ServerPlayerEntity> getNonSelfAndNonRespawningPlayers(MinecraftServer server,PlayerEntity self){
15+
List<ServerPlayerEntity> playerList = server.getPlayerManager().getPlayerList().stream()
16+
.filter(player -> !player.equals(self))
17+
.filter(player -> !player.getInventory().getStack(MARKSLOT).getOrDefault(RtTPSComponents.ISWITHINRESPAWNPHASE_TYPE,true))
18+
.collect(Collectors.toList());
19+
return playerList;
20+
}
21+
22+
}

0 commit comments

Comments
 (0)