Skip to content

Commit 87a64a1

Browse files
authored
Merge pull request #5 from JavaJava19/develop
Develop
2 parents 8d5f308 + c8f3a3b commit 87a64a1

File tree

14 files changed

+376
-13
lines changed

14 files changed

+376
-13
lines changed

pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@
6969
<id>minebench-repo</id>
7070
<url>https://repo.minebench.de/</url>
7171
</repository>
72+
<repository>
73+
<id>minebench-repo</id>
74+
<url>https://repo.minebench.de/</url>
75+
</repository>
7276
</repositories>
7377

7478
<dependencies>
@@ -100,5 +104,11 @@
100104
<version>1.6-SNAPSHOT</version>
101105
<scope>compile</scope>
102106
</dependency>
107+
<dependency>
108+
<groupId>de.themoep</groupId>
109+
<artifactId>minedown</artifactId>
110+
<version>1.7.1-SNAPSHOT</version>
111+
<scope>compile</scope>
112+
</dependency>
103113
</dependencies>
104114
</project>

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@
55
import com.github.elic0de.thejpspit.database.Database;
66
import com.github.elic0de.thejpspit.database.SqLiteDatabase;
77
import com.github.elic0de.thejpspit.game.Game;
8+
import com.github.elic0de.thejpspit.listener.CombatTagger;
89
import com.github.elic0de.thejpspit.listener.EventListener;
910
import com.github.elic0de.thejpspit.network.PluginMessageReceiver;
1011
import com.github.elic0de.thejpspit.player.PitPlayer;
1112
import com.github.elic0de.thejpspit.player.PitPlayerManager;
1213
import com.github.elic0de.thejpspit.queue.QueueManager;
1314
import com.github.elic0de.thejpspit.task.QueueTask;
15+
import com.github.elic0de.thejpspit.util.killAssistHelper.KillAssistHelper;
1416
import com.github.elic0de.thejpspit.util.KillRatingHelper;
1517
import java.util.Optional;
1618
import java.util.concurrent.atomic.AtomicBoolean;
1719
import java.util.logging.Level;
1820
import org.bukkit.Bukkit;
1921
import org.bukkit.GameRule;
20-
import org.bukkit.entity.Player;
2122
import org.bukkit.plugin.java.JavaPlugin;
2223

2324
public final class TheJpsPit extends JavaPlugin {
@@ -106,6 +107,8 @@ private void registerCommands() {
106107

107108
private void registerListener() {
108109
new EventListener();
110+
new CombatTagger();
111+
new KillAssistHelper();
109112
}
110113

111114
@Override

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.github.elic0de.thejpspit.database;
22

33
import com.github.elic0de.thejpspit.TheJpsPit;
4+
import com.github.elic0de.thejpspit.player.OfflinePitPlayer;
45
import com.github.elic0de.thejpspit.player.PitPlayer;
56
import java.io.IOException;
67
import java.io.InputStream;
78
import java.nio.charset.StandardCharsets;
89
import java.util.Map;
910
import java.util.Objects;
1011
import java.util.Optional;
12+
import java.util.UUID;
1113
import java.util.concurrent.CompletableFuture;
1214
import java.util.logging.Logger;
1315
import org.bukkit.entity.Player;
@@ -53,11 +55,17 @@ public abstract CompletableFuture<Void> runScript(InputStream inputStream,
5355

5456
public abstract Optional<PitPlayer> getPitPlayer(Player player);
5557

58+
public abstract Optional<PitPlayer> getPitPlayer(UUID uuid);
59+
60+
public abstract Optional<OfflinePitPlayer> getOfflinePitPlayer(UUID uuid);
61+
5662
public abstract CompletableFuture<Optional<Integer>> getPlayerRanking(PitPlayer player,
5763
RankType type);
5864

5965
public abstract void updateUserData(PitPlayer player);
6066

67+
public abstract void updateUserData(OfflinePitPlayer player);
68+
6169
public abstract void deletePlayerData();
6270

6371
public abstract void terminate();

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

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

33
import com.github.elic0de.thejpspit.TheJpsPit;
4+
import com.github.elic0de.thejpspit.player.OfflinePitPlayer;
45
import com.github.elic0de.thejpspit.player.PitPlayer;
56
import java.io.File;
67
import java.io.IOException;
@@ -15,8 +16,10 @@
1516
import java.util.Locale;
1617
import java.util.Map;
1718
import java.util.Optional;
19+
import java.util.UUID;
1820
import java.util.concurrent.CompletableFuture;
1921
import java.util.logging.Level;
22+
import org.bukkit.Bukkit;
2023
import org.bukkit.entity.Player;
2124
import org.sqlite.SQLiteConfig;
2225

@@ -131,17 +134,49 @@ public CompletableFuture<Void> runScript(InputStream inputStream,
131134

132135
@Override
133136
public Optional<PitPlayer> getPitPlayer(Player player) {
137+
return getPitPlayer(player.getUniqueId());
138+
}
139+
140+
@Override
141+
public Optional<PitPlayer> getPitPlayer(UUID uuid) {
134142
try (PreparedStatement statement = getConnection().prepareStatement(
135-
formatStatementTables("""
143+
formatStatementTables("""
136144
SELECT `kills`, `streaks`, `deaths`, `rating`, `xp`
137145
FROM `%players_table%`
138146
WHERE `uuid`=?"""))) {
139147

140-
statement.setString(1, player.getUniqueId().toString());
148+
statement.setString(1, uuid.toString());
141149

142150
final ResultSet resultSet = statement.executeQuery();
143151
if (resultSet.next()) {
144-
return Optional.of(new PitPlayer(player,
152+
return Optional.of(new PitPlayer(Bukkit.getPlayer(uuid),
153+
resultSet.getLong("kills"),
154+
resultSet.getLong("streaks"),
155+
resultSet.getLong("deaths"),
156+
resultSet.getDouble("rating"),
157+
resultSet.getDouble("xp")
158+
));
159+
}
160+
} catch (SQLException e) {
161+
getLogger().log(Level.SEVERE,
162+
"Failed to fetch a player from uuid from the database", e);
163+
}
164+
return Optional.empty();
165+
}
166+
167+
@Override
168+
public Optional<OfflinePitPlayer> getOfflinePitPlayer(UUID uuid) {
169+
try (PreparedStatement statement = getConnection().prepareStatement(
170+
formatStatementTables("""
171+
SELECT `kills`, `streaks`, `deaths`, `rating`, `xp`
172+
FROM `%players_table%`
173+
WHERE `uuid`=?"""))) {
174+
175+
statement.setString(1, uuid.toString());
176+
177+
final ResultSet resultSet = statement.executeQuery();
178+
if (resultSet.next()) {
179+
return Optional.of(new OfflinePitPlayer(uuid,
145180
resultSet.getLong("kills"),
146181
resultSet.getLong("streaks"),
147182
resultSet.getLong("deaths"),
@@ -226,6 +261,30 @@ public void updateUserData(PitPlayer player) {
226261
}
227262
}
228263

264+
@Override
265+
public void updateUserData(OfflinePitPlayer player) {
266+
try {
267+
try (PreparedStatement statement = getConnection().prepareStatement(
268+
formatStatementTables("""
269+
UPDATE `%players_table%`
270+
SET `kills`=?, `streaks`=?, `deaths`=?, `rating`=?, `xp`=?
271+
WHERE `uuid`=?"""))) {
272+
273+
statement.setLong(1, player.getKills());
274+
statement.setLong(2, player.getStreaks());
275+
statement.setLong(3, player.getDeaths());
276+
statement.setDouble(4, player.getRating());
277+
statement.setDouble(5, player.getXp());
278+
statement.setString(6, player.getUniqueId().toString());
279+
statement.executeUpdate();
280+
}
281+
282+
} catch (SQLException e) {
283+
getLogger().log(Level.SEVERE,
284+
"Failed to update user data for " + player.getUniqueId().toString() + " on the database", e);
285+
}
286+
}
287+
229288
@Override
230289
public void deletePlayerData() {
231290
try (Connection connection = getConnection()) {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.github.elic0de.thejpspit.player.PitPlayer;
55
import com.github.elic0de.thejpspit.scoreboard.GameScoreboard;
66
import com.github.elic0de.thejpspit.task.GameTask;
7+
import com.github.elic0de.thejpspit.util.killAssistHelper.KillAssistHelper;
78
import java.util.HashSet;
89
import java.util.Set;
910

@@ -35,6 +36,7 @@ public void death(PitPlayer player) {
3536

3637
if (killer == null) {
3738
player.increaseDeaths();
39+
player.resetItem();
3840
player.resetStreaks();
3941

4042
pit.getRatingHelper().initRating(player);
@@ -62,6 +64,8 @@ public void death(PitPlayer player) {
6264
.replaceAll("%player%", player.getName())
6365
.replaceAll("%rating%", player.getRating() + "%")
6466
);
67+
68+
//KillAssistHelper.test(player.getPlayer());
6569
}
6670

6771
public Set<PitPlayer> getPitPlayers() {
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.github.elic0de.thejpspit.listener;
2+
3+
import com.github.elic0de.thejpspit.TheJpsPit;
4+
import java.util.ArrayList;
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
import java.util.UUID;
8+
import org.bukkit.Bukkit;
9+
import org.bukkit.entity.Entity;
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+
import org.bukkit.event.entity.PlayerDeathEvent;
15+
import org.bukkit.scheduler.BukkitRunnable;
16+
17+
public class CombatTagger implements Listener {
18+
19+
private static final Map<UUID, Boolean> TAGGED = new HashMap<>();
20+
private static final Map<UUID, BukkitRunnable> UNTAGGERS = new HashMap<>();
21+
private final int delay = 15;
22+
23+
public CombatTagger() {
24+
Bukkit.getPluginManager().registerEvents(this, TheJpsPit.getInstance());
25+
}
26+
27+
public static boolean isTagged(final UUID uuid) {
28+
boolean result = false;
29+
final Boolean state = TAGGED.get(uuid);
30+
if (state != null) {
31+
result = state;
32+
}
33+
return result;
34+
}
35+
36+
@EventHandler
37+
public void onDamage(final EntityDamageByEntityEvent event) {
38+
final ArrayList<UUID> ids = new ArrayList<>();
39+
if (event.getEntity() instanceof Player) {
40+
ids.add(event.getEntity().getUniqueId());
41+
}
42+
if (event.getDamager() instanceof Player) {
43+
ids.add(event.getDamager().getUniqueId());
44+
}
45+
for (final UUID uuid : ids) {
46+
TAGGED.put(uuid, true);
47+
final BukkitRunnable run = UNTAGGERS.get(uuid);
48+
if (run != null) {
49+
run.cancel();
50+
}
51+
UNTAGGERS.put(uuid, new BukkitRunnable() {
52+
@Override
53+
public void run() {
54+
TAGGED.put(uuid, false);
55+
new BukkitRunnable() {
56+
@Override
57+
public void run() {
58+
// TODO コード修正
59+
final Map<UUID, Entity> combatPlayers = EventListener.combatPlayers;
60+
if (combatPlayers.containsKey(uuid)) {
61+
combatPlayers.get(uuid).remove();
62+
combatPlayers.remove(uuid);
63+
}
64+
}
65+
}.runTaskLater(TheJpsPit.getInstance(), delay * 20L);
66+
}
67+
});
68+
UNTAGGERS.get(uuid).runTaskLater(TheJpsPit.getInstance(), delay * 20L);
69+
}
70+
}
71+
72+
@EventHandler
73+
public void onDeath(final PlayerDeathEvent event) {
74+
final UUID uuid = event.getEntity().getUniqueId();
75+
TAGGED.remove(uuid);
76+
final BukkitRunnable runnable = UNTAGGERS.remove(uuid);
77+
if (runnable != null) {
78+
runnable.cancel();
79+
}
80+
}
81+
}

0 commit comments

Comments
 (0)