Skip to content

Commit 395f8f3

Browse files
authored
Merge pull request #12 from JavaJava19/develop
Develop
2 parents 4904447 + 598716e commit 395f8f3

10 files changed

Lines changed: 135 additions & 55 deletions

File tree

src/main/java/com/github/elic0de/thejpspit/TheJpsPit.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import com.github.elic0de.thejpspit.player.PitPlayerManager;
1616
import com.github.elic0de.thejpspit.queue.QueueManager;
1717
import com.github.elic0de.thejpspit.task.QueueTask;
18-
import com.github.elic0de.thejpspit.util.killAssistHelper.KillAssistHelper;
18+
import com.github.elic0de.thejpspit.util.KillAssistHelper;
1919
import com.github.elic0de.thejpspit.util.KillRatingHelper;
2020
import java.util.ArrayList;
2121
import java.util.List;
@@ -38,12 +38,14 @@ public final class TheJpsPit extends JavaPlugin {
3838
private Game game;
3939
private Database database;
4040
private KillRatingHelper ratingHelper;
41+
42+
private KillAssistHelper assistKillHelper;
4143
private QueueManager queueManager;
4244
private QueueTask queueTask;
4345
private List<Hook> hooks = new ArrayList<>();
4446

45-
private final Scoreboard scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
46-
private final Team team = scoreboard.registerNewTeam("pit");
47+
private Scoreboard scoreboard;
48+
private Team team;
4749

4850
public static TheJpsPit getInstance() {
4951
return instance;
@@ -73,6 +75,7 @@ public void onEnable() {
7375
"Please check the supplied database credentials in the config file");
7476
}
7577

78+
assistKillHelper = new KillAssistHelper();
7679
ratingHelper = new KillRatingHelper(0);
7780
queueManager = new QueueManager();
7881

@@ -110,6 +113,7 @@ public void onEnable() {
110113
if (updateNeeded) {
111114
database.updateUserData(pitPlayer);
112115
}
116+
113117
});
114118
}
115119

@@ -122,6 +126,8 @@ public void removePitTeam(Player player) {
122126
}
123127

124128
private void optionScoreboard() {
129+
scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
130+
team = scoreboard.registerNewTeam("pit");
125131
team.setOption(Option.COLLISION_RULE, OptionStatus.NEVER);
126132
}
127133

@@ -136,7 +142,6 @@ private void registerCommands() {
136142
private void registerListener() {
137143
new EventListener();
138144
new CombatTagger();
139-
new KillAssistHelper();
140145
}
141146

142147
private void registerHooks() {
@@ -200,11 +205,14 @@ public Game getGame() {
200205
public Database getDatabase() {
201206
return database;
202207
}
203-
204208
public KillRatingHelper getRatingHelper() {
205209
return ratingHelper;
206210
}
207211

212+
public KillAssistHelper getAssistKillHelper() {
213+
return assistKillHelper;
214+
}
215+
208216
public QueueManager getQueueManager() {
209217
return queueManager;
210218
}

src/main/java/com/github/elic0de/thejpspit/database/SqLiteDatabase.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.util.UUID;
2020
import java.util.concurrent.CompletableFuture;
2121
import java.util.logging.Level;
22+
import java.util.stream.Collectors;
23+
import java.util.stream.Stream;
2224
import org.bukkit.Bukkit;
2325
import org.bukkit.entity.Player;
2426
import org.sqlite.SQLiteConfig;
@@ -199,17 +201,17 @@ public Optional<OfflinePitPlayer> getOfflinePitPlayer(UUID uuid) {
199201
public CompletableFuture<Optional<Integer>> getPlayerRanking(PitPlayer player, RankType type) {
200202
return CompletableFuture.supplyAsync(() -> {
201203
try {
204+
String test = """
205+
SELECT uuid, rank
206+
FROM(SELECT `uuid`,
207+
RANK()
208+
OVER(ORDER BY %type% DESC)
209+
AS rank FROM `%players_table%`)
210+
WHERE `uuid`=?;
211+
""";
202212
try (PreparedStatement statement = getConnection().prepareStatement(
203-
formatStatementTables("""
204-
SELECT uuid, rank
205-
FROM(SELECT `uuid`,
206-
RANK()
207-
OVER(ORDER BY ? DESC)
208-
AS rank FROM `%players_table%`)
209-
WHERE uuid=?;"""))) {
210-
211-
statement.setString(1, type.name().toLowerCase(Locale.ROOT));
212-
statement.setString(2, player.getUniqueId().toString());
213+
formatStatementTables(test.replaceAll("%type%", type.name().toLowerCase())))) {
214+
statement.setString(1, player.getUniqueId().toString());
213215

214216
final ResultSet resultSet = statement.executeQuery();
215217
if (resultSet.next()) {

src/main/java/com/github/elic0de/thejpspit/game/Game.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@ public void join(PitPlayer player) {
2525
pitPlayers.add(player);
2626
player.addItem();
2727
player.getBoard().updateLines();
28+
pit.addPitTeam(player.getPlayer());
29+
player.updateDisplayName();
30+
player.setLastDamager(null);
2831
}
2932

3033
public void leave(PitPlayer player) {
3134
pit.getDatabase().updateUserData(player);
3235
pitPlayers.remove(player);
36+
pit.removePitTeam(player.getPlayer());
3337
}
3438

3539
public void death(PitPlayer player) {
@@ -57,6 +61,8 @@ public void death(PitPlayer player) {
5761
pit.getRatingHelper().initRating(player);
5862
pit.getRatingHelper().initRating(killer);
5963

64+
pit.getAssistKillHelper().death(player);
65+
6066
player.sendMessage("&c【PIT】%player%に倒されました(KDレート:%rating%)"
6167
.replaceAll("%player%", killer.getName())
6268
.replaceAll("%rating%", killer.getRating() + "%")
@@ -66,7 +72,7 @@ public void death(PitPlayer player) {
6672
.replaceAll("%rating%", player.getRating() + "%")
6773
);
6874

69-
//KillAssistHelper.test(player.getPlayer());
75+
player.setLastDamager(null);
7076
}
7177

7278
public void broadcast(String message) {

src/main/java/com/github/elic0de/thejpspit/leveler/Levels.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,16 @@ public static int getPlayerNeededXP(PitPlayer player) {
7070
}
7171
return 0;
7272
}
73+
74+
public static int getLevelNeededXP(PitPlayer player) {
75+
final List<Integer> requirements = LEVELS.stream().map(Level::getNeededXP)
76+
.toList();
77+
for (int requirement : requirements) {
78+
int amountToNextLevel = (int) (requirement - player.getXp());
79+
if (amountToNextLevel > 0) {
80+
return requirement;
81+
}
82+
}
83+
return 0;
84+
}
7385
}

src/main/java/com/github/elic0de/thejpspit/listener/CombatTagger.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.elic0de.thejpspit.listener;
22

33
import com.github.elic0de.thejpspit.TheJpsPit;
4+
import com.github.elic0de.thejpspit.player.PitPlayerManager;
45
import java.util.ArrayList;
56
import java.util.HashMap;
67
import java.util.Map;
@@ -61,6 +62,7 @@ public void run() {
6162
combatPlayers.get(uuid).remove();
6263
combatPlayers.remove(uuid);
6364
}
65+
PitPlayerManager.getPitPlayer(Bukkit.getPlayer(uuid)).setLastDamager(null);
6466
}
6567
}.runTaskLater(TheJpsPit.getInstance(), delay * 20L);
6668
}

src/main/java/com/github/elic0de/thejpspit/listener/EventListener.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,6 @@ public void onJoin(PlayerJoinEvent event) {
7575
player.setHealth(entity.getHealth());
7676
entity.remove();
7777
}
78-
plugin.addPitTeam(player.getPlayer());
79-
8078
}
8179

8280
@EventHandler
@@ -101,7 +99,6 @@ public void onQuit(PlayerQuitEvent event) {
10199
if (player.getBoard() != null) {
102100
player.getBoard().delete();
103101
}
104-
plugin.removePitTeam(player.getPlayer());
105102
}
106103

107104
@EventHandler
@@ -200,6 +197,7 @@ public void onDamage(EntityDamageByEntityEvent event) {
200197
return;
201198
}
202199
pitPlayer.showHealth(victimPitPlayer);
200+
victimPitPlayer.setLastDamager(pitPlayer);
203201
}
204202
}
205203
}

src/main/java/com/github/elic0de/thejpspit/player/PitPlayer.java

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class PitPlayer {
4343
private double xp;
4444
private final FastBoard board;
4545

46+
private PitPlayer lastDamager;
47+
4648
public PitPlayer(Player player) {
4749
this.player = player;
4850
this.name = player.getName();
@@ -121,37 +123,44 @@ public void sendStatus(PitPlayer player) {
121123
"Rating >> &a%rating% (#%rating_ranking%)",
122124
"Best Rating >> &e%best_rating%"
123125
).map(s ->
124-
s.replaceAll("%playerName%", getName())
126+
s.replaceAll("%playerName%", player.getName())
125127
.replaceAll("%kills%",
126-
kills + "")
128+
player.getKills() + "")
127129
.replaceAll("%best_streaks%",
128-
bestStreaks + "")
130+
player.getBestStreaks() + "")
129131
.replaceAll("%deaths%",
130-
deaths + "")
132+
player.getDeaths() + "")
131133
.replaceAll("%rating%",
132-
rating + "%")
134+
player.getRating() + "%")
133135
.replaceAll("%best_rating%",
134-
bestRating + "")
136+
player.getBestRating() + "")
135137
.replaceAll("%kills_ranking%",
136-
pit.getDatabase().getPlayerRanking(this, Database.RankType.KILLS).join()
138+
pit.getDatabase().getPlayerRanking(player, Database.RankType.KILLS).join()
137139
.orElse(0)
138140
+ "")
139141
.replaceAll("%deaths_ranking%",
140-
pit.getDatabase().getPlayerRanking(this, Database.RankType.DEATHS).join()
142+
pit.getDatabase().getPlayerRanking(player, Database.RankType.DEATHS).join()
141143
.orElse(0)
142144
+ "")
143145
.replaceAll("%rating_ranking%",
144-
pit.getDatabase().getPlayerRanking(this, Database.RankType.RATING).join()
146+
pit.getDatabase().getPlayerRanking(player, Database.RankType.RATING).join()
145147
.orElse(0)
146148
+ "")
147-
).forEach(player::sendMessage);
149+
).forEach(this::sendMessage);
148150
}
149151

150152
private void updateXpBar() {
151153
final float xp = Levels.getPlayerNeededXP(this);
154+
final float neededXp = Levels.getLevelNeededXP(this);
152155
final int level = Levels.getPlayerLevel(this);
153-
/*player.setLevel(level);
154-
player.setExp(Math.abs(100 - xp) / 100);*/
156+
player.setLevel(level);
157+
player.setExp((neededXp - xp)/neededXp);
158+
System.out.println(xp + ":" + neededXp);
159+
}
160+
161+
public void updateDisplayName() {
162+
player.setDisplayName("[" + Levels.getPlayerLevel(this) + "]" + " " + getName());
163+
player.setPlayerListName("[" + Levels.getPlayerLevel(this) + "]" + " " + getName());
155164
}
156165

157166
public Player getPlayer() {
@@ -167,7 +176,7 @@ public String getName() {
167176
}
168177

169178
public PitPlayer getKiller() {
170-
if (player.getKiller() == null) return null;
179+
if (player.getKiller() == null) return lastDamager;
171180
return PitPlayerManager.getPitPlayer(player.getKiller());
172181
}
173182

@@ -230,13 +239,18 @@ public void increaseDeaths() {
230239
public void increaseXP() {
231240
this.xp++;
232241
updateXpBar();
242+
updateDisplayName();
233243
}
234244

235245
public void increaseHealth() {
236246
player.setHealth(Math.min(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(),
237247
player.getHealth() + 2));
238248
}
239249

250+
public void setLastDamager(PitPlayer player) {
251+
this.lastDamager = player;
252+
}
253+
240254
public void resetStreaks() {
241255
streaks = 0;
242256
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.github.elic0de.thejpspit.util;
2+
3+
import com.github.elic0de.thejpspit.TheJpsPit;
4+
import com.github.elic0de.thejpspit.player.PitPlayer;
5+
import com.github.elic0de.thejpspit.player.PitPlayerManager;
6+
import de.themoep.minedown.MineDown;
7+
import java.util.HashMap;
8+
import java.util.UUID;
9+
import org.bukkit.Bukkit;
10+
import org.bukkit.entity.Player;
11+
import org.bukkit.event.EventHandler;
12+
import org.bukkit.event.Listener;
13+
import org.bukkit.event.entity.EntityDamageByEntityEvent;
14+
15+
public class KillAssistHelper implements Listener {
16+
17+
private HashMap<UUID, HashMap<UUID, Double>> pitPlayers = new HashMap<>();
18+
19+
public KillAssistHelper() {
20+
Bukkit.getPluginManager().registerEvents(this, TheJpsPit.getInstance());
21+
}
22+
23+
public void death(PitPlayer pitPlayer) {
24+
if (pitPlayers.containsKey(pitPlayer.getUniqueId())) {
25+
final String KillerName = pitPlayer.getKiller().getName();
26+
double totalDamage = 0D;
27+
for (Double damage : pitPlayers.get(pitPlayer.getUniqueId()).values()) {
28+
totalDamage += damage;
29+
}
30+
for (UUID uuid : pitPlayers.get(pitPlayer.getUniqueId()).keySet()) {
31+
final Player player = Bukkit.getPlayer(uuid);
32+
if (!player.isOnline()) continue;
33+
final double damaged = pitPlayers.get(pitPlayer.getUniqueId()).get(uuid);
34+
final double assistPer = damaged/totalDamage;
35+
player.spigot().sendMessage(new MineDown("アシストキル [%per%]% %killedPlayer%".replaceAll("%per%", assistPer + "").replaceAll("%killedPlayer%", KillerName)).toComponent());
36+
}
37+
}
38+
}
39+
40+
@EventHandler
41+
private void onDamage(EntityDamageByEntityEvent event) {
42+
if (event.getEntity() instanceof Player vitim) {
43+
if (event.getDamager() instanceof Player damager) {
44+
final PitPlayer victimPitPlayer = PitPlayerManager.getPitPlayer(vitim);
45+
final PitPlayer pitPlayer = PitPlayerManager.getPitPlayer(damager);
46+
47+
if (pitPlayers.containsKey(victimPitPlayer.getUniqueId())) {
48+
final HashMap<UUID, Double> damages = pitPlayers.get(victimPitPlayer.getUniqueId());
49+
final double damage = damages.getOrDefault(pitPlayer.getPlayer(),0D);
50+
final double totalDamage = damage + event.getDamage();
51+
damages.put(pitPlayer.getUniqueId(), totalDamage);
52+
return;
53+
}
54+
final HashMap<UUID, Double> damages = new HashMap<>();
55+
56+
damages.put(pitPlayer.getUniqueId(), event.getDamage());
57+
pitPlayers.put(victimPitPlayer.getUniqueId(), damages);
58+
}
59+
}
60+
}
61+
}

src/main/java/com/github/elic0de/thejpspit/util/killAssistHelper/KillAssistData.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/main/java/com/github/elic0de/thejpspit/util/killAssistHelper/KillAssistHelper.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)