Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Build

on:
push:
pull_request:

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
java: [17, 21]
paper: ['1.20.6', '1.21.1']
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ matrix.java }}
cache: maven
- name: Build
run: mvn -V -B -Dpaper.version=${{ matrix.paper }} verify
35 changes: 0 additions & 35 deletions .github/workflows/maven.yml

This file was deleted.

3 changes: 3 additions & 0 deletions checkstyle.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker"/>
3 changes: 3 additions & 0 deletions pmd-rules.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="Empty ruleset" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0">
</ruleset>
92 changes: 87 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,17 @@
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>

</properties>

<repositories>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
<id>papermc</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
<repository>
<id>placeholderapi</id>
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
<repository>
<id>sonatype</id>
Expand All @@ -32,9 +37,9 @@

<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.20.6-R0.1-SNAPSHOT</version>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>${paper.version}-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand All @@ -43,6 +48,12 @@
<version>1.7.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.11.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
Expand All @@ -53,6 +64,11 @@
<artifactId>mysql-connector-j</artifactId>
<version>8.4.0</version>
</dependency>
<dependency>
<groupId>org.bstats</groupId>
<artifactId>bstats-bukkit</artifactId>
<version>3.0.2</version>
</dependency>
</dependencies>

<build>
Expand All @@ -66,6 +82,56 @@
<encoding>${maven.compiler.encoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.40.0</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
<phase>verify</phase>
</execution>
</executions>
<configuration>
<java>
<googleJavaFormat/>
</java>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<phase>verify</phase>
<goals><goal>check</goal></goals>
</execution>
</executions>
<configuration>
<configLocation>checkstyle.xml</configLocation>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.21.2</version>
<executions>
<execution>
<phase>verify</phase>
<goals><goal>check</goal></goals>
</execution>
</executions>
<configuration>
<rulesets>
<ruleset>pmd-rules.xml</ruleset>
</rulesets>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
Expand All @@ -76,8 +142,24 @@
<goals><goal>shade</goal></goals>
<configuration>
<minimizeJar>false</minimizeJar>

<relocations>
<relocation>
<pattern>org.bstats</pattern>
<shadedPattern>com.yourorg.servershop.libs.bstats</shadedPattern>
</relocation>
<relocation>
<pattern>com.zaxxer.hikari</pattern>
<shadedPattern>com.yourorg.servershop.libs.hikari</shadedPattern>
</relocation>
<relocation>
<pattern>com.mysql</pattern>
<shadedPattern>com.yourorg.servershop.libs.mysql</shadedPattern>
</relocation>
</relocations>
<createDependencyReducedPom>false</createDependencyReducedPom>
<relocations/>

</configuration>
</execution>
</executions>
Expand Down
72 changes: 55 additions & 17 deletions src/main/java/com/yourorg/servershop/ServerShopPlugin.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.yourorg.servershop;

import com.yourorg.servershop.commands.*;
import com.yourorg.servershop.config.*;
import com.yourorg.servershop.dynamic.*;
import com.yourorg.servershop.gui.MenuManager;
import com.yourorg.servershop.logging.*;
import com.yourorg.servershop.placeholder.ShopExpansion;
import com.yourorg.servershop.shop.*;
import com.yourorg.servershop.weekly.*;
import com.yourorg.servershop.dynamic.*;
import com.yourorg.servershop.config.*;
import net.milkbowl.vault.economy.Economy;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.plugin.RegisteredServiceProvider;
Expand All @@ -23,7 +25,8 @@ public final class ServerShopPlugin extends JavaPlugin {
private DynamicPricingManager dynamic;
private CategorySettings categorySettings;

@Override public void onEnable() {
@Override
public void onEnable() {
saveDefaultConfig();
saveResource("messages.yml", false);
saveResource("shop.yml", false);
Expand All @@ -33,33 +36,45 @@ public final class ServerShopPlugin extends JavaPlugin {
return;
}
this.categorySettings = new CategorySettings(this);
this.catalog = new Catalog(this); catalog.reload();
this.catalog = new Catalog(this);
catalog.reload();
this.weekly = new WeeklyShopManager(this);
this.logger = new LoggerManager(this);
this.dynamic = new DynamicPricingManager(this);
this.shopService = new ShopService(this);
this.menus = new MenuManager(this);
Bukkit.getPluginManager().registerEvents(menus, this);

int saveEvery = Math.max(1, getConfig().getInt("dynamicPricing.decay.saveEveryMinutes", 5));
Bukkit.getScheduler().runTaskTimerAsynchronously(this, dynamic::tickSaveAll, 20L * 60L * saveEvery, 20L * 60L * saveEvery);
new Metrics(this, 0);
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
new ShopExpansion(this).register();
}

int saveEvery =
Math.max(1, getConfig().getInt("dynamicPricing.decay.saveEveryMinutes", 5));
Bukkit.getScheduler()
.runTaskTimerAsynchronously(
this, dynamic::tickSaveAll, 20L * 60L * saveEvery, 20L * 60L * saveEvery);

getCommand("shop").setExecutor(new ShopCommand(this));
getCommand("sell").setExecutor(new SellCommand(this));
getCommand("sellall").setExecutor(new SellAllCommand(this));
getCommand("shoplog").setExecutor(new ShopLogCommand(this));
getCommand("weeklyshop").setExecutor(new WeeklyShopCommand(this));
getLogger().info("DynamicServerShop enabled (Importer + Admin + Category multipliers + Fuzzy Search).");
getLogger().info(
"DynamicServerShop enabled (Importer + Admin + Category multipliers + Fuzzy Search).");
}

@Override public void onDisable() {
@Override
public void onDisable() {
if (logger != null) logger.close();
if (dynamic != null) dynamic.close();
}

private boolean setupEconomy() {
if (getServer().getPluginManager().getPlugin("Vault") == null) return false;
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
RegisteredServiceProvider<Economy> rsp =
getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null) return false;
economy = rsp.getProvider();
return economy != null;
Expand All @@ -71,12 +86,35 @@ public String prefixed(String msg) {
return prefix + msg;
}

public Economy economy() { return economy; }
public Catalog catalog() { return catalog; }
public LoggerManager logger() { return logger; }
public WeeklyShopManager weekly() { return weekly; }
public MenuManager menus() { return menus; }
public ShopService shop() { return shopService; }
public DynamicPricingManager dynamic() { return dynamic; }
public CategorySettings categorySettings() { return categorySettings; }
public Economy economy() {
return economy;
}

public Catalog catalog() {
return catalog;
}

public LoggerManager logger() {
return logger;
}

public WeeklyShopManager weekly() {
return weekly;
}

public MenuManager menus() {
return menus;
}

public ShopService shop() {
return shopService;
}

public DynamicPricingManager dynamic() {
return dynamic;
}

public CategorySettings categorySettings() {
return categorySettings;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.yourorg.servershop.placeholder;

import com.yourorg.servershop.ServerShopPlugin;
import java.util.Locale;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.Material;
import org.bukkit.entity.Player;

/** Simple PlaceholderAPI expansion for shop data. */
public class ShopExpansion extends PlaceholderExpansion {
private final ServerShopPlugin plugin;

public ShopExpansion(ServerShopPlugin plugin) {
this.plugin = plugin;
}

@Override
public String getIdentifier() {
return "shop";
}

@Override
public String getAuthor() {
return String.join(", ", plugin.getDescription().getAuthors());
}

@Override
public String getVersion() {
return plugin.getDescription().getVersion();
}

@Override
public boolean canRegister() {
return true;
}

@Override
public String onPlaceholderRequest(Player player, String identifier) {
if (identifier == null) {
return null;
}
String id = identifier.toLowerCase(Locale.ROOT);
if (id.startsWith("price_")) {
String matName = id.substring("price_".length()).toUpperCase(Locale.ROOT);
Material mat = Material.matchMaterial(matName);
if (mat == null) {
return "";
}
double price = plugin.shop().priceSell(mat);
if (price < 0) {
return "";
}
return String.format(Locale.US, "%.2f", price);
}
if (id.startsWith("multiplier_")) {
String cat = identifier.substring("multiplier_".length());
double mult = plugin.categorySettings().multiplier(cat);
return String.format(Locale.US, "%.2f", mult);
}
return null;
}
}
Loading