code refactoring

This commit is contained in:
unurled 2024-03-18 22:01:16 +01:00
parent 456df87c33
commit 9105d31a02
Signed by: unurled
GPG key ID: FDBC9CBE1F82423F
9 changed files with 652 additions and 542 deletions

View file

@ -29,6 +29,7 @@ import org.jetbrains.annotations.Nullable;
public class ClientBuildManager extends Manager {
public static final String SR_PLAYERS_CLIENTBUILD = "sr.players.clientbuild.";
private final List<ClientBuild> builds = new ArrayList<>();
/** a map of players that have ClientBuild displayed */
@ -54,7 +55,7 @@ public class ClientBuildManager extends Manager {
public void saveData() {
// save client side builds to redis
DataManager dataManager = DataManager.getInstance(DataManager.class);
DataManager dataManager = Manager.getInstance(DataManager.class);
DataHandler dh = dataManager.getDataHandler();
Gson gson =
@ -69,7 +70,7 @@ public class ClientBuildManager extends Manager {
for (Entry<Player, List<String>> entry : playerBlocks.entrySet()) {
for (String name : entry.getValue()) {
// save for player
dh.set("sr.players.clientbuild." + entry.getKey().getUniqueId() + "." + name, "true");
dh.set(SR_PLAYERS_CLIENTBUILD + entry.getKey().getUniqueId() + "." + name, "true");
}
}
}
@ -78,7 +79,7 @@ public class ClientBuildManager extends Manager {
@Override
public void loadData() {
// load client side builds from redis
DataManager dataManager = DataManager.getInstance(DataManager.class);
DataManager dataManager = Manager.getInstance(DataManager.class);
DataHandler dh = dataManager.getDataHandler();
if (dh == null) {
@ -107,11 +108,10 @@ public class ClientBuildManager extends Manager {
@EventHandler
public void onPlayerJoin(@NotNull PlayerJoinEvent e) {
DataHandler dh = DataManager.getInstance(DataManager.class).getDataHandler();
DataHandler dh = Manager.getInstance(DataManager.class).getDataHandler();
Player p = e.getPlayer();
List<String> names =
new ArrayList<>(dh.getKeysAll("sr.players.clientbuild." + p.getUniqueId()));
List<String> names = new ArrayList<>(dh.getKeysAll(SR_PLAYERS_CLIENTBUILD + p.getUniqueId()));
playerBlocks.put(p, names);
@ -144,13 +144,13 @@ public class ClientBuildManager extends Manager {
// save the player's displayed builds
DataManager dataManager = DataManager.getInstance(DataManager.class);
DataManager dataManager = Manager.getInstance(DataManager.class);
DataHandler dh = dataManager.getDataHandler();
dh.remove("sr.players.clientbuild." + p.getUniqueId());
dh.remove(SR_PLAYERS_CLIENTBUILD + p.getUniqueId());
for (String name : names) {
dh.set("sr.players.clientbuild." + p.getUniqueId() + "." + name, "true");
dh.set(SR_PLAYERS_CLIENTBUILD + p.getUniqueId() + "." + name, "true");
}
playerBlocks.get(p).clear();

View file

@ -26,7 +26,6 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.EntityEquipment;
import org.jetbrains.annotations.NotNull;
@SuppressWarnings("EmptyMethod")
public class CombatManager extends Manager {
public static final Random RANDOM = new Random();
@ -41,6 +40,66 @@ public class CombatManager extends Manager {
e.setCancelled(true);
}
private static void playerVictim(
@NotNull EntityDamageByEntityEvent e, Player player, Mob mob, PlayerManager pm) {
// get equipment of damager
EntityEquipment equipment = mob.getEquipment();
Double dStrength = Items.getTotalAttribute(equipment, Attribute.STRENGTH);
Double eDefense = Items.getTotalAttribute(player, Attribute.DEFENSE);
double damage = dStrength - eDefense;
Double dLuck = Items.getTotalAttribute(equipment, Attribute.LUCK);
Double eLuck = Items.getTotalAttribute(player, Attribute.LUCK);
double luck = dLuck - eLuck;
if (luck < -1000) {
// 100% chance of miss
player.sendMessage(player.identity(), comp("<red>You dodged!"));
player.playSound(player, Sound.ENTITY_ARROW_SHOOT, 1.0f, 1.0f);
e.setCancelled(true);
return;
} else if (luck > 1000) {
// 100% chance of critical hit
luck = 10000d;
player.playSound(player, Sound.ENTITY_PLAYER_ATTACK_CRIT, 1.0f, 1.0f);
damage = damage * 2;
}
if (luck < 0) {
// chances of miss
if (RANDOM.nextBoolean()) {
player.playSound(player, Sound.ENTITY_ARROW_SHOOT, 1.0f, 1.0f);
e.setCancelled(true);
player.sendMessage(comp("<red>You dodged!"));
return;
}
} else if (luck > 0 && luck < 1000 && RANDOM.nextBoolean()) {
// chance of critical hit
player.playSound(player, Sound.ENTITY_PLAYER_ATTACK_CRIT, 1.0f, 1.0f);
// damage * 2
damage = damage * 2;
}
// apply damage
player.damage(damage);
// add an
SRPlayer player1 = pm.getPlayer(player.getUniqueId());
if (player1 != null) {
player1.setHealth(player.getHealth() - damage, DamageCause.ENTITY_ATTACK);
if (player1.getHealth() <= 0) {
player.damage(player.getHealth());
}
updateActionBar(player, player1);
}
spawnIndicator(player, false, damage);
// TODO: check for status effects (apply status effects depending item of damager)
}
// TODO: Finish this
@EventHandler
public void onDamage(@NotNull EntityDamageByEntityEvent e) {
@ -56,156 +115,124 @@ public class CombatManager extends Manager {
}
if (damager instanceof Player d) {
if (entity instanceof Player) {
// no pvp
playerDamager(e, entity, d, pm);
return;
}
if (entity instanceof Player player && damager instanceof Mob mob) {
playerVictim(e, player, mob, pm);
}
}
private void playerDamager(
@NotNull EntityDamageByEntityEvent e, LivingEntity entity, Player d, PlayerManager pm) {
if (entity instanceof Player) {
// no pvp
e.setCancelled(true);
d.sendMessage(comp("<red>You can't attack players!"));
d.playSound(d, Sound.BLOCK_ANVIL_HIT, 1.0f, 1.0f);
return;
}
if (entity instanceof Mob mob) {
isMob(e, entity, d, pm, mob);
}
}
private void isMob(
@NotNull EntityDamageByEntityEvent e,
LivingEntity entity,
Player d,
PlayerManager pm,
Mob mob) {
double dStrength = Items.getTotalAttribute(d, Attribute.STRENGTH);
SRPlayer player = pm.getPlayer(d.getUniqueId());
if (player != null) {
dStrength += player.getAttribute(Attribute.STRENGTH);
}
EntityEquipment equipment = mob.getEquipment();
double eDefense = Items.getTotalAttribute(equipment, Attribute.DEFENSE);
double damage = dStrength - eDefense;
Double dLuck = Items.getTotalAttribute(d, Attribute.LUCK);
Double eLuck = Items.getTotalAttribute(equipment, Attribute.LUCK);
double luck = dLuck - eLuck;
if (luck < -1000) {
// 100% chance of miss
d.sendMessage(comp("<red>You missed!"));
d.playSound(d, Sound.ENTITY_ARROW_SHOOT, 1.0f, 1.0f);
e.setCancelled(true);
return;
} else if (luck > 1000) {
// 100% chance of critical hit
luck = 10000d;
d.playSound(d, Sound.ENTITY_PLAYER_ATTACK_CRIT, 1.0f, 1.0f);
damage = damage * 2;
}
if (luck < 0) {
// chances of miss
if (RANDOM.nextBoolean()) {
d.playSound(d, Sound.ENTITY_ARROW_SHOOT, 1.0f, 1.0f);
e.setCancelled(true);
d.sendMessage(comp("<red>You can't attack players!"));
d.playSound(d, Sound.BLOCK_ANVIL_HIT, 1.0f, 1.0f);
d.sendMessage(comp("<red>You missed!"));
return;
}
if (entity instanceof Mob mob) {
double dStrength = Items.getTotalAttribute(d, Attribute.STRENGTH);
SRPlayer player = pm.getPlayer(d.getUniqueId());
if (player != null) {
dStrength += player.getAttribute(Attribute.STRENGTH);
}
EntityEquipment equipment = mob.getEquipment();
double eDefense = Items.getTotalAttribute(equipment, Attribute.DEFENSE);
} else if (luck > 0 && luck < 1000 && RANDOM.nextBoolean()) {
// chance of critical hit
d.playSound(d, Sound.ENTITY_PLAYER_ATTACK_CRIT, 1.0f, 1.0f);
// damage * 2
damage = damage * 2;
}
// apply damage
Double damage = dStrength - eDefense;
historyHandler(entity, d, damage);
entity.damage(damage);
Double dLuck = Items.getTotalAttribute(d, Attribute.LUCK);
Double eLuck = Items.getTotalAttribute(equipment, Attribute.LUCK);
EntityManager em = EntityManager.getInstance(EntityManager.class);
SREntity ent = em.getEntity(entity.getUniqueId());
double luck = dLuck - eLuck;
if (luck < -1000) {
// 100% chance of miss
d.sendMessage(comp("<red>You missed!"));
d.playSound(d, Sound.ENTITY_ARROW_SHOOT, 1.0f, 1.0f);
e.setCancelled(true);
return;
} else if (luck > 1000) {
// 100% chance of critical hit
luck = 10000d;
d.playSound(d, Sound.ENTITY_PLAYER_ATTACK_CRIT, 1.0f, 1.0f);
damage = damage * 2;
}
if (entity.getHealth() <= 0) {
die(entity, d, pm, ent);
return;
}
if (luck < 0) {
// chances of miss
if (RANDOM.nextBoolean()) {
d.playSound(d, Sound.ENTITY_ARROW_SHOOT, 1.0f, 1.0f);
e.setCancelled(true);
d.sendMessage(comp("<red>You missed!"));
return;
}
} else if (luck > 0 && luck < 1000 && RANDOM.nextBoolean()) {
// chance of critical hit
d.playSound(d, Sound.ENTITY_PLAYER_ATTACK_CRIT, 1.0f, 1.0f);
// damage * 2
damage = damage * 2;
}
// apply damage
spawnIndicator(entity, false, damage);
// TODO: check for status effects (apply status effects depending item of damager)
}
if (historyMobDamage.containsKey(entity.getUniqueId())) {
HashMap<Player, Double> history =
historyMobDamage.getOrDefault(entity.getUniqueId(), new HashMap<>());
if (history.containsKey(d)) {
history.put(d, history.get(d) + damage);
} else {
history.put(d, damage);
}
} else {
HashMap<Player, Double> history = new HashMap<>();
history.put(d, damage);
historyMobDamage.put(entity.getUniqueId(), history);
}
entity.damage(damage);
EntityManager em = EntityManager.getInstance(EntityManager.class);
SREntity ent = em.getEntity(entity.getUniqueId());
if (entity.getHealth() <= 0) {
// entity is dead, give experience to player
SRPlayer player1 = pm.getPlayer(d.getUniqueId());
if (player1 != null && ent != null) {
// calculate experience % based on damage
HashMap<Player, Double> playerDoubleHashMap =
historyMobDamage.get(entity.getUniqueId());
if (playerDoubleHashMap == null) {
return;
}
for (Entry<Player, Double> map : playerDoubleHashMap.entrySet()) {
Double exp = ent.getExperience() * (map.getValue() / ent.getHealth());
SRPlayer tmp = pm.getPlayer(map.getKey().getUniqueId());
if (tmp != null) {
tmp.setExperience((long) (tmp.getExperience() + exp));
}
}
}
}
spawnIndicator(entity, false, damage);
// TODO: check for status effects (apply status effects depending item of damager)
}
} else if (entity instanceof Player player && damager instanceof Mob mob) {
// damager is not player
// get equipment of damager
EntityEquipment equipment = mob.getEquipment();
Double dStrength = Items.getTotalAttribute(equipment, Attribute.STRENGTH);
Double eDefense = Items.getTotalAttribute(player, Attribute.DEFENSE);
double damage = dStrength - eDefense;
Double dLuck = Items.getTotalAttribute(equipment, Attribute.LUCK);
Double eLuck = Items.getTotalAttribute(player, Attribute.LUCK);
double luck = dLuck - eLuck;
if (luck < -1000) {
// 100% chance of miss
player.sendMessage(comp("<red>You dodged!"));
player.playSound(player, Sound.ENTITY_ARROW_SHOOT, 1.0f, 1.0f);
e.setCancelled(true);
private void die(LivingEntity entity, Player d, PlayerManager pm, SREntity ent) {
// entity is dead, give experience to player
SRPlayer player1 = pm.getPlayer(d.getUniqueId());
if (player1 != null && ent != null) {
// calculate experience % based on damage
HashMap<Player, Double> playerDoubleHashMap = historyMobDamage.get(entity.getUniqueId());
if (playerDoubleHashMap == null) {
return;
} else if (luck > 1000) {
// 100% chance of critical hit
luck = 10000d;
player.playSound(player, Sound.ENTITY_PLAYER_ATTACK_CRIT, 1.0f, 1.0f);
damage = damage * 2;
}
if (luck < 0) {
// chances of miss
if (RANDOM.nextBoolean()) {
player.playSound(player, Sound.ENTITY_ARROW_SHOOT, 1.0f, 1.0f);
e.setCancelled(true);
player.sendMessage(comp("<red>You dodged!"));
return;
for (Entry<Player, Double> map : playerDoubleHashMap.entrySet()) {
Double exp = ent.getExperience() * (map.getValue() / ent.getHealth());
SRPlayer tmp = pm.getPlayer(map.getKey().getUniqueId());
if (tmp != null) {
tmp.setExperience((long) (tmp.getExperience() + exp));
}
} else if (luck > 0 && luck < 1000 && RANDOM.nextBoolean()) {
// chance of critical hit
player.playSound(player, Sound.ENTITY_PLAYER_ATTACK_CRIT, 1.0f, 1.0f);
// damage * 2
damage = damage * 2;
}
}
}
// apply damage
player.damage(damage);
// add an
SRPlayer player1 = pm.getPlayer(player.getUniqueId());
if (player1 != null) {
player1.setHealth(player.getHealth() - damage, DamageCause.ENTITY_ATTACK);
if (player1.getHealth() <= 0) {
player.damage(player.getHealth());
}
updateActionBar(player, player1);
private void historyHandler(LivingEntity entity, Player d, Double damage) {
if (historyMobDamage.containsKey(entity.getUniqueId())) {
HashMap<Player, Double> history =
historyMobDamage.getOrDefault(entity.getUniqueId(), new HashMap<>());
if (history.containsKey(d)) {
history.put(d, history.get(d) + damage);
} else {
history.put(d, damage);
}
spawnIndicator(player, false, damage);
// TODO: check for status effects (apply status effects depending item of damager)
} else {
HashMap<Player, Double> history = new HashMap<>();
history.put(d, damage);
historyMobDamage.put(entity.getUniqueId(), history);
}
}
}