Skip to content

Commit

Permalink
(feat) New attributes, leveling up blood, new configurations for trin…
Browse files Browse the repository at this point in the history
…kets (#4)

* (faat) 实现了属性“生命恢复”
* (faat) 重新实现了等级属性加成
* (feat) 饰品添加生效槽配置
  • Loading branch information
Mcayear authored Jan 25, 2024
1 parent 0c84e81 commit 5a155bd
Show file tree
Hide file tree
Showing 19 changed files with 215 additions and 138 deletions.
24 changes: 0 additions & 24 deletions .idea/misc.xml

This file was deleted.

Binary file added lib/EconomyAPI-2.0.2.jar
Binary file not shown.
4 changes: 3 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@
<dependency>
<groupId>me.onebone</groupId>
<artifactId>economyapi</artifactId>
<version>2.0.0-SNAPSHOT</version>
<version>2.0.2</version>
<scope>system</scope>
<systemPath>${pom.basedir}/lib/EconomyAPI-2.0.2.jar</systemPath>
</dependency>

<dependency>
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/RcRPG/AttrManager/AttrInterface.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,7 @@ public interface AttrInterface {

float[] getHpPerSecond();

float[] getHpPerNature();

float[] getMovementSpeedMultiplier();
}
8 changes: 8 additions & 0 deletions src/main/java/RcRPG/AttrManager/ItemAttr.java
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,14 @@ public float[] getHpPerSecond() {
return new float[0];
}

@Override
public float[] getHpPerNature() {
if (mainAttr.containsKey("生命恢复")) {
return mainAttr.get("生命恢复");
}
return new float[]{ 0.0f, 0.0f };
}

@Override
public float[] getMovementSpeedMultiplier() {
if (mainAttr.containsKey("移速加成")) {
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/RcRPG/AttrManager/LittleMonsterAttr.java
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,14 @@ public float[] getHpPerSecond() {
return new float[]{ 0.0f, 0.0f };
}

@Override
public float[] getHpPerNature() {
if (mainAttr.containsKey("生命恢复")) {
return mainAttr.get("生命恢复");
}
return new float[]{ 0.0f, 0.0f };
}

@Override
public float[] getMovementSpeedMultiplier() {
if (mainAttr.containsKey("移速加成")) {
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/RcRPG/AttrManager/Manager.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public Manager(){}
public float armorStrengthMultiplier = 0.0f;
public float experienceGainMultiplier = 0.0f;
public float hpPerSecond = 0.0f;
public float hpPerNature = 0.0f;
public float movementSpeedMultiplier = 0.0f;

public void updateComp() {
Expand Down Expand Up @@ -64,6 +65,7 @@ public void updateComp() {
// 辅助增益 3
experienceGainMultiplier = getRandomNum(getExperienceGainMultiplier());
hpPerSecond = getRandomNum(getHpPerSecond());
hpPerNature = getRandomNum(getHpPerNature());
movementSpeedMultiplier = getRandomNum(getMovementSpeedMultiplier());
// ...继续更新其他变量的值
}
Expand Down Expand Up @@ -359,6 +361,15 @@ public float[] getHpPerSecond() {
return new float[]{ 0.0f, 0.0f };
}

/**
* 生命恢复(自然恢复时的额外恢复血量)
* @return
*/
@Override
public float[] getHpPerNature() {
return new float[]{ 0.0f, 0.0f };
}

/**
* 移速加成
* @return
Expand Down
32 changes: 30 additions & 2 deletions src/main/java/RcRPG/AttrManager/PlayerAttr.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,25 @@ public static void setPlayerAttr(Player player) {
}

public void update() {
// 等级加点
if (Main.instance.config.exists("等级增加血量")) {
String[] s = Main.instance.config.getString("等级增加血量").split(":");
int lvAddHealth;
if (Level.enable) {
lvAddHealth = Level.getLevel(player) / Integer.parseInt(s[0]) * Integer.parseInt(s[1]);
} else {
lvAddHealth = player.getExperienceLevel() / Integer.parseInt(s[0]) * Integer.parseInt(s[1]);
}
if (lvAddHealth > 0) {
PlayerAttr pAttr = PlayerAttr.getPlayerAttr(player);
Map<String, float[]> attr = new HashMap<>();
attr.put("血量值", new float[]{lvAddHealth, lvAddHealth});
if (pAttr != null) {
pAttr.setItemAttrConfig(Main.getI18n().tr(player.getLanguageCode(), "rcrpg.playerattr.lv"), attr);
}
}
}

ArrayList<String> beforeLabel = new ArrayList<>(labelList);
labelList.clear();

Expand Down Expand Up @@ -79,9 +98,10 @@ public void update() {
Map<Integer,Item> map = OrnamentPanel.getPanel(player);
if (!map.isEmpty()) {
Map<String, float[]> attr = new HashMap<>();
for(int i = 0;i < Math.min(Main.getInstance().config.getInt("饰品生效格数"),map.size());i++){
for(int i = 0; i < Math.min(Main.getInstance().config.getInt("饰品生效格数"), map.size()); i++){
Ornament ornament = Main.loadOrnament.get(map.get(i).getNamedTag().getString("name"));
if(ornament == null) continue;
if (ornament == null) continue;
if (!ornament.isValidSlot(i)) continue;
OverAttr(attr,ornament.getMainAttr());
setItemAttrConfig(ornament.getLabel(), attr);

Expand Down Expand Up @@ -629,6 +649,14 @@ public float[] getHpPerSecond() {
return new float[]{ 0.0f, 0.0f };
}

@Override
public float[] getHpPerNature() {
if (getItemAttrMap().containsKey("生命恢复")) {
return getItemAttrMap().get("生命恢复");
}
return new float[]{ 0.0f, 0.0f };
}

@Override
public float[] getMovementSpeedMultiplier() {
if (getItemAttrMap().containsKey("移速加成")) {
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/RcRPG/AttrManager/RcEntityAttr.java
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,14 @@ public float[] getHpPerSecond() {
return new float[]{ 0.0f, 0.0f };
}

@Override
public float[] getHpPerNature() {
if (mainAttr.containsKey("生命恢复")) {
return mainAttr.get("生命恢复");
}
return new float[]{ 0.0f, 0.0f };
}

@Override
public float[] getMovementSpeedMultiplier() {
if (mainAttr.containsKey("移速加成")) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/RcRPG/Commands.java
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ public int execute(CommandSender sender, String commandLabel, Map.Entry<String,
}
case "reload": {
Main.getInstance().init();
log.addSuccess("重载成功").output();
log.addSuccess("rpg.commands.reloaded").output();
return 1;
}
case "dismantle": {
Expand Down
37 changes: 22 additions & 15 deletions src/main/java/RcRPG/Events.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package RcRPG;

import RcEntity.entity.entity.BaseEntity;
import RcEntity.entity.npc.NPC;
import RcRPG.AttrManager.LittleMonsterAttr;
import RcRPG.AttrManager.Manager;
import RcRPG.AttrManager.PlayerAttr;
Expand Down Expand Up @@ -44,10 +46,7 @@

import java.io.File;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.*;

import static RcRPG.Handle.getProbabilisticResults;

Expand Down Expand Up @@ -297,15 +296,15 @@ public void damageEvent(EntityDamageByEntityEvent event){
Manager WAttr;
if (hasLittleMonster && damager instanceof LittleNpc) {
DAttr = new LittleMonsterAttr(((LittleNpc) damager).getConfig().getMonsterAttrMap());
} else if (hasRcEntity && damager instanceof RcEntity.entity.entity.BaseEntity) {
String name = ((RcEntity.entity.entity.BaseEntity) damager).getName();
} else if (hasRcEntity && damager instanceof BaseEntity) {
String name = ((BaseEntity) damager).getName();
if (RcEntity.Main.getInstance().loadEntity.containsKey(name)) {
DAttr = new RcEntityAttr(RcEntity.Main.getInstance().loadEntity.get(name).getMonsterAttrMap());
} else {
DAttr = new Manager();
}
} else if (hasRcEntity && damager instanceof RcEntity.entity.npc.NPC) {
String name = ((RcEntity.entity.npc.NPC) damager).getName();
} else if (hasRcEntity && damager instanceof NPC) {
String name = ((NPC) damager).getName();
if (RcEntity.Main.getInstance().loadEntity.containsKey(name)) {
DAttr = new RcEntityAttr(RcEntity.Main.getInstance().loadEntity.get(name).getMonsterAttrMap());
} else {
Expand Down Expand Up @@ -524,7 +523,7 @@ public void damageEvent(EntityDamageByEntityEvent event){
double H = playerHealth.getHealth() + lifeSteal;
playerHealth.setHealth(H > MaxH ? MaxH : H);
} else {
damager.heal(new EntityRegainHealthEvent(damager, (float) lifeSteal, 3));
damager.heal(new EntityRegainHealthEvent(damager, (float) lifeSteal, RegainHealthEnum.LifeSteal.getCode()));
}
if (damagerIsPlayer) {
((Player) damager).sendMessage(Main.getI18n().tr(((Player) damager).getLanguageCode(), "rcrpg.events.life_steal_message", lifeSteal));
Expand Down Expand Up @@ -579,10 +578,23 @@ public void toggleSprintEvent(PlayerToggleSprintEvent event) {
Player player = event.getPlayer();
PlayerAttr attr = PlayerAttr.getPlayerAttr(player);
if (attr == null) return;
float speedAddition = attr.movementSpeedMultiplier;
float speedAddition = attr.movementSpeedMultiplier;// 处理移速加成
if (speedAddition > 0) player.sendMovementSpeed(speedAddition);
}

@EventHandler
public void onRegainHealth(EntityRegainHealthEvent event) {
if (event.getRegainReason() != EntityRegainHealthEvent.CAUSE_EATING) return;
Entity entity = event.getEntity();
if (!(entity instanceof Player player)) return;
PlayerAttr manager = PlayerAttr.getPlayerAttr(player);
if (manager != null) {
int amount = (int) manager.hpPerNature;
if (amount < 1) return;
player.heal(new EntityRegainHealthEvent(player, amount, RegainHealthEnum.HpPerNature.getCode()));
}
}

@EventHandler
public void chatEvent(PlayerChatEvent event){
if (Main.instance.disableChatStyle) return;
Expand Down Expand Up @@ -638,11 +650,6 @@ public void joinEvent(PlayerPreLoginEvent event){
player.setNameTagVisible();
player.setNameTagAlwaysVisible();
}
if (hasHealthAPI) {
Handle.getMaxHealth(player);
} else {
player.setMaxHealth(Handle.getMaxHealth(player));
}
}


Expand Down
17 changes: 0 additions & 17 deletions src/main/java/RcRPG/Handle.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package RcRPG;

import RcRPG.AttrManager.PlayerAttr;
import RcRPG.RPG.Level;
import RcRPG.RPG.Stone;
import RcRPG.Society.Shop;
import cn.nukkit.Player;
Expand Down Expand Up @@ -138,21 +136,6 @@ public static void remove(Player player,String[] s){
}
}

public static int getMaxHealth(Player player){
if(Handle.getPlayerConfig(player.getName()) == null) return 20;
String s = Main.instance.config.getString("等级增加血量");
int health1 = Level.getLevel(player) / Integer.parseInt(s.split(":")[0]) * Integer.parseInt(s.split(":")[1]);
int health2 = 0;
if (PlayerAttr.playerlist.containsKey(player)) {
PlayerAttr pAttr = PlayerAttr.playerlist.get(player);
int hp = (int) pAttr.getHp()[0];
float hpMulti = pAttr.getHpRegenMultiplier()[0];
int hpAdd = (int) (hpMulti * hp);
health2 = hp + hpAdd;
}
return health2 + health1 + 20;
}

public static int random(int a,int b) {
return new Random().nextInt(b-a+1)+a;
}
Expand Down
Loading

0 comments on commit 5a155bd

Please sign in to comment.