diff --git a/.gradle/8.8/checksums/checksums.lock b/.gradle/8.8/checksums/checksums.lock
index 7943a20..018a90c 100644
Binary files a/.gradle/8.8/checksums/checksums.lock and b/.gradle/8.8/checksums/checksums.lock differ
diff --git a/.gradle/8.8/checksums/md5-checksums.bin b/.gradle/8.8/checksums/md5-checksums.bin
index a7d7c97..04a4645 100644
Binary files a/.gradle/8.8/checksums/md5-checksums.bin and b/.gradle/8.8/checksums/md5-checksums.bin differ
diff --git a/.gradle/8.8/checksums/sha1-checksums.bin b/.gradle/8.8/checksums/sha1-checksums.bin
index 0351e0f..d03f75b 100644
Binary files a/.gradle/8.8/checksums/sha1-checksums.bin and b/.gradle/8.8/checksums/sha1-checksums.bin differ
diff --git a/.gradle/8.8/executionHistory/executionHistory.bin b/.gradle/8.8/executionHistory/executionHistory.bin
index 0128478..b7831c2 100644
Binary files a/.gradle/8.8/executionHistory/executionHistory.bin and b/.gradle/8.8/executionHistory/executionHistory.bin differ
diff --git a/.gradle/8.8/executionHistory/executionHistory.lock b/.gradle/8.8/executionHistory/executionHistory.lock
index cd33731..f69b781 100644
Binary files a/.gradle/8.8/executionHistory/executionHistory.lock and b/.gradle/8.8/executionHistory/executionHistory.lock differ
diff --git a/.gradle/8.8/fileHashes/fileHashes.bin b/.gradle/8.8/fileHashes/fileHashes.bin
index 504ece6..ebdba6e 100644
Binary files a/.gradle/8.8/fileHashes/fileHashes.bin and b/.gradle/8.8/fileHashes/fileHashes.bin differ
diff --git a/.gradle/8.8/fileHashes/fileHashes.lock b/.gradle/8.8/fileHashes/fileHashes.lock
index 17b970f..a2991c4 100644
Binary files a/.gradle/8.8/fileHashes/fileHashes.lock and b/.gradle/8.8/fileHashes/fileHashes.lock differ
diff --git a/.gradle/8.8/fileHashes/resourceHashesCache.bin b/.gradle/8.8/fileHashes/resourceHashesCache.bin
index 8b05ec0..5074027 100644
Binary files a/.gradle/8.8/fileHashes/resourceHashesCache.bin and b/.gradle/8.8/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index c87cdb6..d4db409 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
index e237be0..d15ee3f 100644
Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
index 578c005..101297c 100644
Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 3fd2793..835b841 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -26,5 +26,15 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 43d90fd..291078e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,7 +3,7 @@ plugins {
}
group = 'com.newt-tech'
-version = '1.10-RELEASE'
+version = '1.11-RELEASE'
repositories {
mavenCentral()
@@ -15,10 +15,14 @@ repositories {
name = "sonatype"
url = "https://oss.sonatype.org/content/groups/public/"
}
+ maven { url 'https://jitpack.io' }
}
dependencies {
compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
+ compileOnly("com.github.MilkBowl:VaultAPI:1.7") {
+ exclude group: 'org.bukkit', module: 'bukkit' // Exclude bukkit dependency
+ }
}
def targetJavaVersion = 21
diff --git a/build/classes/java/main/CoswayUtil/BlockShop$1.class b/build/classes/java/main/CoswayUtil/BlockShop$1.class
new file mode 100644
index 0000000..2cc3373
Binary files /dev/null and b/build/classes/java/main/CoswayUtil/BlockShop$1.class differ
diff --git a/build/classes/java/main/CoswayUtil/BlockShop.class b/build/classes/java/main/CoswayUtil/BlockShop.class
new file mode 100644
index 0000000..40758bb
Binary files /dev/null and b/build/classes/java/main/CoswayUtil/BlockShop.class differ
diff --git a/build/classes/java/main/CoswayUtil/CoswayUtil$1.class b/build/classes/java/main/CoswayUtil/CoswayUtil$1.class
index 81ec650..371af4c 100644
Binary files a/build/classes/java/main/CoswayUtil/CoswayUtil$1.class and b/build/classes/java/main/CoswayUtil/CoswayUtil$1.class differ
diff --git a/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$1.class b/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$1.class
index 55642bb..aee7c6b 100644
Binary files a/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$1.class and b/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$1.class differ
diff --git a/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$2.class b/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$2.class
index 3c74833..f38429d 100644
Binary files a/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$2.class and b/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$2.class differ
diff --git a/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$3.class b/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$3.class
index 1db9694..30408e1 100644
Binary files a/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$3.class and b/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$3.class differ
diff --git a/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$4.class b/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$4.class
index a64ef35..ed4b3e7 100644
Binary files a/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$4.class and b/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield$4.class differ
diff --git a/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield.class b/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield.class
index 9c7ab1a..3f4018d 100644
Binary files a/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield.class and b/build/classes/java/main/CoswayUtil/CoswayUtil$AnchorShield.class differ
diff --git a/build/classes/java/main/CoswayUtil/CoswayUtil.class b/build/classes/java/main/CoswayUtil/CoswayUtil.class
index 7269353..a5dc176 100644
Binary files a/build/classes/java/main/CoswayUtil/CoswayUtil.class and b/build/classes/java/main/CoswayUtil/CoswayUtil.class differ
diff --git a/build/classes/java/main/CoswayUtil/RapidFireBow$1.class b/build/classes/java/main/CoswayUtil/RapidFireBow$1.class
new file mode 100644
index 0000000..fef5727
Binary files /dev/null and b/build/classes/java/main/CoswayUtil/RapidFireBow$1.class differ
diff --git a/build/classes/java/main/CoswayUtil/RapidFireBow.class b/build/classes/java/main/CoswayUtil/RapidFireBow.class
new file mode 100644
index 0000000..7d55222
Binary files /dev/null and b/build/classes/java/main/CoswayUtil/RapidFireBow.class differ
diff --git a/build/libs/CoswayUtil-1.10-RELEASE.jar b/build/libs/CoswayUtil-1.10-RELEASE.jar
index b398b5f..91bb4a3 100644
Binary files a/build/libs/CoswayUtil-1.10-RELEASE.jar and b/build/libs/CoswayUtil-1.10-RELEASE.jar differ
diff --git a/build/resources/main/config.yml b/build/resources/main/config.yml
new file mode 100644
index 0000000..e835f72
--- /dev/null
+++ b/build/resources/main/config.yml
@@ -0,0 +1,34 @@
+# config.yml
+
+shop:
+ categories:
+ - name: "Building Blocks"
+ items:
+ - material: "STONE"
+ price: 1
+ display_name: "Stone"
+ - material: "WOOD"
+ price: 2
+ display_name: "Wood"
+ - material: "BRICK"
+ price: 3
+ display_name: "Brick"
+ - name: "Decorative Blocks"
+ items:
+ - material: "LANTERN"
+ price: 5
+ display_name: "Lantern"
+ - material: "PAINTING"
+ price: 10
+ display_name: "Painting"
+ - name: "Tools"
+ items:
+ - material: "WOODEN_SWORD"
+ price: 10
+ display_name: "Wooden Sword"
+ - material: "IRON_SWORD"
+ price: 20
+ display_name: "Iron Sword"
+
+pagination:
+ max_items_per_page: 45 # Max items to display per page
diff --git a/build/resources/main/plugin.yml b/build/resources/main/plugin.yml
index a7f0804..9906b40 100644
--- a/build/resources/main/plugin.yml
+++ b/build/resources/main/plugin.yml
@@ -1,9 +1,10 @@
name: CoswayUtil
-version: '1.10-RELEASE'
+version: '1.11-RELEASE'
main: CoswayUtil.CoswayUtil
description: "utility plugin for Cosway servers, a yescraft network server"
api-version: '1.21'
author: "Newt_00"
+depend: [Vault]
website: "ycs.Newt-Tech.com"
commands:
scale:
@@ -22,6 +23,18 @@ commands:
usage: "/getwand"
permission: CoswayUtil.wand
launchstick:
- description: give player a stick to use for launching themselves
- usage: /launchstick
- permission: CoswayUtil.launchStick
\ No newline at end of file
+ description: "give player a stick to use for launching themselves"
+ usage: "/launchstick"
+ permission: CoswayUtil.launchStick
+ rapidbow:
+ description: "gives player a rapid fire bow"
+ usage: "/rapidbow"
+ permission: CoswayUtil.rapidBow
+ shopbook:
+ description: "gives player shop book"
+ usage: "/shopbook"
+ permission: CoswayUtil.shop
+ blockshop:
+ description: "opens block shop"
+ usage: "/blockshop"
+ permission: CoswayUtil.shop
\ No newline at end of file
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$1.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$1.class.uniqueId8
similarity index 93%
rename from build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$1.class.uniqueId0
rename to build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$1.class.uniqueId8
index 81ec650..06db858 100644
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$1.class.uniqueId0 and b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$1.class.uniqueId8 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$1.class.uniqueId9 b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$1.class.uniqueId19
similarity index 91%
rename from build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$1.class.uniqueId9
rename to build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$1.class.uniqueId19
index 55642bb..3673042 100644
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$1.class.uniqueId9 and b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$1.class.uniqueId19 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$2.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$2.class.uniqueId10
similarity index 93%
rename from build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$2.class.uniqueId3
rename to build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$2.class.uniqueId10
index 3c74833..8ff578a 100644
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$2.class.uniqueId3 and b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$2.class.uniqueId10 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$3.class.uniqueId6 b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$3.class.uniqueId5
similarity index 88%
rename from build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$3.class.uniqueId6
rename to build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$3.class.uniqueId5
index 1db9694..672e6d8 100644
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$3.class.uniqueId6 and b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$3.class.uniqueId5 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$4.class.uniqueId5 b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$4.class.uniqueId3
similarity index 94%
rename from build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$4.class.uniqueId5
rename to build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$4.class.uniqueId3
index a64ef35..009949e 100644
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$4.class.uniqueId5 and b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield$4.class.uniqueId3 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield.class.uniqueId7 b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield.class.uniqueId14
similarity index 88%
rename from build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield.class.uniqueId7
rename to build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield.class.uniqueId14
index 9c7ab1a..6fd1018 100644
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield.class.uniqueId7 and b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil$AnchorShield.class.uniqueId14 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil.class.uniqueId2
deleted file mode 100644
index 7269353..0000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil.class.uniqueId2 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil.class.uniqueId9 b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil.class.uniqueId9
new file mode 100644
index 0000000..220d6ea
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/CoswayUtil.class.uniqueId9 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/GiveWandCommand.class.uniqueId8 b/build/tmp/compileJava/compileTransaction/stash-dir/GiveWandCommand.class.uniqueId15
similarity index 100%
rename from build/tmp/compileJava/compileTransaction/stash-dir/GiveWandCommand.class.uniqueId8
rename to build/tmp/compileJava/compileTransaction/stash-dir/GiveWandCommand.class.uniqueId15
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/GravityGauntlet.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/GravityGauntlet.class.uniqueId0
new file mode 100644
index 0000000..d11403e
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/GravityGauntlet.class.uniqueId0 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand$1.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand$1.class.uniqueId1
deleted file mode 100644
index 96ec75c..0000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand$1.class.uniqueId1 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand$1.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand$1.class.uniqueId2
new file mode 100644
index 0000000..b7b9dbf
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand$1.class.uniqueId2 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand.class.uniqueId11
similarity index 55%
rename from build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand.class.uniqueId4
rename to build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand.class.uniqueId11
index b963dfa..af0dcbb 100644
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand.class.uniqueId4 and b/build/tmp/compileJava/compileTransaction/stash-dir/MobLevitationWand.class.uniqueId11 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/PhantomDodge$1.class.uniqueId16 b/build/tmp/compileJava/compileTransaction/stash-dir/PhantomDodge$1.class.uniqueId16
new file mode 100644
index 0000000..b8ab886
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/PhantomDodge$1.class.uniqueId16 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/PhantomDodge.class.uniqueId17 b/build/tmp/compileJava/compileTransaction/stash-dir/PhantomDodge.class.uniqueId17
new file mode 100644
index 0000000..eff2eda
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/PhantomDodge.class.uniqueId17 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ShadowStep.class.uniqueId12 b/build/tmp/compileJava/compileTransaction/stash-dir/ShadowStep.class.uniqueId12
new file mode 100644
index 0000000..b63243a
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/ShadowStep.class.uniqueId12 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/WitherContract$1.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/WitherContract$1.class.uniqueId1
new file mode 100644
index 0000000..1d9a4fa
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/WitherContract$1.class.uniqueId1 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/WitherContract$2.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/WitherContract$2.class.uniqueId4
new file mode 100644
index 0000000..ef78745
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/WitherContract$2.class.uniqueId4 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/WitherContract.class.uniqueId18 b/build/tmp/compileJava/compileTransaction/stash-dir/WitherContract.class.uniqueId18
new file mode 100644
index 0000000..6ce948a
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/WitherContract.class.uniqueId18 differ
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
index d496308..02bb6ab 100644
Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/src/main/java/CoswayUtil/BlockShop.java b/src/main/java/CoswayUtil/BlockShop.java
index e7a86e0..15f18fd 100644
--- a/src/main/java/CoswayUtil/BlockShop.java
+++ b/src/main/java/CoswayUtil/BlockShop.java
@@ -1,4 +1,166 @@
package CoswayUtil;
-public class shop {
+import net.milkbowl.vault.economy.Economy;
+import org.bukkit.*;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.event.*;
+import org.bukkit.event.block.Action;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.event.player.*;
+import org.bukkit.inventory.*;
+import org.bukkit.inventory.meta.*;
+import org.bukkit.persistence.PersistentDataType;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.*;
+
+public class BlockShop implements Listener {
+ private JavaPlugin plugin;
+ private final Economy economy;
+ private static FileConfiguration config;
+
+ private final NamespacedKey shopItemKey = new NamespacedKey("coswayutil", "block_shop_access");
+
+ public BlockShop(JavaPlugin plugin, Economy economy) {
+ this.plugin = plugin;
+ this.economy = economy;
+ }
+
+ // Method to create the special book (or other item) to open the shop
+ public static ItemStack createShopItem() {
+ ItemStack item = new ItemStack(Material.WRITTEN_BOOK); // Or use any other item
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName(ChatColor.GREEN + "Block Shop Access");
+ meta.setLore(Collections.singletonList(ChatColor.GOLD + "Right click to open the shop."));
+ meta.getPersistentDataContainer().set(new NamespacedKey("coswayutil", "block_shop_access"), PersistentDataType.STRING, "true");
+ item.setItemMeta(meta);
+ return item;
+ }
+
+
+
+ public void ShopGUI(JavaPlugin plugin) {
+ this.plugin = plugin;
+ config = plugin.getConfig();
+ }
+
+ public static void openShop(Player player, int page) {
+ Inventory shopInventory = Bukkit.createInventory(null, 54, "Shop");
+
+ // Get the categories from the config
+ List categories = config.getStringList("shop.categories");
+ int maxItemsPerPage = config.getInt("pagination.max_items_per_page");
+ int startIndex = (page - 1) * maxItemsPerPage;
+ int endIndex = startIndex + maxItemsPerPage;
+
+ // Loop through the categories
+ for (String categoryName : categories) {
+ List items = loadItemsFromCategory(categoryName);
+
+ // Calculate the correct number of items for pagination
+ for (int i = startIndex; i < endIndex && i < items.size(); i++) {
+ ItemStack item = items.get(i);
+ shopInventory.addItem(item);
+ }
+ }
+
+ // Show inventory to the player
+ player.openInventory(shopInventory);
+ }
+
+ private static List loadItemsFromCategory(String category) {
+ List items = new ArrayList<>();
+
+ // Load items for the category from the config
+ List itemList = config.getStringList("shop.categories." + category + ".items");
+
+ for (String item : itemList) {
+ String materialName = config.getString("shop.categories." + category + ".items." + item + ".material");
+ Material material = Material.getMaterial(materialName.toUpperCase());
+ int price = config.getInt("shop.categories." + category + ".items." + item + ".price");
+ String displayName = config.getString("shop.categories." + category + ".items." + item + ".display_name");
+
+ if (material != null) {
+ ItemStack itemStack = new ItemStack(material);
+ ItemMeta meta = itemStack.getItemMeta();
+ if (meta != null) {
+ meta.setDisplayName(displayName);
+ List lore = new ArrayList<>();
+ lore.add(ChatColor.GOLD + "Price: " + price + " coins");
+ meta.setLore(lore);
+ itemStack.setItemMeta(meta);
+ items.add(itemStack);
+ }
+ }
+ }
+
+ return items;
+ }
+
+ // Helper method to add items to the shop
+ private void addItemToShop(Inventory shop, Material material, String displayName, double price) {
+ ItemStack item = new ItemStack(material);
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName(displayName);
+ meta.setLore(Collections.singletonList(ChatColor.GOLD + "Price: " + price + " currency"));
+ item.setItemMeta(meta);
+ shop.addItem(item);
+ }
+
+ // Handle item right-click to open the shop
+ @EventHandler
+ public void onItemUse(PlayerInteractEvent event) {
+ Player player = event.getPlayer();
+ ItemStack item = player.getInventory().getItemInMainHand();
+
+ if (item != null && item.hasItemMeta() && item.getItemMeta().getPersistentDataContainer().has(shopItemKey, PersistentDataType.STRING)) {
+ if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
+ openShop(player,1);
+ event.setCancelled(true); // Prevent default interaction
+ }
+ }
+ }
+
+ // Handle purchases from the shop
+ @EventHandler
+ public void onInventoryClick(InventoryClickEvent event) {
+ Player player = (Player) event.getWhoClicked();
+ InventoryView clickedInventory = event.getWhoClicked().getOpenInventory();
+
+ if (clickedInventory.getTitle().equals(ChatColor.DARK_GREEN + "Block Shop")) {
+ event.setCancelled(true); // Prevent item from being moved
+
+ ItemStack clickedItem = event.getCurrentItem();
+ if (clickedItem != null && clickedItem.getType() != Material.AIR) {
+ double price = getPrice(clickedItem);
+ if (economy.has(player, price)) {
+ economy.withdrawPlayer(player, price);
+ player.getInventory().addItem(clickedItem);
+ player.sendMessage(ChatColor.GREEN + "You bought " + clickedItem.getType() + " for " + price + " currency.");
+ } else {
+ player.sendMessage(ChatColor.RED + "You don't have enough currency to buy this.");
+ }
+ }
+ }
+ }
+
+ // Helper method to retrieve the price of an item (can be customized to use a config file for prices)
+ private double getPrice(ItemStack item) {
+ // For simplicity, we assign prices based on material name, you can use a config file for more flexibility
+ switch (item.getType()) {
+ case STONE: return 10;
+ case DIRT: return 5;
+ case OAK_PLANKS: return 15;
+ case BRICKS: return 20;
+ default: return 0;
+ }
+ }
+
+ // Register the block shop commands and events
+ public void register() {
+ plugin.getServer().getPluginManager().registerEvents(this, plugin);
+ }
}
+
diff --git a/src/main/java/CoswayUtil/CoswayUtil.java b/src/main/java/CoswayUtil/CoswayUtil.java
index 09b5208..2b596c6 100644
--- a/src/main/java/CoswayUtil/CoswayUtil.java
+++ b/src/main/java/CoswayUtil/CoswayUtil.java
@@ -7,6 +7,7 @@ import org.bukkit.block.BlockState;
import org.bukkit.block.data.type.LightningRod;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
+import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Monster;
import org.bukkit.event.EventHandler;
@@ -30,7 +31,7 @@ import org.jetbrains.annotations.NotNull;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.block.data.type.RespawnAnchor;
import CoswayUtil.GravityGauntletCommand;
-
+import net.milkbowl.vault.economy.Economy;
import java.util.HashMap;
import java.util.Map;
@@ -38,9 +39,13 @@ import java.util.Map;
public final class CoswayUtil extends JavaPlugin implements Listener {
-
+ private Economy economy;
+ private FileConfiguration config;
@Override
public void onEnable() {
+ // Create or load the configuration file
+ saveDefaultConfig(); // This creates the config file if it doesn't exist.
+ config = getConfig(); // Get the loaded configuration
serverMessage(ColorKey("&aaw sheit here we go again...."));
Bukkit.getPluginManager().registerEvents(new AnchorShield(), this);
// Start the detection loop when the plugin is enabled
@@ -73,6 +78,16 @@ public final class CoswayUtil extends JavaPlugin implements Listener {
new TotemShield(this);
// Register the ShadowStep listener
new MobLevitationWand(this);
+ if (!setupEconomy()) {
+ getLogger().severe("Vault not found or no economy provider found.");
+ getServer().getPluginManager().disablePlugin(this);
+ return;
+ }
+
+ new BlockShop(this, economy).register();
+ new BlockShop(this, economy);
+ new RapidFireBow(this);
+ getServer().getPluginManager().registerEvents(new RapidFireBow(this), this);
getServer().getPluginManager().registerEvents(new ShadowStep(this), this);
//register levitation wand
Bukkit.getPluginManager().registerEvents(new MobLevitationWand(this), this);
@@ -84,11 +99,17 @@ public final class CoswayUtil extends JavaPlugin implements Listener {
this.getCommand("gravitygauntlet").setExecutor(new GravityGauntletCommand());
this.getCommand("getwand").setExecutor(new GiveWandCommand());
getServer().getPluginManager().registerEvents(new LaunchStick(this), this);
-
-
-
}
+
+ private boolean setupEconomy() {
+ // Setup Vault economy (make sure it's enabled and available)
+ if (getServer().getPluginManager().getPlugin("Vault") != null) {
+ economy = getServer().getServicesManager().getRegistration(Economy.class).getProvider();
+ return economy != null;
+ }
+ return false;
+ }
@Override
public void onDisable() {
serverMessage(ColorKey("&cim dead, im alive but im dead...."));
@@ -104,6 +125,12 @@ public final class CoswayUtil extends JavaPlugin implements Listener {
if (cmd.getName().equalsIgnoreCase("launchstick") && sender instanceof Player player) {
player.getInventory().addItem(LaunchStick.createLaunchStick());
}
+ if (cmd.getName().equalsIgnoreCase("blockshop") && sender instanceof Player player) {
+ BlockShop.openShop(player,1);
+ }
+ if (cmd.getName().equalsIgnoreCase("shopbook") && sender instanceof Player player) {
+ player.getInventory().addItem(BlockShop.createShopItem());
+ }
if (cmd.getName().equalsIgnoreCase("throw") && sender instanceof Player player) {
Player Target = getNearestPlayer(player,10);
if(Target == null) {
diff --git a/src/main/java/CoswayUtil/RapidFireBow.java b/src/main/java/CoswayUtil/RapidFireBow.java
index 810714c..b074bdc 100644
--- a/src/main/java/CoswayUtil/RapidFireBow.java
+++ b/src/main/java/CoswayUtil/RapidFireBow.java
@@ -1,12 +1,16 @@
package CoswayUtil;
-import org.bukkit.*;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
import org.bukkit.entity.Arrow;
+import org.bukkit.entity.Entity;
+import org.bukkit.*;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
-import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.event.player.PlayerItemHeldEvent;
+import org.bukkit.event.player.PlayerSwapHandItemsEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
@@ -25,6 +29,16 @@ public class RapidFireBow implements Listener {
public RapidFireBow(CoswayUtil plugin) {
this.plugin = plugin;
}
+ public void removeGroundedArrows() {
+ for (World world : Bukkit.getWorlds()) {
+ for (Arrow arrow : world.getEntitiesByClass(Arrow.class)) {
+ if (arrow.isOnGround()) {
+ arrow.remove();
+ }
+ }
+ }
+ }
+
@EventHandler
public void onRightClick(PlayerInteractEvent event) {
@@ -37,6 +51,8 @@ public class RapidFireBow implements Listener {
// If the player is already shooting, do nothing
if (shootingTasks.containsKey(player.getUniqueId())) return;
+
+
// Start firing arrows every tick
BukkitRunnable task = new BukkitRunnable() {
@Override
@@ -62,8 +78,14 @@ public class RapidFireBow implements Listener {
shootingTasks.put(player.getUniqueId(), task);
}
+ // Stop shooting when the player switches item or swaps hands
@EventHandler
- public void onPlayerQuit(PlayerQuitEvent event) {
+ public void onItemSwitch(PlayerItemHeldEvent event) {
+ stopShooting(event.getPlayer());
+ }
+
+ @EventHandler
+ public void onSwapHands(PlayerSwapHandItemsEvent event) {
stopShooting(event.getPlayer());
}
@@ -83,6 +105,7 @@ public class RapidFireBow implements Listener {
if (shootingTasks.containsKey(playerId)) {
shootingTasks.get(playerId).cancel();
shootingTasks.remove(playerId);
+ removeGroundedArrows();
}
}
@@ -90,7 +113,7 @@ public class RapidFireBow implements Listener {
ItemStack bow = new ItemStack(Material.BOW);
ItemMeta meta = bow.getItemMeta();
meta.setDisplayName(ChatColor.GOLD + "Rapid-Fire Bow");
- meta.setLore(Collections.singletonList(ChatColor.RED + "Hold Right-Click to unleash rapid arrows!"));
+ meta.setLore(Collections.singletonList(ChatColor.RED + "Press Right-Click to unleash rapid arrows! Switch hands to stop."));
meta.getPersistentDataContainer().set(new NamespacedKey("coswayutil", "rapid_fire_bow"), PersistentDataType.STRING, "true");
bow.setItemMeta(meta);
return bow;
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index e69de29..e835f72 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -0,0 +1,34 @@
+# config.yml
+
+shop:
+ categories:
+ - name: "Building Blocks"
+ items:
+ - material: "STONE"
+ price: 1
+ display_name: "Stone"
+ - material: "WOOD"
+ price: 2
+ display_name: "Wood"
+ - material: "BRICK"
+ price: 3
+ display_name: "Brick"
+ - name: "Decorative Blocks"
+ items:
+ - material: "LANTERN"
+ price: 5
+ display_name: "Lantern"
+ - material: "PAINTING"
+ price: 10
+ display_name: "Painting"
+ - name: "Tools"
+ items:
+ - material: "WOODEN_SWORD"
+ price: 10
+ display_name: "Wooden Sword"
+ - material: "IRON_SWORD"
+ price: 20
+ display_name: "Iron Sword"
+
+pagination:
+ max_items_per_page: 45 # Max items to display per page
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 12b2131..093b757 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -4,6 +4,7 @@ main: CoswayUtil.CoswayUtil
description: "utility plugin for Cosway servers, a yescraft network server"
api-version: '1.21'
author: "Newt_00"
+depend: [Vault]
website: "ycs.Newt-Tech.com"
commands:
scale:
@@ -22,10 +23,18 @@ commands:
usage: "/getwand"
permission: CoswayUtil.wand
launchstick:
- description: give player a stick to use for launching themselves
- usage: /launchstick
+ description: "give player a stick to use for launching themselves"
+ usage: "/launchstick"
permission: CoswayUtil.launchStick
rapidbow:
- description: gives player a rapid fire bow
- usage: /rapidbow
- permission: CoswayUtil.rapidBow
\ No newline at end of file
+ description: "gives player a rapid fire bow"
+ usage: "/rapidbow"
+ permission: CoswayUtil.rapidBow
+ shopbook:
+ description: "gives player shop book"
+ usage: "/shopbook"
+ permission: CoswayUtil.shop
+ blockshop:
+ description: "opens block shop"
+ usage: "/blockshop"
+ permission: CoswayUtil.shop
\ No newline at end of file