Skip to content

Commit eaa1d41

Browse files
authored
Merge pull request #8 from JavaJava19/develop
Develop
2 parents 2934fc8 + b4bb1ab commit eaa1d41

File tree

10 files changed

+192
-15
lines changed

10 files changed

+192
-15
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>jitpack.io</id>
74+
<url>https://jitpack.io</url>
75+
</repository>
7276
</repositories>
7377

7478
<dependencies>
@@ -106,5 +110,11 @@
106110
<version>1.7.1-SNAPSHOT</version>
107111
<scope>compile</scope>
108112
</dependency>
113+
<dependency>
114+
<groupId>com.github.MilkBowl</groupId>
115+
<artifactId>VaultAPI</artifactId>
116+
<version>1.7</version>
117+
<scope>provided</scope>
118+
</dependency>
109119
</dependencies>
110120
</project>

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

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
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.hook.EconomyHook;
9+
import com.github.elic0de.thejpspit.hook.Hook;
10+
import com.github.elic0de.thejpspit.hook.VaultEconomyHook;
811
import com.github.elic0de.thejpspit.listener.CombatTagger;
912
import com.github.elic0de.thejpspit.listener.EventListener;
1013
import com.github.elic0de.thejpspit.network.PluginMessageReceiver;
@@ -14,12 +17,20 @@
1417
import com.github.elic0de.thejpspit.task.QueueTask;
1518
import com.github.elic0de.thejpspit.util.killAssistHelper.KillAssistHelper;
1619
import com.github.elic0de.thejpspit.util.KillRatingHelper;
20+
import java.util.ArrayList;
21+
import java.util.List;
1722
import java.util.Optional;
1823
import java.util.concurrent.atomic.AtomicBoolean;
1924
import java.util.logging.Level;
2025
import org.bukkit.Bukkit;
2126
import org.bukkit.GameRule;
27+
import org.bukkit.entity.Player;
28+
import org.bukkit.plugin.PluginManager;
2229
import org.bukkit.plugin.java.JavaPlugin;
30+
import org.bukkit.scoreboard.Scoreboard;
31+
import org.bukkit.scoreboard.Team;
32+
import org.bukkit.scoreboard.Team.Option;
33+
import org.bukkit.scoreboard.Team.OptionStatus;
2334

2435
public final class TheJpsPit extends JavaPlugin {
2536

@@ -29,6 +40,10 @@ public final class TheJpsPit extends JavaPlugin {
2940
private KillRatingHelper ratingHelper;
3041
private QueueManager queueManager;
3142
private QueueTask queueTask;
43+
private List<Hook> hooks = new ArrayList<>();
44+
45+
private final Scoreboard scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
46+
private final Team team = scoreboard.registerNewTeam("pit");
3247

3348
public static TheJpsPit getInstance() {
3449
return instance;
@@ -46,6 +61,8 @@ public void onEnable() {
4661
final AtomicBoolean initialized = new AtomicBoolean(true);
4762
game = new Game();
4863

64+
this.hooks = new ArrayList<>();
65+
4966
this.database = new SqLiteDatabase(this);
5067

5168
initialized.set(this.database.initialize());
@@ -59,6 +76,8 @@ public void onEnable() {
5976
ratingHelper = new KillRatingHelper(0);
6077
queueManager = new QueueManager();
6178

79+
optionScoreboard();
80+
6281
//queueTask = new QueueTask();
6382

6483
getServer().getMessenger()
@@ -69,6 +88,7 @@ public void onEnable() {
6988

7089
registerCommands();
7190
registerListener();
91+
registerHooks();
7292

7393
Bukkit.getWorlds().forEach(world -> {
7494
world.setGameRule(GameRule.DO_IMMEDIATE_RESPAWN, true);
@@ -84,11 +104,7 @@ public void onEnable() {
84104
}
85105
// Update the user's name if it has changed
86106
final PitPlayer pitPlayer = userData.get();
87-
boolean updateNeeded = false;
88-
89-
if (!pitPlayer.getName().equals(player.getName())) {
90-
updateNeeded = true;
91-
}
107+
boolean updateNeeded = !pitPlayer.getName().equals(player.getName());
92108

93109
PitPlayerManager.registerUser(pitPlayer);
94110
if (updateNeeded) {
@@ -97,6 +113,18 @@ public void onEnable() {
97113
});
98114
}
99115

116+
public void addPitTeam(Player player) {
117+
team.addEntry(player.getName());
118+
}
119+
120+
public void removePitTeam(Player player) {
121+
team.removeEntry(player.getName());
122+
}
123+
124+
private void optionScoreboard() {
125+
team.setOption(Option.COLLISION_RULE, OptionStatus.NEVER);
126+
}
127+
100128
private void registerCommands() {
101129
PaperCommandManager commandManager = new PaperCommandManager(this);
102130

@@ -111,6 +139,13 @@ private void registerListener() {
111139
new KillAssistHelper();
112140
}
113141

142+
private void registerHooks() {
143+
final PluginManager plugins = Bukkit.getPluginManager();
144+
if (plugins.getPlugin("Vault") != null) {
145+
this.registerHook(new VaultEconomyHook(this));
146+
}
147+
}
148+
114149
@Override
115150
public void onDisable() {
116151
// Plugin shutdown logic
@@ -134,6 +169,30 @@ public void onDisable() {
134169
Bukkit.getScheduler().cancelTasks(this);
135170
}
136171

172+
private List<Hook> getHooks() {
173+
return hooks;
174+
}
175+
176+
private void registerHook(Hook hook) {
177+
getHooks().add(hook);
178+
}
179+
180+
private void loadHooks() {
181+
getHooks().stream().filter(Hook::isNotEnabled).forEach(Hook::enable);
182+
getLogger().log(Level.INFO, "Successfully loaded " + getHooks().size() + " hooks");
183+
}
184+
185+
private <T extends Hook> Optional<T> getHook(Class<T> hookClass) {
186+
return getHooks().stream()
187+
.filter(hook -> hookClass.isAssignableFrom(hook.getClass()))
188+
.map(hookClass::cast)
189+
.findFirst();
190+
}
191+
192+
public Optional<EconomyHook> getEconomyHook() {
193+
return getHook(EconomyHook.class);
194+
}
195+
137196
public Game getGame() {
138197
return game;
139198
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.github.elic0de.thejpspit.hook;
2+
3+
import com.github.elic0de.thejpspit.TheJpsPit;
4+
import com.github.elic0de.thejpspit.player.PitPlayer;
5+
import java.math.BigDecimal;
6+
7+
public abstract class EconomyHook extends Hook {
8+
9+
protected EconomyHook(TheJpsPit plugin, String name) {
10+
super(plugin, name);
11+
}
12+
13+
public abstract boolean hasMoney(PitPlayer player, BigDecimal amount);
14+
15+
public abstract void takeMoney(PitPlayer player, BigDecimal amount);
16+
17+
public abstract void giveMoney(PitPlayer player, BigDecimal amount);
18+
19+
public abstract String formatMoney(BigDecimal amount);
20+
21+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.github.elic0de.thejpspit.hook;
2+
3+
import com.github.elic0de.thejpspit.TheJpsPit;
4+
5+
public abstract class Hook {
6+
7+
protected final TheJpsPit plugin;
8+
private final String name;
9+
private boolean enabled = false;
10+
11+
protected Hook(TheJpsPit plugin, String name) {
12+
this.plugin = plugin;
13+
this.name = name;
14+
}
15+
16+
protected abstract void onEnable();
17+
18+
public final void enable() {
19+
this.onEnable();
20+
this.enabled = true;
21+
}
22+
23+
public boolean isNotEnabled() {
24+
return !enabled;
25+
}
26+
27+
public String getName() {
28+
return name;
29+
}
30+
31+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.github.elic0de.thejpspit.hook;
2+
3+
import com.github.elic0de.thejpspit.TheJpsPit;
4+
import com.github.elic0de.thejpspit.player.PitPlayer;
5+
import java.math.BigDecimal;
6+
import java.util.logging.Level;
7+
import net.milkbowl.vault.economy.Economy;
8+
import org.bukkit.plugin.RegisteredServiceProvider;
9+
10+
public class VaultEconomyHook extends EconomyHook {
11+
12+
protected Economy economy;
13+
14+
public VaultEconomyHook(TheJpsPit plugin) {
15+
super(plugin, "Vault");
16+
}
17+
18+
@Override
19+
public void onEnable() throws IllegalStateException {
20+
final RegisteredServiceProvider<Economy> economyProvider = plugin.getServer()
21+
.getServicesManager().getRegistration(Economy.class);
22+
if (economyProvider == null) {
23+
throw new IllegalStateException("Could not resolve Vault economy provider");
24+
}
25+
this.economy = economyProvider.getProvider();
26+
plugin.getLogger().log(Level.INFO, "Enabled Vault economy hook");
27+
}
28+
29+
private BigDecimal getBalance(PitPlayer player) {
30+
return BigDecimal.valueOf(economy.getBalance(player.getPlayer()));
31+
}
32+
33+
@Override
34+
public boolean hasMoney(PitPlayer player, BigDecimal amount) {
35+
return getBalance(player).compareTo(amount) >= 0;
36+
}
37+
38+
@Override
39+
public void takeMoney(PitPlayer player, BigDecimal amount) {
40+
economy.withdrawPlayer(player.getPlayer(), amount.doubleValue());
41+
}
42+
43+
@Override
44+
public void giveMoney(PitPlayer player, BigDecimal amount) {
45+
economy.depositPlayer(player.getPlayer(), amount.doubleValue());
46+
}
47+
48+
@Override
49+
public String formatMoney(BigDecimal amount) {
50+
return economy.format(amount.doubleValue());
51+
}
52+
53+
}

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,7 @@ public void onJoin(PlayerJoinEvent event) {
6060
}
6161
// Update the user's name if it has changed
6262
final PitPlayer pitPlayer = userData.get();
63-
boolean updateNeeded = false;
64-
65-
if (!pitPlayer.getName().equals(player.getName())) {
66-
updateNeeded = true;
67-
}
63+
boolean updateNeeded = !pitPlayer.getName().equals(player.getName());
6864

6965
PitPlayerManager.registerUser(pitPlayer);
7066
if (updateNeeded) {
@@ -76,11 +72,13 @@ public void onJoin(PlayerJoinEvent event) {
7672
player.setHealth(entity.getHealth());
7773
entity.remove();
7874
}
75+
plugin.addPitTeam(player.getPlayer());
76+
7977
}
8078

8179
@EventHandler
8280
public void onQuit(PlayerQuitEvent event) {
83-
event.setQuitMessage("");
81+
event.setQuitMessage(null);
8482

8583
final PitPlayer player = PitPlayerManager.getPitPlayer(event.getPlayer());
8684
final UUID uuid = player.getUniqueId();
@@ -100,6 +98,7 @@ public void onQuit(PlayerQuitEvent event) {
10098
if (player.getBoard() != null) {
10199
player.getBoard().delete();
102100
}
101+
plugin.removePitTeam(player.getPlayer());
103102
}
104103

105104
@EventHandler
@@ -135,7 +134,7 @@ public void onDeath(EntityDeathEvent event) {
135134
player.sendMessage("&b【PIT】%player%を倒しました(KDレート:%rating%)"
136135
.replaceAll("%player%", entity.getCustomName())
137136
.replaceAll("%rating%", vitim.getRating() + "%")
138-
);
137+
);
139138
});
140139
}
141140
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void increaseKills() {
7373

7474
public void increaseStreaks() {
7575
this.streaks ++;
76-
if (bestStreaks > streaks) {
76+
if (bestStreaks < streaks) {
7777
this.bestStreaks = streaks;
7878
}
7979
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class PitPlayer {
3030
};
3131
private final ItemStack[] ARMOR = {
3232
new ItemStack(Material.CHAINMAIL_BOOTS),
33-
new ItemStack(Material.CHAINMAIL_LEGGINGS),
33+
new ItemStack(Material.IRON_LEGGINGS),
3434
new ItemStack(Material.IRON_CHESTPLATE)
3535
};
3636
private long kills;
@@ -187,7 +187,7 @@ public double getBestRating() {
187187

188188
public void setRating(double rating) {
189189
this.rating = rating;
190-
if (bestRating > rating) {
190+
if (bestRating < rating) {
191191
this.bestRating = rating;
192192
}
193193
}

src/main/java/com/github/elic0de/thejpspit/util/KillRatingHelper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ private double calculateKillingRatio(PitPlayer player) {
2727
long deaths = player.getDeaths();
2828
long kills = player.getKills();
2929
long total = deaths + kills;
30+
if (deaths == 0) deaths++;
3031
if (deaths >= 0 && kills >= 0 && total > 0) {
3132
return round((double) kills / deaths * roundingFactor) / roundingFactor;
3233
} else {
@@ -38,6 +39,7 @@ private double calculateKillingRatio(OfflinePitPlayer player) {
3839
long deaths = player.getDeaths();
3940
long kills = player.getKills();
4041
long total = deaths + kills;
42+
if (deaths == 0) deaths++;
4143
if (deaths >= 0 && kills >= 0 && total > 0) {
4244
return round((double) kills / deaths * roundingFactor) / roundingFactor;
4345
} else {

src/main/resources/plugin.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ name: TheJpsPit
22
version: '${project.version}'
33
main: com.github.elic0de.thejpspit.TheJpsPit
44
api-version: 1.19
5+
softdepend:
6+
- Vault

0 commit comments

Comments
 (0)