island-experimenty-gioth
Pygot 1 month ago
parent bc92a70025
commit e6cdf545e8
  1. 27
      pom.xml
  2. 2
      src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
  3. 9
      src/main/java/xyz/soukup/ecoCraftCore/database/objects/Shop.java
  4. 107
      src/main/java/xyz/soukup/ecoCraftCore/shop/ShopAdminCommand.java
  5. 6
      src/main/java/xyz/soukup/ecoCraftCore/shop/ShopLogic.java

@ -18,6 +18,7 @@
<build>
<defaultGoal>clean package</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@ -46,6 +47,7 @@
<packages>xyz.soukup.ecoCraftCore.database.objects.**</packages>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
@ -81,10 +83,10 @@
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<filtering>false</filtering>
</resource>
</resources>
</build>
<repositories>
@ -92,24 +94,26 @@
<id>codemc-releases</id>
<url>https://repo.codemc.io/repository/maven-releases/</url>
</repository>
<repository>
<id>is-releases</id>
<url>https://repo.infernalsuite.com/repository/maven-releases/</url>
</repository>
<repository>
<id>papermc-repo</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
@ -117,44 +121,57 @@
<groupId>com.infernalsuite.asp</groupId>
<artifactId>api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.j256.ormlite</groupId>
<artifactId>ormlite-core</artifactId>
<version>6.1</version>
</dependency>
<dependency>
<groupId>com.j256.ormlite</groupId>
<artifactId>ormlite-jdbc</artifactId>
<version>6.1</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.3.0</version>
</dependency>
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.21.10-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.stefvanschie.inventoryframework</groupId>
<artifactId>IF</artifactId>
<version>0.11.6</version>
</dependency>
<dependency>
<groupId>com.github.MatrixCreations</groupId>
<artifactId>MatrixColorAPI</artifactId>
<version>v1.0.7</version>
</dependency>
<dependency>
<groupId>com.github.retrooper</groupId>
<artifactId>packetevents-spigot</artifactId>
<version>2.11.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>6.2.1</version>
</dependency>
</dependencies>
</project>

@ -27,6 +27,7 @@ import xyz.soukup.ecoCraftCore.player.OnKill;
import xyz.soukup.ecoCraftCore.player.PreparePlayer;
import xyz.soukup.ecoCraftCore.player.TeleportRequestsHandler;
import xyz.soukup.ecoCraftCore.positionMarker.MarkerCommand;
import xyz.soukup.ecoCraftCore.shop.ShopAdminCommand;
import xyz.soukup.ecoCraftCore.shop.ShopCommand;
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
import xyz.soukup.ecoCraftCore.inventory.VirtualChest;
@ -240,6 +241,7 @@ public final class EcoCraftCore extends JavaPlugin {
private void registerCommands() {
@NotNull LifecycleEventManager<@NotNull Plugin> lm = this.getLifecycleManager();
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(ShopAdminCommand.getCommand().build()));
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(ShopCommand.getCommand().build()));
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MarkerCommand.getCommand().build()));
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MoneyCommand.getCommand().build()));

@ -28,7 +28,6 @@ public class Shop {
@DatabaseField(canBeNull = false)
private String ownerType;
@DatabaseField(canBeNull = false)
private String itemName;
@ -78,6 +77,14 @@ public class Shop {
this.virtualChestID = virtualChestID;
}
public void setOwnerType(String ownerType) {
this.ownerType = ownerType;
}
public void setOwner(String username) {
this.owner = username;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}

@ -0,0 +1,107 @@
package xyz.soukup.ecoCraftCore.shop;
import com.mojang.brigadier.arguments.*;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands;
import org.bukkit.block.Chest;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import xyz.soukup.ecoCraftCore.positionMarker.MarkerEvent;
import xyz.soukup.ecoCraftCore.database.objects.Shop;
import xyz.soukup.ecoCraftCore.inventory.VirtualChest;
import xyz.soukup.ecoCraftCore.inventory.InventoryUtils;
import xyz.soukup.ecoCraftCore.messages.Messages;
import xyz.soukup.ecoCraftCore.utilities.PDC;
public class ShopAdminCommand {
public static LiteralArgumentBuilder<CommandSourceStack> getCommand() {
// Define the argument types
var amountArg = Commands.argument("amount", IntegerArgumentType.integer(1));
var buyPriceArg = Commands.argument("buy_price", FloatArgumentType.floatArg(0.0F));
var sellPriceArg = Commands.argument("sell_price", FloatArgumentType.floatArg(0.0F));
// Path: /shop <amount> ...
return Commands.literal("shop-admin")
.then(amountArg
// Branch 1: ... buy <price> [sell <price>]
.then(Commands.literal("buy")
.then(buyPriceArg
.executes(ShopAdminCommand::createShop)
.then(Commands.literal("sell")
.then(sellPriceArg.executes(ShopAdminCommand::createShop)))))
// Branch 2: ... sell <price> [buy <price>]
.then(Commands.literal("sell")
.then(sellPriceArg
.executes(ShopAdminCommand::createShop)
.then(Commands.literal("buy")
.then(buyPriceArg.executes(ShopAdminCommand::createShop))))));
}
private static int createShop(CommandContext<CommandSourceStack> ctx) {
CommandSourceStack source = ctx.getSource();
if (!(source.getSender() instanceof Player player)) {
Messages.send(source.getSender(), "generic.error.not-player");
return 0;
}
// 1. Check if blocks are marked
Chest chest = MarkerEvent.chests.get(player);
Sign sign = MarkerEvent.signs.get(player);
if (sign == null || chest == null) {
Messages.send(player, "shop.error.not-marked");
return 0;
}
// 2. Validate Item in Hand
ItemStack item = player.getInventory().getItemInMainHand();
if (item.isEmpty()) {
Messages.send(player, "shop.error.empty-hand");
return 0;
}
// 3. Check if already a shop
if (PDC.getInteger(sign, "shop") != null) {
Messages.send(player, "shop.error.already-shop");
return 0;
}
// 4. Parse Arguments Safely
int amount = ctx.getArgument("amount", Integer.class);
float buyPrice = 0.0F;
try {
buyPrice = ctx.getArgument("buy_price", Float.class);
} catch (IllegalArgumentException ignored) {}
float sellPrice = 0.0F;
try {
sellPrice = ctx.getArgument("sell_price", Float.class);
} catch (IllegalArgumentException ignored) {}
// 5. Database and PDC Logic
VirtualChest virtualChest = VirtualChest.getOrCreate(chest);
virtualChest.databaseSave();
PDC.set(chest, "virtual", virtualChest.getId());
// 6. Inventory Calculations
int freeSpace = InventoryUtils.getSpaceLeft(chest.getInventory(), item);
int stock = InventoryUtils.getCount(chest.getInventory(), item);
// 7. Final Creation
Shop shop = new Shop(player, item, stock, freeSpace, amount, buyPrice, sellPrice, virtualChest.getId());
shop.setOwnerType("admin");
shop.setOwner("admin");
shop.save();
shop.writeIntoSign(sign);
Messages.send(player, "shop.created");
return 1;
}
}

@ -219,6 +219,7 @@ public class ShopLogic implements Listener {
return;
}
boolean isAdminType = shop.getOwnerType().equals("admin");
int amount = shop.getAmount() * multiplier;
float price = shop.getPriceBuy() * multiplier;
ItemStack itemStack = shop.getItemStack();
@ -226,7 +227,7 @@ public class ShopLogic implements Listener {
Account account = Account.getOrCreate(player);
if (price > account.getBalance()){
if (!isAdminType && price > account.getBalance()){
Messages.send(player, "generic.error.no-money.self");
return;
}
@ -308,6 +309,7 @@ public class ShopLogic implements Listener {
return;
}
boolean isAdminType = shop.getOwnerType().equals("admin");
int amount = shop.getAmount() * multiplier;
float price = shop.getPriceSell() * multiplier;
ItemStack itemStack = shop.getItemStack();
@ -315,7 +317,7 @@ public class ShopLogic implements Listener {
Account account = Account.getOrCreate(shop.getOwnerType(), shop.getOwner());
if (price > account.getBalance()){
if (!isAdminType && price > account.getBalance()){
Messages.send(player, "generic.error.no-money.self");
return;
}

Loading…
Cancel
Save