Skip to content

Commit 144289c

Browse files
committed
Merge remote-tracking branch 'origin/master'
# Conflicts: # src/main/java/com/github/elic0de/thejpspit/listener/EventListener.java
2 parents 7081ef9 + 9d62d48 commit 144289c

File tree

14 files changed

+435
-46
lines changed

14 files changed

+435
-46
lines changed

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

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111
import com.github.elic0de.thejpspit.hook.EconomyHook;
1212
import com.github.elic0de.thejpspit.hook.Hook;
1313
import com.github.elic0de.thejpspit.hook.VaultEconomyHook;
14+
import com.github.elic0de.thejpspit.item.ItemManager;
15+
import com.github.elic0de.thejpspit.item.items.ItemDiamondBoots;
16+
import com.github.elic0de.thejpspit.item.items.ItemDiamondChestPlate;
17+
import com.github.elic0de.thejpspit.item.items.ItemDiamondSword;
18+
import com.github.elic0de.thejpspit.item.items.ItemObsidian;
1419
import com.github.elic0de.thejpspit.listener.CombatTagger;
1520
import com.github.elic0de.thejpspit.listener.EventListener;
1621
import com.github.elic0de.thejpspit.network.PluginMessageReceiver;
@@ -22,20 +27,23 @@
2227
import com.github.elic0de.thejpspit.task.QueueTask;
2328
import com.github.elic0de.thejpspit.util.KillAssistHelper;
2429
import com.github.elic0de.thejpspit.util.KillRatingHelper;
30+
import com.github.elic0de.thejpspit.villager.VillagerNPCManager;
31+
import com.github.elic0de.thejpspit.villager.villagers.ShopVillager;
2532
import com.google.gson.Gson;
2633
import com.google.gson.GsonBuilder;
27-
import java.util.ArrayList;
28-
import java.util.List;
29-
import java.util.Optional;
30-
import java.util.concurrent.atomic.AtomicBoolean;
31-
import java.util.logging.Level;
3234
import org.bukkit.Bukkit;
3335
import org.bukkit.GameRule;
3436
import org.bukkit.plugin.PluginManager;
3537
import org.bukkit.plugin.java.JavaPlugin;
3638

3739

3840

41+
import java.util.ArrayList;
42+
import java.util.List;
43+
import java.util.Optional;
44+
import java.util.concurrent.atomic.AtomicBoolean;
45+
import java.util.logging.Level;
46+
3947
public final class TheJpsPit extends JavaPlugin {
4048

4149
private static TheJpsPit instance;
@@ -77,7 +85,7 @@ public void onEnable() {
7785
getLogger().log(Level.INFO, "Successfully established a connection to the database");
7886
} else {
7987
throw new RuntimeException("Failed to establish a connection to the database. " +
80-
"Please check the supplied database credentials in the config file");
88+
"Please check the supplied database credentials in the config file");
8189
}
8290

8391
assistKillHelper = new KillAssistHelper();
@@ -90,10 +98,10 @@ public void onEnable() {
9098
//queueTask = new QueueTask();
9199

92100
getServer().getMessenger()
93-
.registerIncomingPluginChannel(this, PluginMessageReceiver.BUNGEE_CHANNEL_ID,
94-
new PluginMessageReceiver());
101+
.registerIncomingPluginChannel(this, PluginMessageReceiver.BUNGEE_CHANNEL_ID,
102+
new PluginMessageReceiver());
95103
getServer().getMessenger()
96-
.registerOutgoingPluginChannel(this, PluginMessageReceiver.BUNGEE_CHANNEL_ID);
104+
.registerOutgoingPluginChannel(this, PluginMessageReceiver.BUNGEE_CHANNEL_ID);
97105

98106
registerCommands();
99107
registerListener();
@@ -106,6 +114,9 @@ public void onEnable() {
106114
world.setGameRule(GameRule.KEEP_INVENTORY, true);
107115
});
108116

117+
createItems();
118+
createNPCs();
119+
109120
Bukkit.getOnlinePlayers().forEach(player -> {
110121
final Optional<PitPlayer> userData = database.getPitPlayer(player);
111122
if (userData.isEmpty()) {
@@ -170,6 +181,17 @@ private void registerHooks() {
170181
}
171182
}
172183

184+
private void createItems() {
185+
ItemManager.register(new ItemDiamondSword());
186+
ItemManager.register(new ItemDiamondChestPlate());
187+
ItemManager.register(new ItemDiamondBoots());
188+
ItemManager.register(new ItemObsidian());
189+
}
190+
191+
private void createNPCs() {
192+
VillagerNPCManager.register(new ShopVillager());
193+
}
194+
173195
@Override
174196
public void onDisable() {
175197
pitPreferences.ifPresent(preferences -> database.updatePitPreferences(preferences));
@@ -209,9 +231,9 @@ private void loadHooks() {
209231

210232
private <T extends Hook> Optional<T> getHook(Class<T> hookClass) {
211233
return getHooks().stream()
212-
.filter(hook -> hookClass.isAssignableFrom(hook.getClass()))
213-
.map(hookClass::cast)
214-
.findFirst();
234+
.filter(hook -> hookClass.isAssignableFrom(hook.getClass()))
235+
.map(hookClass::cast)
236+
.findFirst();
215237
}
216238

217239
public Optional<EconomyHook> getEconomyHook() {
@@ -225,6 +247,7 @@ public Game getGame() {
225247
public Database getDatabase() {
226248
return database;
227249
}
250+
228251
public KillRatingHelper getRatingHelper() {
229252
return ratingHelper;
230253
}

src/main/java/com/github/elic0de/thejpspit/command/PitCommand.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.github.elic0de.thejpspit.TheJpsPit;
1010
import com.github.elic0de.thejpspit.player.PitPlayer;
1111
import com.github.elic0de.thejpspit.player.PitPlayerManager;
12+
import com.github.elic0de.thejpspit.villager.VillagerNPCManager;
1213
import org.bukkit.entity.Player;
1314

1415
@CommandAlias("pit|tjp|p")
@@ -40,4 +41,10 @@ public void onReset(Player player) {
4041
public void onSetSpawn(Player player) {
4142
pit.getPitPreferences().ifPresent(pitPreferences -> pitPreferences.setSpawn(player.getLocation()));
4243
}
44+
45+
@Subcommand("shop")
46+
@CommandPermission("tjp.shop")
47+
public void onCreateShop(Player player) {
48+
VillagerNPCManager.getVillagerNPC("shop").spawnAt(player.getWorld(), player.getLocation());
49+
}
4350
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.github.elic0de.thejpspit.gui;
2+
3+
import com.github.elic0de.thejpspit.TheJpsPit;
4+
import com.github.elic0de.thejpspit.hook.EconomyHook;
5+
import com.github.elic0de.thejpspit.item.ItemManager;
6+
import com.github.elic0de.thejpspit.item.PitItem;
7+
import com.github.elic0de.thejpspit.player.PitPlayer;
8+
import com.github.elic0de.thejpspit.player.PitPlayerManager;
9+
import de.themoep.inventorygui.DynamicGuiElement;
10+
import de.themoep.inventorygui.InventoryGui;
11+
import de.themoep.inventorygui.StaticGuiElement;
12+
import org.bukkit.entity.Player;
13+
import org.bukkit.inventory.Inventory;
14+
15+
import java.math.BigDecimal;
16+
17+
public class ShopMenu {
18+
19+
private static final String[] MENU_LAYOUT = {
20+
" ",
21+
" 1234 ",
22+
" ",
23+
};
24+
25+
private final InventoryGui menu;
26+
27+
private ShopMenu(TheJpsPit plugin, String title) {
28+
this.menu = new InventoryGui(plugin, title, MENU_LAYOUT);
29+
this.menu.addElement(getItemElement('1', ItemManager.getPitItem("diamond_sword")));
30+
this.menu.addElement(getItemElement('2', ItemManager.getPitItem("diamond_chestplate")));
31+
this.menu.addElement(getItemElement('3', ItemManager.getPitItem("diamond_boots")));
32+
this.menu.addElement(getItemElement('4', ItemManager.getPitItem("obsidian")));
33+
}
34+
35+
public static ShopMenu create(TheJpsPit plugin, String title) {
36+
return new ShopMenu(plugin, title);
37+
}
38+
39+
private DynamicGuiElement getItemElement(char slotChar, PitItem pitItem) {
40+
return new DynamicGuiElement(slotChar, (viewer) -> {
41+
final PitPlayer pitPlayer = PitPlayerManager.getPitPlayer((Player) viewer);
42+
return new StaticGuiElement(slotChar, pitItem.getShopItem(), click -> {
43+
if (TheJpsPit.getInstance().getEconomyHook().isEmpty()) {
44+
TheJpsPit.getInstance().getLogger().warning("経済プラグインが見つかりませんでした");
45+
return true;
46+
}
47+
48+
final Player player = pitPlayer.getPlayer();
49+
final Inventory inventory = player.getInventory();
50+
final EconomyHook economyHook = TheJpsPit.getInstance().getEconomyHook().get();
51+
52+
if (!economyHook.hasMoney(pitPlayer, BigDecimal.valueOf(pitItem.getPrice()))) {
53+
pitPlayer.sendMessage("&c【PIT】所持金が足りません!");
54+
return true;
55+
}
56+
57+
if (inventory.firstEmpty() == -1) {
58+
pitPlayer.sendMessage("&c【PIT】インベントリが満杯で購入できません!");
59+
return true;
60+
}
61+
62+
economyHook.takeMoney(pitPlayer, BigDecimal.valueOf(pitItem.getPrice()));
63+
inventory.addItem(pitItem.getItemStack());
64+
player.updateInventory();
65+
66+
return true;
67+
}, pitItem.getLore());
68+
});
69+
}
70+
71+
public void show(PitPlayer player) {
72+
menu.show(player.getPlayer());
73+
}
74+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.github.elic0de.thejpspit.item;
2+
3+
import java.util.HashMap;
4+
5+
public class ItemManager {
6+
7+
public static HashMap<String, PitItem> pitItemMap = new HashMap<>();
8+
9+
public static PitItem getPitItem(String id) {
10+
return pitItemMap.get(id);
11+
}
12+
13+
public static void register(PitItem pitItem) {
14+
pitItemMap.put(pitItem.getId(), pitItem);
15+
}
16+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.github.elic0de.thejpspit.item;
2+
3+
import org.bukkit.inventory.ItemFlag;
4+
import org.bukkit.inventory.ItemStack;
5+
import org.bukkit.inventory.meta.ItemMeta;
6+
7+
import java.util.Objects;
8+
9+
public abstract class PitItem {
10+
11+
public abstract String getId();
12+
13+
public abstract ItemStack getItemStack();
14+
15+
public abstract int getPrice();
16+
17+
public abstract int getRequiredLevel();
18+
19+
public abstract String getName();
20+
21+
public ItemStack getShopItem() {
22+
ItemStack item = getItemStack().clone();
23+
ItemMeta itemMeta = Objects.requireNonNull(item.getItemMeta());
24+
itemMeta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE);
25+
itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
26+
itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
27+
item.setItemMeta(itemMeta);
28+
return item;
29+
}
30+
31+
public String[] getLore() {
32+
return new String[]{
33+
getName(),
34+
String.format("§f必要レベル: §e%d", getRequiredLevel()),
35+
String.format("§f値段: §e%d", getPrice())
36+
};
37+
}
38+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.github.elic0de.thejpspit.item.items;
2+
3+
import com.github.elic0de.thejpspit.item.PitItem;
4+
import com.github.elic0de.thejpspit.util.ItemUtil;
5+
import org.bukkit.Material;
6+
import org.bukkit.inventory.ItemStack;
7+
8+
public class ItemDiamondBoots extends PitItem {
9+
@Override
10+
public String getId() {
11+
return "diamond_boots";
12+
}
13+
14+
@Override
15+
public ItemStack getItemStack() {
16+
return ItemUtil.withUnbreakable(new ItemStack(Material.DIAMOND_BOOTS));
17+
}
18+
19+
@Override
20+
public int getPrice() {
21+
return 300;
22+
}
23+
24+
@Override
25+
public int getRequiredLevel() {
26+
return 0;
27+
}
28+
29+
@Override
30+
public String getName() {
31+
return "§aダイヤモンドの靴";
32+
}
33+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.github.elic0de.thejpspit.item.items;
2+
3+
import com.github.elic0de.thejpspit.item.PitItem;
4+
import com.github.elic0de.thejpspit.util.ItemUtil;
5+
import org.bukkit.Material;
6+
import org.bukkit.inventory.ItemStack;
7+
8+
public class ItemDiamondChestPlate extends PitItem {
9+
@Override
10+
public String getId() {
11+
return "diamond_chestplate";
12+
}
13+
14+
@Override
15+
public ItemStack getItemStack() {
16+
return ItemUtil.withUnbreakable(new ItemStack(Material.DIAMOND_CHESTPLATE));
17+
}
18+
19+
@Override
20+
public int getPrice() {
21+
return 500;
22+
}
23+
24+
@Override
25+
public int getRequiredLevel() {
26+
return 0;
27+
}
28+
29+
@Override
30+
public String getName() {
31+
return "§aダイヤのチェストプレート";
32+
}
33+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.github.elic0de.thejpspit.item.items;
2+
3+
import com.github.elic0de.thejpspit.item.PitItem;
4+
import com.github.elic0de.thejpspit.util.ItemUtil;
5+
import org.bukkit.Material;
6+
import org.bukkit.inventory.ItemStack;
7+
8+
public class ItemDiamondSword extends PitItem {
9+
10+
@Override
11+
public String getId() {
12+
return "diamond_sword";
13+
}
14+
15+
@Override
16+
public ItemStack getItemStack() {
17+
return ItemUtil.withUnbreakable(new ItemStack(Material.DIAMOND_SWORD));
18+
}
19+
20+
@Override
21+
public int getPrice() {
22+
return 150;
23+
}
24+
25+
@Override
26+
public int getRequiredLevel() {
27+
return 0;
28+
}
29+
30+
@Override
31+
public String getName() {
32+
return "§aダイヤ剣";
33+
}
34+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.github.elic0de.thejpspit.item.items;
2+
3+
import com.github.elic0de.thejpspit.item.PitItem;
4+
import org.bukkit.Material;
5+
import org.bukkit.inventory.ItemStack;
6+
7+
public class ItemObsidian extends PitItem {
8+
9+
@Override
10+
public String getId() {
11+
return "obsidian";
12+
}
13+
14+
@Override
15+
public ItemStack getItemStack() {
16+
return new ItemStack(Material.OBSIDIAN, 10);
17+
}
18+
19+
@Override
20+
public int getPrice() {
21+
return 3000;
22+
}
23+
24+
@Override
25+
public int getRequiredLevel() {
26+
return 0;
27+
}
28+
29+
@Override
30+
public String getName() {
31+
return "§a黒曜石 §fx10";
32+
}
33+
}

0 commit comments

Comments
 (0)