mirror of
https://github.com/EpicEricEE/ShopChest.git
synced 2024-11-28 21:45:47 +01:00
Begin work for proper API
This commit is contained in:
parent
2a1375254e
commit
3684f96338
29
src/main/java/de/epiceric/shopchest/api/ShopChest.java
Normal file
29
src/main/java/de/epiceric/shopchest/api/ShopChest.java
Normal file
@ -0,0 +1,29 @@
|
||||
package de.epiceric.shopchest.api;
|
||||
|
||||
import org.bukkit.OfflinePlayer;
|
||||
|
||||
/**
|
||||
* The plugin's main entry point
|
||||
*
|
||||
* @since 1.13
|
||||
*/
|
||||
public interface ShopChest {
|
||||
|
||||
/**
|
||||
* Gets an instance of the shop manager
|
||||
*
|
||||
* @return the shop manager
|
||||
*/
|
||||
ShopManager getShopManager();
|
||||
|
||||
/**
|
||||
* Gets the amount of shops the given player is allowed to have
|
||||
* <p>
|
||||
* If the player has no shop limit {@link Integer#MAX_VALUE} is returned.
|
||||
*
|
||||
* @param player the player
|
||||
* @return the shop limit
|
||||
*/
|
||||
int getShopLimit(OfflinePlayer player);
|
||||
|
||||
}
|
134
src/main/java/de/epiceric/shopchest/api/ShopManager.java
Normal file
134
src/main/java/de/epiceric/shopchest/api/ShopManager.java
Normal file
@ -0,0 +1,134 @@
|
||||
package de.epiceric.shopchest.api;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.World;
|
||||
|
||||
import de.epiceric.shopchest.api.event.ShopReloadEvent;
|
||||
import de.epiceric.shopchest.api.exceptions.ChestNotFoundException;
|
||||
import de.epiceric.shopchest.api.exceptions.NoSpaceAboveChestException;
|
||||
import de.epiceric.shopchest.api.shop.Shop;
|
||||
import de.epiceric.shopchest.api.shop.ShopProduct;
|
||||
|
||||
/**
|
||||
* Collection of methods to get, add or remove shops
|
||||
*
|
||||
* @since 1.13
|
||||
*/
|
||||
public interface ShopManager {
|
||||
|
||||
/**
|
||||
* Gets all shops
|
||||
*
|
||||
* @return a collection of shops
|
||||
*/
|
||||
Collection<Shop> getShops();
|
||||
|
||||
/**
|
||||
* Gets the shop by its ID
|
||||
*
|
||||
* @param id the shop's ID
|
||||
* @return the shop or an empty optional if there is no shop
|
||||
* @since 1.13
|
||||
*/
|
||||
Optional<Shop> getShop(int id);
|
||||
|
||||
/**
|
||||
* Gets the shop at the given location
|
||||
*
|
||||
* @param location the shop's chest location
|
||||
* @return the shop or an empty optional if there is no shop
|
||||
* @since 1.13
|
||||
*/
|
||||
Optional<Shop> getShop(Location location);
|
||||
|
||||
/**
|
||||
* Gets all shops by the given player
|
||||
*
|
||||
* @param vendor the player
|
||||
* @return a collection of shops
|
||||
* @since 1.13
|
||||
*/
|
||||
Collection<Shop> getShops(OfflinePlayer vendor);
|
||||
|
||||
/**
|
||||
* Gets all shops in the given world
|
||||
*
|
||||
* @param world the world
|
||||
* @return a collection of shops
|
||||
* @since 1.13
|
||||
*/
|
||||
Collection<Shop> getShops(World world);
|
||||
|
||||
/**
|
||||
* Creates a shop and adds it to the database
|
||||
* <p>
|
||||
* When {@code buyPrice} is zero, a player cannot buy from the shop.
|
||||
* When {@code sellPrice} is zero, a player cannot sell to the shop.
|
||||
* You cannot have {@code buyPrice} and {@code sellPrice} be zero.
|
||||
*
|
||||
* @param vendor the shop's vendor
|
||||
* @param product the shop's product
|
||||
* @param location the shop's chest location.
|
||||
* Can be either chest if it's on a double chest
|
||||
* @param buyPrice the price a player can buy the product for.
|
||||
* @param sellPrice the price a player can sell the product for.
|
||||
* @throws ChestNotFoundException when there is no chest at the given location
|
||||
* @throws NoSpaceAboveChestException when there is no empty space above the chest
|
||||
* @return the shop if created successfully or an empty optional if not
|
||||
* @since 1.13
|
||||
* @see ShopManager#addAdminShop(ShopProduct, Location, double, double)
|
||||
*/
|
||||
Shop addShop(OfflinePlayer vendor, ShopProduct product, Location location, double buyPrice, double sellPrice)
|
||||
throws ChestNotFoundException, NoSpaceAboveChestException;
|
||||
|
||||
/**
|
||||
* Creates an admin shop and adds it to the database
|
||||
* <p>
|
||||
* When {@code buyPrice} is zero, a player cannot buy from the shop.
|
||||
* When {@code sellPrice} is zero, a player cannot sell to the shop.
|
||||
* You cannot have {@code buyPrice} and {@code sellPrice} be zero.
|
||||
*
|
||||
* @param product the shop's product
|
||||
* @param location the shop's chest location.
|
||||
* Can be either chest if it's on a double chest
|
||||
* @param buyPrice the price a player can buy the product for.
|
||||
* @param sellPrice the price a player can sell the product for.
|
||||
* @throws ChestNotFoundException when there is no chest at the given location
|
||||
* @throws NoSpaceAboveChestException when there is no empty space above the chest
|
||||
* @return the created admin shop
|
||||
* @since 1.13
|
||||
* @see ShopManager#addShop(OfflinePlayer, ShopProduct, Location, double, double)
|
||||
*/
|
||||
Shop addAdminShop(ShopProduct product, Location location, double buyPrice, double sellPrice)
|
||||
throws ChestNotFoundException, NoSpaceAboveChestException;
|
||||
|
||||
/**
|
||||
* Removes a shop from the database
|
||||
*
|
||||
* @param shop the shop to remove
|
||||
* @since 1.13
|
||||
*/
|
||||
void removeShop(Shop shop);
|
||||
|
||||
/**
|
||||
* Removes a shop from the database by its ID
|
||||
*
|
||||
* @param shopId the id of the shop to remove
|
||||
* @since 1.13
|
||||
*/
|
||||
void removeShop(int shopId);
|
||||
|
||||
/**
|
||||
* Asynchronously reloads all shops from the database
|
||||
* <p>
|
||||
* This does not trigger the {@link ShopReloadEvent}.
|
||||
*
|
||||
* @since 1.13
|
||||
*/
|
||||
void reloadShops();
|
||||
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import de.epiceric.shopchest.api.shop.Shop;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
|
||||
/**
|
||||
* Called when a player buys or sells something from or to a shop
|
||||
*/
|
||||
public class ShopBuySellEvent extends ShopEvent implements Cancellable {
|
||||
private Type type;
|
||||
private int amount;
|
||||
private double price;
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopBuySellEvent(Player player, Shop shop, Type type, int amount, double price) {
|
||||
super(player, shop);
|
||||
this.type = type;
|
||||
this.amount = amount;
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Whether the player buys or sells something
|
||||
*/
|
||||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The amount which might be modified because of automatic item amount calculation
|
||||
*/
|
||||
public int getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The price which might be modified because of automatic item amount calculation
|
||||
*/
|
||||
public double getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
|
||||
public enum Type {
|
||||
BUY,
|
||||
SELL;
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import de.epiceric.shopchest.api.shop.Shop;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
|
||||
/**
|
||||
* Called when a player creates a shop (clicks on a chest)
|
||||
*/
|
||||
public class ShopCreateEvent extends ShopEvent implements Cancellable {
|
||||
private double creationPrice;
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopCreateEvent(Player player, Shop shop, double creationPrice) {
|
||||
super(player, shop);
|
||||
this.creationPrice = creationPrice;
|
||||
}
|
||||
/**
|
||||
* @return The price the player has to pay in order to create the shop (only if the event is not cancelled)
|
||||
*/
|
||||
public double getCreationPrice() {
|
||||
return creationPrice;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
|
||||
}
|
42
src/main/java/de/epiceric/shopchest/api/event/ShopEvent.java
Normal file
42
src/main/java/de/epiceric/shopchest/api/event/ShopEvent.java
Normal file
@ -0,0 +1,42 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import de.epiceric.shopchest.api.shop.Shop;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public abstract class ShopEvent extends Event {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private Shop shop;
|
||||
private Player player;
|
||||
|
||||
public ShopEvent(Player player, Shop shop) {
|
||||
this.player = player;
|
||||
this.shop = shop;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Shop which is involved in this event
|
||||
*/
|
||||
public Shop getShop() {
|
||||
return shop;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Player who is involved in this event
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import de.epiceric.shopchest.api.shop.Shop;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
|
||||
/**
|
||||
* Called when a player extends a shop (making a chest a double chest)
|
||||
*/
|
||||
public class ShopExtendEvent extends ShopEvent implements Cancellable {
|
||||
private boolean cancelled;
|
||||
private Location newChestLocation;
|
||||
|
||||
public ShopExtendEvent(Player player, Shop shop, Location newChest) {
|
||||
super(player, shop);
|
||||
this.newChestLocation = newChest;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Location of the placed chest
|
||||
*/
|
||||
public Location getNewChestLocation() {
|
||||
return newChestLocation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import de.epiceric.shopchest.api.shop.Shop;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
|
||||
/**
|
||||
* Called when a player retrieves information about a shop (clicks on a chest)
|
||||
*/
|
||||
public class ShopInfoEvent extends ShopEvent implements Cancellable {
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopInfoEvent(Player player, Shop shop) {
|
||||
super(player, shop);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class ShopInitializedEvent extends Event {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private int amount;
|
||||
|
||||
public ShopInitializedEvent(int amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public int getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import de.epiceric.shopchest.api.shop.Shop;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
|
||||
/**
|
||||
* Called when a player opens a shop (clicks on a chest)
|
||||
*/
|
||||
public class ShopOpenEvent extends ShopEvent implements Cancellable {
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopOpenEvent(Player player, Shop shop) {
|
||||
super(player, shop);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import de.epiceric.shopchest.api.shop.ShopProduct;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
/**
|
||||
* Called when a player wants to create a shop (enters the command)
|
||||
*/
|
||||
public class ShopPreCreateEvent extends Event implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private Player player;
|
||||
private ShopProduct product;
|
||||
private double buyPrice;
|
||||
private double sellPrice;
|
||||
private boolean admin;
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopPreCreateEvent(Player player, ShopProduct product, double buyPrice, double sellPrice, boolean admin) {
|
||||
this.player = player;
|
||||
this.product = product;
|
||||
this.buyPrice = buyPrice;
|
||||
this.sellPrice = sellPrice;
|
||||
this.admin = admin;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the player
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the product
|
||||
*/
|
||||
public ShopProduct getProduct() {
|
||||
return product;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the buyPrice
|
||||
*/
|
||||
public double getBuyPrice() {
|
||||
return buyPrice;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the sellPrice
|
||||
*/
|
||||
public double getSellPrice() {
|
||||
return sellPrice;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the admin
|
||||
*/
|
||||
public boolean isAdminShop() {
|
||||
return admin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
/**
|
||||
* Called when a player wants to retrieve information about a shop (enters the command)
|
||||
*/
|
||||
public class ShopPreInfoEvent extends Event implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private Player player;
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopPreInfoEvent(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Player who is involved in this event
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
this.cancelled = cancel;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
/**
|
||||
* Called when a player wants to open a shop (enters the command)
|
||||
*/
|
||||
public class ShopPreOpenEvent extends Event implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private Player player;
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopPreOpenEvent(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Player who is involved in this event
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
this.cancelled = cancel;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
/**
|
||||
* Called when a player wants to remove a shop (enters the command)
|
||||
*/
|
||||
public class ShopPreRemoveEvent extends Event implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private Player player;
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopPreRemoveEvent(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Player who is involved in this event
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
/**
|
||||
* Called when a player reloads the shops
|
||||
*/
|
||||
public class ShopReloadEvent extends Event implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private CommandSender sender;
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopReloadEvent(CommandSender sender) {
|
||||
this.sender = sender;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Sender who triggered the reload
|
||||
*/
|
||||
public CommandSender getSender() {
|
||||
return sender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import de.epiceric.shopchest.shop.Shop;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ShopRemoveAllEvent extends Event implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private CommandSender sender;
|
||||
private OfflinePlayer vendor;
|
||||
private List<Shop> shops;
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopRemoveAllEvent(CommandSender sender, OfflinePlayer vendor, List<Shop> shops) {
|
||||
this.sender = sender;
|
||||
this.vendor = vendor;
|
||||
this.shops = shops;
|
||||
}
|
||||
|
||||
public CommandSender getSender() {
|
||||
return sender;
|
||||
}
|
||||
|
||||
public OfflinePlayer getVendor() {
|
||||
return vendor;
|
||||
}
|
||||
|
||||
public List<Shop> getShops() {
|
||||
return shops;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancelled) {
|
||||
this.cancelled = cancelled;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package de.epiceric.shopchest.api.event;
|
||||
|
||||
import de.epiceric.shopchest.api.shop.Shop;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
|
||||
/**
|
||||
* Called when a player removes a shop (clicks on a chest)
|
||||
*/
|
||||
public class ShopRemoveEvent extends ShopEvent implements Cancellable {
|
||||
private boolean cancelled;
|
||||
|
||||
public ShopRemoveEvent(Player player, Shop shop) {
|
||||
super(player, shop);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package de.epiceric.shopchest.api.exceptions;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
public class ChestNotFoundException extends Exception {
|
||||
private static final long serialVersionUID = -6446875473671870708L;
|
||||
|
||||
public ChestNotFoundException(Location location) {
|
||||
super(String.format("No chest found in world '%s' at x=%d y=%d z=%d", location.getWorld().getName(),
|
||||
location.getBlockX(), location.getBlockY(), location.getBlockZ()));
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package de.epiceric.shopchest.api.exceptions;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
public class NoSpaceAboveChestException extends Exception {
|
||||
private static final long serialVersionUID = 3718475607700458355L;
|
||||
|
||||
public NoSpaceAboveChestException(Location location) {
|
||||
super(String.format("No space above chest in world '%s' at x=%d y=%d z=%d", location.getWorld().getName(),
|
||||
location.getBlockX(), location.getBlockY(), location.getBlockZ()));
|
||||
}
|
||||
}
|
153
src/main/java/de/epiceric/shopchest/api/shop/Shop.java
Normal file
153
src/main/java/de/epiceric/shopchest/api/shop/Shop.java
Normal file
@ -0,0 +1,153 @@
|
||||
package de.epiceric.shopchest.api.shop;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
import de.epiceric.shopchest.api.ShopManager;
|
||||
|
||||
/**
|
||||
* Represents a shop
|
||||
*
|
||||
* @since 1.13
|
||||
* @see ShopManager#addShop(OfflinePlayer, ShopProduct, Location, double, double)
|
||||
* @see ShopManager#addAdminShop(ShopProduct, Location, double, double)
|
||||
*/
|
||||
public interface Shop {
|
||||
|
||||
/**
|
||||
* Gets this shop's ID
|
||||
*
|
||||
* @return the ID
|
||||
* @since 1.13
|
||||
*/
|
||||
int getId();
|
||||
|
||||
/**
|
||||
* Gets the player who created this shop
|
||||
*
|
||||
* @return the vendor
|
||||
* @since 1.13
|
||||
*/
|
||||
OfflinePlayer getVendor();
|
||||
|
||||
/**
|
||||
* Gets the product this shop is buying or selling
|
||||
*
|
||||
* @return the product
|
||||
* @since 1.13
|
||||
*/
|
||||
ShopProduct getProduct();
|
||||
|
||||
/**
|
||||
* Gets the location of this shop's chest
|
||||
* <p>
|
||||
* If the shop is on a double chest, it returns one of the chest's location.
|
||||
*
|
||||
* @return the location
|
||||
* @since 1.13
|
||||
*/
|
||||
Location getLocation();
|
||||
|
||||
/**
|
||||
* Gets the world this shop is located in
|
||||
*
|
||||
* @return the world
|
||||
* @since 1.13
|
||||
*/
|
||||
default World getWorld() {
|
||||
return getLocation().getWorld();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets whether this shop is on a double chest
|
||||
*
|
||||
* @return whether the shop is on a double chest
|
||||
* @since 1.13
|
||||
*/
|
||||
boolean isDoubleChest();
|
||||
|
||||
/**
|
||||
* Gets the inventory of this shop's chest
|
||||
*
|
||||
* @return the inventory
|
||||
* @since 1.13
|
||||
*/
|
||||
Inventory getInventory();
|
||||
|
||||
/**
|
||||
* Gets whether this shop is an admin shop
|
||||
*
|
||||
* @return whether this shop is an admin shop
|
||||
* @since 1.13
|
||||
*/
|
||||
boolean isAdminShop();
|
||||
|
||||
/**
|
||||
* Sets whether this shop is an admin shop
|
||||
*
|
||||
* @param adminShop whether this shop should be an admin shop
|
||||
* @since 1.13
|
||||
*/
|
||||
void setAdminShop(boolean adminShop);
|
||||
|
||||
/**
|
||||
* Gets the price for which a player can buy the product from this shop
|
||||
*
|
||||
* @return the buy price
|
||||
* @since 1.13
|
||||
*/
|
||||
double getBuyPrice();
|
||||
|
||||
/**
|
||||
* Sets the price for which a player can sell the product to this shop
|
||||
* <p>
|
||||
* If set to zero, a player cannot buy from this shop.
|
||||
*
|
||||
* @param buyPrice the buy price
|
||||
* @throws IllegalStateException when a player can neither buy nor sell from this shop
|
||||
* @since 1.13
|
||||
*/
|
||||
void setBuyPrice(double buyPrice);
|
||||
|
||||
/**
|
||||
* Gets whether a player can buy from this shop
|
||||
*
|
||||
* @return whether buying is enabled
|
||||
* @since 1.13
|
||||
*/
|
||||
default boolean canPlayerBuy() {
|
||||
return getBuyPrice() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the price for which a player can sell the product to this shop
|
||||
*
|
||||
* @return the sell price
|
||||
* @since 1.13
|
||||
*/
|
||||
double getSellPrice();
|
||||
|
||||
/**
|
||||
* Sets the price for which a player can sell the product to this shop
|
||||
* <p>
|
||||
* If set to zero, a player cannot sell to this shop.
|
||||
*
|
||||
* @param sellPrice the sell price
|
||||
* @throws IllegalStateException when a player can neither buy nor sell from this shop
|
||||
* @since 1.13
|
||||
*/
|
||||
void setSellPrice(double sellPrice);
|
||||
|
||||
/**
|
||||
* Gets whether a player can sell to this shop
|
||||
*
|
||||
* @return whether selling is enabled
|
||||
* @since 1.13
|
||||
*/
|
||||
default boolean canPlayerSell() {
|
||||
return getSellPrice() > 0;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package de.epiceric.shopchest.api.shop;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
/**
|
||||
* Represents the item that can be bought or sold in one transaction
|
||||
*
|
||||
* @since 1.13
|
||||
*/
|
||||
public interface ShopProduct {
|
||||
|
||||
/**
|
||||
* Gets the {@link ItemStack} with an amount of one
|
||||
*
|
||||
* @return the item
|
||||
* @since 1.13
|
||||
*/
|
||||
ItemStack getItemStack();
|
||||
|
||||
/**
|
||||
* Sets the {@link ItemStack}
|
||||
* <p>
|
||||
* The passed item stack will be cloned and its amount set to one.
|
||||
*
|
||||
* @param itemStack the item
|
||||
* @since 1.13
|
||||
*/
|
||||
void setItemStack(ItemStack itemStack);
|
||||
|
||||
/**
|
||||
* Gets the amount of items bought or sold in one transaction
|
||||
*
|
||||
* @return the amount
|
||||
* @since 1.13
|
||||
*/
|
||||
int getAmount();
|
||||
|
||||
/**
|
||||
* Sets the amount of items bought or sold in one transaction
|
||||
*
|
||||
* @param amount the amount
|
||||
* @since 1.13
|
||||
*/
|
||||
void setAmount(int amount);
|
||||
|
||||
/**
|
||||
* Gets the localized name of this product's item in the configured langauge file
|
||||
*
|
||||
* @return the localized name
|
||||
* @since 1.13
|
||||
*/
|
||||
String getLocalizedName();
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user