Skip to content

Commit a06fe51

Browse files
authored
Merge pull request #64 from Tweetzy/dev
dev merge
2 parents 0c0b930 + 7e1cacd commit a06fe51

File tree

15 files changed

+244
-35
lines changed

15 files changed

+244
-35
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
/src/test/
33
/.idea/
44
/uuids.txt
5+
/libs/

Skulls.iml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
<configuration>
66
<autoDetectTypes>
77
<platformType>MCP</platformType>
8+
<platformType>SPIGOT</platformType>
9+
<platformType>ADVENTURE</platformType>
810
</autoDetectTypes>
911
<projectReimportVersion>1</projectReimportVersion>
1012
</configuration>

pom.xml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
<artifactId>skulls</artifactId>
88

99
<name>Skulls</name>
10-
<version>3.23.0</version>
10+
<version>3.24.0</version>
1111
<packaging>jar</packaging>
1212

1313
<properties>
1414
<author>Kiran Hart</author>
1515
<jarName>Skulls-${project.version}</jarName>
1616
<main.class>${project.groupId}.${project.artifactId}.${project.name}</main.class>
1717
<java.version>16</java.version>
18-
<flight.version>3.30.0</flight.version>
18+
<flight.version>3.30.1</flight.version>
1919
<flight.path>ca.tweetzy</flight.path>
2020
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2121
</properties>
@@ -62,6 +62,11 @@
6262
<id>aikar</id>
6363
<url>https://repo.aikar.co/content/groups/aikar/</url>
6464
</repository>
65+
<repository>
66+
<id>nightexpress-releases</id>
67+
<name>NightExpress's Repository</name>
68+
<url>https://repo.nightexpressdev.com/releases</url>
69+
</repository>
6570
</repositories>
6671
<dependencies>
6772
<dependency>
@@ -110,6 +115,12 @@
110115
<version>1.1.2</version>
111116
<scope>provided</scope>
112117
</dependency>
118+
<dependency>
119+
<groupId>su.nightexpress.coinsengine</groupId>
120+
<artifactId>CoinsEngine</artifactId>
121+
<version>2.4.1</version>
122+
<scope>provided</scope>
123+
</dependency>
113124
</dependencies>
114125
<build>
115126
<finalName>${jarName}</finalName>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package ca.tweetzy.skulls.guis;
2+
3+
import ca.tweetzy.flight.gui.Gui;
4+
import ca.tweetzy.flight.settings.TranslationManager;
5+
import ca.tweetzy.flight.utils.QuickItem;
6+
7+
import ca.tweetzy.skulls.guis.abstraction.SkullsBaseGUI;
8+
import ca.tweetzy.skulls.settings.Settings;
9+
import ca.tweetzy.skulls.settings.Translations;
10+
import lombok.NonNull;
11+
import org.bukkit.entity.Player;
12+
13+
import java.util.function.Consumer;
14+
15+
public final class ConfirmGUI extends SkullsBaseGUI {
16+
17+
private final Consumer<Boolean> confirmed;
18+
19+
public ConfirmGUI(Gui parent, @NonNull Player player, @NonNull final Consumer<Boolean> confirmed) {
20+
super(parent, player, TranslationManager.string(Translations.GUI_CONFIRM_ACTION_TITLE), 3);
21+
this.confirmed = confirmed;
22+
setDefaultItem(QuickItem.bg(Settings.GUI_CONFIRM_ACTION_BACKGROUND.getItemStack()));
23+
draw();
24+
}
25+
26+
@Override
27+
protected void draw() {
28+
29+
for (int i = 1; i < 4; i++) {
30+
setButton(1, i, QuickItem
31+
.of(Settings.GUI_CONFIRM_ACTION_ITEMS_YES.getString())
32+
.name(TranslationManager.string(Translations.GUI_CONFIRM_ACTION_ITEMS_YES_NAME))
33+
.lore(TranslationManager.list(Translations.GUI_CONFIRM_ACTION_ITEMS_YES_LORE))
34+
.make(), click -> this.confirmed.accept(true));
35+
}
36+
37+
for (int i = 5; i < 8; i++) {
38+
setButton(1, i, QuickItem
39+
.of(Settings.GUI_CONFIRM_ACTION_ITEMS_NO.getString())
40+
.name(TranslationManager.string(Translations.GUI_CONFIRM_ACTION_ITEMS_NO_NAME))
41+
.lore(TranslationManager.list(Translations.GUI_CONFIRM_ACTION_ITEMS_NO_LORE))
42+
.make(), click -> this.confirmed.accept(false));
43+
}
44+
}
45+
}

src/main/java/ca/tweetzy/skulls/guis/PlayerHeadGUI.java

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import ca.tweetzy.flight.gui.events.GuiClickEvent;
2424
import ca.tweetzy.flight.settings.TranslationManager;
2525
import ca.tweetzy.flight.utils.Common;
26+
import ca.tweetzy.flight.utils.PlayerUtil;
2627
import ca.tweetzy.flight.utils.QuickItem;
2728
import ca.tweetzy.flight.utils.profiles.builder.XSkull;
2829
import ca.tweetzy.flight.utils.profiles.objects.ProfileInputType;
@@ -38,6 +39,7 @@
3839
import org.bukkit.entity.Player;
3940
import org.bukkit.event.inventory.ClickType;
4041
import org.bukkit.inventory.ItemStack;
42+
import scala.concurrent.impl.FutureConvertersImpl;
4143

4244
import java.util.ArrayList;
4345

@@ -92,26 +94,42 @@ protected void onClick(OfflinePlayer target, GuiClickEvent click) {
9294
final Player player = click.player;
9395

9496
if (click.clickType == ClickType.LEFT) {
95-
if (!Settings.CHARGE_FOR_HEADS.getBoolean()) {
96-
player.getInventory().addItem(buildHead(target));
97+
if (Settings.ASK_FOR_BUY_CONFIRM.getBoolean()) {
98+
click.manager.showGUI(click.player, new ConfirmGUI(this, click.player, confirmed -> {
99+
if (confirmed) {
100+
handleBuy(player, target);
101+
click.manager.showGUI(click.player, this);
102+
} else {
103+
click.manager.showGUI(click.player, this);
104+
}
105+
}));
97106
return;
98107
}
108+
handleBuy(player, target);
109+
}
110+
}
99111

100-
final double price = player.hasPermission("skulls.freeskulls") ? 0 : Settings.DEFAULT_PRICES_PLAYER_HEADS.getDouble();
112+
private void handleBuy(Player player, OfflinePlayer target) {
113+
if (!Settings.CHARGE_FOR_HEADS.getBoolean()) {
114+
PlayerUtil.giveItem(player, buildHead(target));
115+
return;
116+
}
101117

102-
if (price <= 0) {
103-
player.getInventory().addItem(buildHead(target));
104-
return;
105-
}
118+
final double price = player.hasPermission("skulls.freeskulls") ? 0 : Settings.DEFAULT_PRICES_PLAYER_HEADS.getDouble();
106119

107-
if (!Skulls.getEconomyManager().has(player, price)) {
108-
Common.tell(player, TranslationManager.string(Translations.NO_MONEY));
109-
return;
110-
}
120+
if (price <= 0) {
121+
PlayerUtil.giveItem(player, buildHead(target));
122+
return;
123+
}
111124

112-
Skulls.getEconomyManager().withdraw(player, price);
113-
player.getInventory().addItem(buildHead(target));
125+
if (!Skulls.getEconomyManager().has(player, price)) {
126+
Common.tell(player, TranslationManager.string(Translations.NO_MONEY));
127+
return;
114128
}
129+
130+
Skulls.getEconomyManager().withdraw(player, price);
131+
PlayerUtil.giveItem(player, buildHead(target));
132+
Common.tell(player, TranslationManager.string(Translations.PURCHASE_SUCCESS));
115133
}
116134

117135
private ItemStack buildHead(@NonNull final OfflinePlayer target) {

src/main/java/ca/tweetzy/skulls/guis/SkullsViewGUI.java

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import ca.tweetzy.flight.gui.events.GuiClickEvent;
2323
import ca.tweetzy.flight.settings.TranslationManager;
2424
import ca.tweetzy.flight.utils.Common;
25+
import ca.tweetzy.flight.utils.PlayerUtil;
2526
import ca.tweetzy.flight.utils.QuickItem;
2627
import ca.tweetzy.skulls.Skulls;
2728
import ca.tweetzy.skulls.api.enums.ViewMode;
@@ -36,6 +37,7 @@
3637
import org.bukkit.inventory.ItemStack;
3738

3839
import java.util.ArrayList;
40+
import java.util.concurrent.atomic.AtomicBoolean;
3941

4042
/**
4143
* Date Created: April 21 2022
@@ -121,25 +123,19 @@ protected void onClick(Skull skull, GuiClickEvent event) {
121123
return;
122124
}
123125

124-
if (!Settings.CHARGE_FOR_HEADS.getBoolean()) {
125-
player.getInventory().addItem(skull.getItemStack());
126+
if (Settings.ASK_FOR_BUY_CONFIRM.getBoolean()) {
127+
event.manager.showGUI(event.player, new ConfirmGUI(this, event.player, confirmed -> {
128+
if (confirmed) {
129+
handleBuy(skull);
130+
event.manager.showGUI(event.player, this);
131+
} else {
132+
event.manager.showGUI(event.player, this);
133+
}
134+
}));
126135
return;
127136
}
128137

129-
final double price = player.hasPermission("skulls.freeskulls") ? 0 : skull.getPrice();
130-
131-
if (price <= 0) {
132-
player.getInventory().addItem(skull.getItemStack());
133-
return;
134-
}
135-
136-
if (!Skulls.getEconomyManager().has(player, price)) {
137-
Common.tell(player, TranslationManager.string(Translations.NO_MONEY));
138-
return;
139-
}
140-
141-
Skulls.getEconomyManager().withdraw(player, price);
142-
player.getInventory().addItem(skull.getItemStack());
138+
handleBuy(skull);
143139
}
144140

145141
if (event.clickType == ClickType.RIGHT) {
@@ -161,6 +157,29 @@ protected void onClick(Skull skull, GuiClickEvent event) {
161157
}
162158
}
163159

160+
private void handleBuy(Skull skull) {
161+
if (!Settings.CHARGE_FOR_HEADS.getBoolean()) {
162+
PlayerUtil.giveItem(player, skull.getItemStack());
163+
return;
164+
}
165+
166+
final double price = player.hasPermission("skulls.freeskulls") ? 0 : skull.getPrice();
167+
168+
if (price <= 0) {
169+
PlayerUtil.giveItem(player, skull.getItemStack());
170+
return;
171+
}
172+
173+
if (!Skulls.getEconomyManager().has(player, price)) {
174+
Common.tell(player, TranslationManager.string(Translations.NO_MONEY));
175+
return;
176+
}
177+
178+
Skulls.getEconomyManager().withdraw(player, price);
179+
PlayerUtil.giveItem(player, skull.getItemStack());
180+
Common.tell(player, TranslationManager.string(Translations.PURCHASE_SUCCESS));
181+
}
182+
164183
@Override
165184
protected void drawFixed() {
166185
applyBackExit();
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Skulls
3+
* Copyright 2022 Kiran Hart
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
17+
*/
18+
19+
package ca.tweetzy.skulls.impl.economy;
20+
21+
import ca.tweetzy.flight.utils.Common;
22+
import ca.tweetzy.skulls.exception.CurrencyNotFoundException;
23+
import lombok.NonNull;
24+
import me.TechsCode.UltraEconomy.UltraEconomy;
25+
import me.TechsCode.UltraEconomy.objects.Account;
26+
import org.bukkit.entity.Player;
27+
import su.nightexpress.coinsengine.api.CoinsEngineAPI;
28+
import su.nightexpress.coinsengine.api.currency.Currency;
29+
30+
public final class CoinsEngineEconomy extends MultiCurrencyEconomy {
31+
32+
private final Currency currency;
33+
34+
public CoinsEngineEconomy(@NonNull final String currentName) {
35+
this.currencyName = currentName;
36+
this.currency = CoinsEngineAPI.getCurrency(this.currencyName);
37+
if (this.currency == null)
38+
throw new CurrencyNotFoundException("Could not find the currency: '" + this.currencyName + "' from " + this.getName() + ", please check spelling or if it even exists.");
39+
40+
Common.log("&aSetting up coinsengine economy provider");
41+
}
42+
43+
@Override
44+
public String getName() {
45+
return "CoinsEngine";
46+
}
47+
48+
@Override
49+
public boolean requiresExternalPlugin() {
50+
return true;
51+
}
52+
53+
@Override
54+
public boolean has(@NonNull Player player, double amount) {
55+
if (currency == null || this.currencyName == null)
56+
return false;
57+
58+
double balance = CoinsEngineAPI.getBalance(player, this.currency);
59+
60+
return balance >= amount;
61+
}
62+
63+
@Override
64+
public void withdraw(@NonNull Player player, double amount) {
65+
if (currency == null || this.currencyName == null)
66+
return;
67+
68+
CoinsEngineAPI.removeBalance(player, this.currency, amount);
69+
}
70+
71+
@Override
72+
public void deposit(@NonNull Player player, double amount) {
73+
if (currency == null || this.currencyName == null)
74+
return;
75+
76+
CoinsEngineAPI.addBalance(player, this.currency, amount);
77+
}
78+
}

src/main/java/ca/tweetzy/skulls/impl/economy/UltraEconomyEconomy.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package ca.tweetzy.skulls.impl.economy;
2020

21+
import ca.tweetzy.flight.utils.Common;
2122
import ca.tweetzy.skulls.exception.CurrencyNotFoundException;
2223
import lombok.NonNull;
2324
import me.TechsCode.UltraEconomy.UltraEconomy;
@@ -35,6 +36,9 @@ public UltraEconomyEconomy(@NonNull final String currentName) {
3536

3637
if (this.currency == null)
3738
throw new CurrencyNotFoundException("Could not find the currency: '" + this.currencyName + "' from " + this.getName() + ", please check spelling or if it even exists.");
39+
40+
Common.log("&aSetting up UltraEconomy economy provider");
41+
3842
}
3943

4044
@Override

src/main/java/ca/tweetzy/skulls/impl/economy/VaultEconomy.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public VaultEconomy() {
4343
}
4444

4545
this.economy = rsp.getProvider();
46+
Common.log("&aSetting up vault economy provider");
4647
}
4748

4849
@Override

src/main/java/ca/tweetzy/skulls/listeners/PlayerDeathListener.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
package ca.tweetzy.skulls.listeners;
2020

21+
import ca.tweetzy.flight.utils.Common;
22+
import ca.tweetzy.flight.utils.PlayerUtil;
2123
import ca.tweetzy.flight.utils.QuickItem;
2224
import ca.tweetzy.skulls.api.events.PlayerPreSkullDropEvent;
2325
import ca.tweetzy.skulls.api.events.PlayerSkullDropEvent;
@@ -43,7 +45,9 @@ public void onPlayerDeath(PlayerDeathEvent event) {
4345
final Player player = event.getEntity();
4446
final Random random = new Random();
4547

46-
if (random.nextDouble() * 100D < Settings.PLAYER_HEAD_DROP_CHANCE.getInt()) {
48+
final int dropChance = Math.max(Settings.PLAYER_HEAD_DROP_CHANCE.getInt(), PlayerUtil.getNumberPermission(player, "skulls.headdropchance", Settings.PLAYER_HEAD_DROP_CHANCE.getInt()));
49+
50+
if (random.nextDouble() * 100D < dropChance) {
4751
final Location dropLocation = player.getLocation();
4852
final ItemStack skull = QuickItem.of(player).name(Settings.PLAYER_HEAD_NAME.getString().replace("%player_name%", player.getName())).make();
4953

0 commit comments

Comments
 (0)