Skip to content

Commit 6c83012

Browse files
authored
Merge pull request #6 from misakajialin/dev
完成技能冷却逻辑
2 parents c9463ed + f426c47 commit 6c83012

File tree

11 files changed

+137
-25
lines changed

11 files changed

+137
-25
lines changed

src/main/java/xyz/lisbammisakait/RelightTheThreePointStrategyClient.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@
33
import net.fabricmc.api.ClientModInitializer;
44
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
55
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
6+
import net.minecraft.client.MinecraftClient;
67
import net.minecraft.client.option.KeyBinding;
78
import net.minecraft.client.util.InputUtil;
9+
import net.minecraft.entity.player.PlayerInventory;
10+
import net.minecraft.item.ItemStack;
811
import org.lwjgl.glfw.GLFW;
12+
import xyz.lisbammisakait.skill.ActiveSkillable;
913

1014
public class RelightTheThreePointStrategyClient implements ClientModInitializer {
1115
private static KeyBinding keyBindingV;
@@ -27,11 +31,22 @@ public void onInitializeClient() {
2731
));
2832
ClientTickEvents.END_CLIENT_TICK.register(client -> {
2933
while (keyBindingV.wasPressed()) {
30-
RelightTheThreePointStrategy.LOGGER.info("VVVVVVV!");
34+
useSkill(client,7);
3135
}
3236
while (keyBindingB.wasPressed()) {
33-
RelightTheThreePointStrategy.LOGGER.info("BBBBBBB!");
37+
useSkill(client,8);
3438
}
3539
});
3640
}
41+
private void useSkill(MinecraftClient client,int slot) {
42+
PlayerInventory inventory = client.player.getInventory();
43+
ItemStack skillStack = inventory.getStack(slot);
44+
//
45+
if (skillStack.isEmpty()||!(skillStack.getItem() instanceof ActiveSkillable)) {
46+
RelightTheThreePointStrategy.LOGGER.info("并非技能物品");
47+
return;
48+
}
49+
ActiveSkillable skill = (ActiveSkillable) skillStack.getItem();
50+
skill.castSkill(client,skillStack);
51+
}
3752
}

src/main/java/xyz/lisbammisakait/compoennt/RtTPSComponents.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ protected static void initialize() {
1313
// Technically this method can stay empty, but some developers like to notify
1414
// the console, that certain parts of the mod have been successfully initialized
1515
}
16+
//注册冷却时间组件
1617
public static final ComponentType<Integer> COOLDOWN_TYPE = Registry.register(
1718
Registries.DATA_COMPONENT_TYPE,
1819
Identifier.of(RelightTheThreePointStrategy.MOD_ID, "cooldown"),

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

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,22 +86,27 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack
8686

8787
@Override
8888
public ActionResult use(World world, PlayerEntity user, Hand hand) {
89-
// ItemStack stack = user.getStackInHand(hand);
90-
// // Don't do anything on the client
89+
ItemStack stack = user.getStackInHand(hand);
90+
// Don't do anything on the client
9191
if (world.isClient()) {
9292
return ActionResult.SUCCESS;
9393
}
94-
//
95-
// // Read the current count and increase it by one
96-
// int count = stack.getOrDefault(RtTPSComponents.COOLDOWN_TYPE, 0);
97-
// stack.set(RtTPSComponents.COOLDOWN_TYPE, ++count);
98-
// return ActionResult.SUCCESS;
94+
95+
// 获取物品冷却管理器
96+
if (user.getItemCooldownManager().isCoolingDown(stack)) {
97+
// 如果物品正在冷却中,返回失败
98+
return ActionResult.FAIL;
99+
}
99100

100101
if (user != null) {
101-
// 创建一个新的物品栈,这里以钻石为例
102+
// 创建一个新的物品栈
102103
ItemStack newItemStack = new ItemStack(ModItems.SHENWEIHUTOUZHANJINQIANG, 1);
103104
// 将主手物品更换为新的物品栈
104105
user.getInventory().main.set(user.getInventory().selectedSlot, newItemStack);
106+
107+
// 设置物品进入冷却状态
108+
user.getItemCooldownManager().set(stack, COOLDOWN * 20); // 注意:冷却时间单位是游戏刻,1 秒 = 20 游戏刻
109+
105110
return ActionResult.SUCCESS;
106111
}
107112
return ActionResult.FAIL;

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
import net.minecraft.registry.RegistryKeys;
1313
import net.minecraft.text.Text;
1414
import net.minecraft.util.Identifier;
15-
import xyz.lisbammisakait.Skill.TieJiTaChuanSkill;
15+
import xyz.lisbammisakait.skill.LiuBeiASkill;
16+
import xyz.lisbammisakait.skill.TieJiTaChuanSkill;
1617
import xyz.lisbammisakait.RelightTheThreePointStrategy;
17-
import xyz.lisbammisakait.Skill.YinFengLaiXiangSkill;
18+
import xyz.lisbammisakait.skill.YinFengLaiXiangSkill;
1819
import xyz.lisbammisakait.compoennt.RtTPSComponents;
1920

2021
public class ModItems {
@@ -54,7 +55,10 @@ public class ModItems {
5455
//注册铁骑踏川
5556
public static final RegistryKey<Item> TIEJITACHUAN_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(RelightTheThreePointStrategy.MOD_ID, "tiejitachuan"));
5657
public static final Item TIEJITACHUAN = register(new TieJiTaChuanSkill( new Item.Settings().registryKey(TIEJITACHUAN_KEY)), TIEJITACHUAN_KEY);
57-
58+
//注册刘备A技能
59+
public static final RegistryKey<Item> LIUBEIASKILL_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(RelightTheThreePointStrategy.MOD_ID, "longnudiwei"));
60+
//注意下一行代码的component是为了给技能添加冷却时间
61+
public static final Item LIUBEIASKILL = register(new LiuBeiASkill( new Item.Settings().registryKey(LIUBEIASKILL_KEY).component(RtTPSComponents.COOLDOWN_TYPE,LiuBeiASkill.COOLDOWN)), LIUBEIASKILL_KEY);
5862
public static Item register(Item item, RegistryKey<Item> registryKey) {
5963
// Register the item.
6064
Item registeredItem = Registry.register(Registries.ITEM, registryKey.getValue(), item);
@@ -75,6 +79,7 @@ public static void registerToSkillGroups() {
7579
ItemGroupEvents.modifyEntriesEvent(SKILL_GROUP_KEY).register(itemGroup -> {
7680
itemGroup.add(ModItems.YINFENGLAIXIANG);
7781
itemGroup.add(ModItems.TIEJITACHUAN);
82+
itemGroup.add(ModItems.LIUBEIASKILL);
7883
});
7984
}
8085
//注册武器

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack
2727
return true;
2828
}
2929
PlayerEntity user = (PlayerEntity) attacker;
30-
// 创建一个新的物品栈,这里以钻石为例
30+
// 创建一个新的物品栈
3131
ItemStack newItemStack = new ItemStack(ModItems.HUTOUZHANJINQIANG, 1);
3232
// 将主手物品更换为新的物品栈
3333
user.getInventory().main.set(user.getInventory().selectedSlot, newItemStack);
@@ -36,6 +36,6 @@ public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attack
3636
}
3737
@Override
3838
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
39-
tooltip.add(Text.translatable("itemskill.relight-the-three-point-strategy.shenweihutouzhanjinqiang").formatted(Formatting.GOLD));
39+
//tooltip.add(Text.translatable("itemskill.relight-the-three-point-strategy.shenweihutouzhanjinqiang").formatted(Formatting.GOLD));
4040
}
4141
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package xyz.lisbammisakait.skill;
2+
3+
import net.minecraft.client.MinecraftClient;
4+
import net.minecraft.item.ItemStack;
5+
6+
public interface ActiveSkillable {
7+
public void castSkill(MinecraftClient client, ItemStack stack);
8+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package xyz.lisbammisakait.skill;
2+
3+
import net.minecraft.client.MinecraftClient;
4+
import net.minecraft.client.network.ClientPlayerEntity;
5+
import net.minecraft.entity.Entity;
6+
import net.minecraft.entity.effect.StatusEffectInstance;
7+
import net.minecraft.entity.effect.StatusEffects;
8+
import net.minecraft.entity.player.PlayerEntity;
9+
import net.minecraft.item.Item;
10+
import net.minecraft.item.ItemStack;
11+
import net.minecraft.item.tooltip.TooltipType;
12+
import net.minecraft.server.world.ServerWorld;
13+
import net.minecraft.text.Text;
14+
import net.minecraft.util.math.Box;
15+
import net.minecraft.util.math.Vec3d;
16+
import xyz.lisbammisakait.RelightTheThreePointStrategy;
17+
18+
import java.util.List;
19+
20+
public class LiuBeiASkill extends Item implements ActiveSkillable {
21+
private final int EFFECT_DURATION = 10;
22+
private final int EFFECT_AMPLIFIER = 1;
23+
private final int RECOVERHEALTH = 5;
24+
private final int RANGE = 5;
25+
public static final int COOLDOWN = 10;
26+
27+
public LiuBeiASkill(Settings settings) {
28+
super(settings);
29+
}
30+
31+
@Override
32+
public void castSkill(MinecraftClient client, ItemStack stack) {
33+
ClientPlayerEntity user = client.player;
34+
if (user.getItemCooldownManager().isCoolingDown(stack)) {
35+
// 如果物品正在冷却中,直接返回
36+
user.sendMessage(Text.of("技能冷却中"), false);
37+
return ;
38+
}
39+
40+
ServerWorld serverWorld = client.getServer().getWorld(user.getEntityWorld().getRegistryKey());
41+
//回血
42+
float currentHealth = user.getHealth();
43+
float maxHealth = user.getMaxHealth();
44+
if (currentHealth < maxHealth) {
45+
user.setHealth(Math.min(currentHealth + RECOVERHEALTH, maxHealth));
46+
}
47+
RelightTheThreePointStrategy.LOGGER.info("给自己添加生命回复效果");
48+
List<PlayerEntity> nearbyPlayers = getNearbyPlayers(user, serverWorld, RANGE);
49+
for (PlayerEntity nearbyPlayer : nearbyPlayers) {
50+
// if (!nearbyPlayer.equals(user)) {
51+
// 给范围内的其他玩家添加生命回复效果
52+
RelightTheThreePointStrategy.LOGGER.info("给玩家添加生命回复效果");
53+
nearbyPlayer.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, EFFECT_DURATION*20, EFFECT_AMPLIFIER));
54+
// }
55+
}
56+
// 设置物品冷却时间
57+
user.getItemCooldownManager().set(stack, COOLDOWN * 20);
58+
59+
}
60+
@Override
61+
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
62+
tooltip.add(Text.translatable("itemskill.relight-the-three-point-strategy.longnudiwei"));
63+
}
64+
public List<PlayerEntity> getNearbyPlayers(PlayerEntity player, ServerWorld world,int range) {
65+
Vec3d pos = player.getPos();
66+
// 创建一个以玩家为中心的检测范围盒子
67+
Box box = new Box(
68+
pos.getX() - range, pos.getY() - range, pos.getZ() - range,
69+
pos.getX() + range, pos.getY() + range, pos.getZ() + range
70+
);
71+
// 获取范围内的所有玩家
72+
List<PlayerEntity> nearbyPlayers = world.getEntitiesByClass(PlayerEntity.class, box, Entity::isAlive);
73+
RelightTheThreePointStrategy.LOGGER.info(nearbyPlayers.toString());
74+
return nearbyPlayers;
75+
}
76+
}

src/main/java/xyz/lisbammisakait/Skill/TieJiTaChuanSkill.java renamed to src/main/java/xyz/lisbammisakait/skill/TieJiTaChuanSkill.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package xyz.lisbammisakait.Skill;
1+
package xyz.lisbammisakait.skill;
22

33
import net.minecraft.item.Item;
44
import net.minecraft.item.ItemStack;
@@ -17,4 +17,6 @@ public TieJiTaChuanSkill(Settings settings) {
1717
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
1818
tooltip.add(Text.translatable("skill.relight-the-three-point-strategy.tiejitachuan").formatted(Formatting.GOLD));
1919
}
20+
21+
2022
}

src/main/java/xyz/lisbammisakait/Skill/YinFengLaiXiangSkill.java renamed to src/main/java/xyz/lisbammisakait/skill/YinFengLaiXiangSkill.java

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

33
import net.minecraft.item.Item;
44
import net.minecraft.item.ItemStack;
55
import net.minecraft.item.tooltip.TooltipType;
66
import net.minecraft.text.Text;
7-
import net.minecraft.util.Formatting;
87
import xyz.lisbammisakait.item.FeilongduofengItem;
98

109
import java.util.List;
1110

12-
public class YinFengLaiXiangSkill extends Item {
11+
public class YinFengLaiXiangSkill extends Item {
1312
public YinFengLaiXiangSkill(Settings settings) {
1413
super(settings);
1514
}
1615

1716
@Override
1817
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
19-
tooltip.add(Text.translatable("skill.relight-the-three-point-strategy.yinfenglaixiang", FeilongduofengItem.PROBABILITY,FeilongduofengItem.FIRETIME).formatted(Formatting.GOLD));
18+
tooltip.add(Text.translatable("skill.relight-the-three-point-strategy.yinfenglaixiang", FeilongduofengItem.PROBABILITY,FeilongduofengItem.FIRETIME));
2019
}
20+
2121
}

src/main/resources/assets/relight-the-three-point-strategy/lang/en_us.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,15 @@
44
"item.relight-the-three-point-strategy.tiejitachuan":"TieJiTachuan",
55
"item.relight-the-three-point-strategy.yinfenglaixiang": "YinFengLaiXiang",
66
"item.relight-the-three-point-strategy.shenweihutouzhanjinqiang": "ShenWeiHuTouZhanJinQiang",
7+
"item.relight-the-three-point-strategy.longnudiwei": "LongNuDiWei",
78
"key.RelightTheThreePointStrategy.SkillA": "SkillA",
89
"key.RelightTheThreePointStrategy.SkillB": "SkillB",
910
"category.RelightTheThreePointStrategy.SkillGroup": "Skill Group",
1011
"item.relight-the-three-point-strategy.hutouzhanjinqiang.remaining-cooldown-time": "Remaining Cooldown Time: %1$s s",
11-
"itemskill.relight-the-three-point-strategy.shenweihutouzhanjinqiang": "ShenWeiHuTouZhanJinQiang",
1212
"skillGroup.RelightTheThreePointStrategy": "Skill",
1313
"rttpsGroup.RelightTheThreePointStrategy": "Weapon",
14-
"key.RelightTheThreePointStrategy.SkillA": "SkillA",
15-
"key.RelightTheThreePointStrategy.SkillB": "SkillB",
16-
"category.RelightTheThreePointStrategy.SkillGroup": "Skill Group",
1714
"skill.relight-the-three-point-strategy.tiejitachuan": "§a[Passive] §fWhen you hold a weapon, you gain a speed - up effect. When you perform a basic attack, you dash 3 blocks towards the target.",
1815
"skill.relight-the-three-point-strategy.yinfenglaixiang": "§a[Passive] §fEach of your basic attacks has a %1$s%% chance to apply a knockback effect and a %2$s - second burn effect.",
19-
"itemskill.relight-the-three-point-strategy.hutouzhanjinqiang": "§6[Active][%1$ss] §fRight - click to strengthen the weapon, increasing its damage and speed - up effect until the next basic attack."
16+
"itemskill.relight-the-three-point-strategy.hutouzhanjinqiang": "§6[Active][%1$ss] §fRight - click to strengthen the weapon, increasing its damage and speed - up effect until the next basic attack.",
17+
"itemskill.relight-the-three-point-strategy.longnudiwei": ""
2018
}

0 commit comments

Comments
 (0)