đŦCustom storage
Create your custom storage
You can create your own storage system if the default ones do not suit you.
StorageManager manager = this.getProvider(StorageManager.class);
manager.setCustomStorage(new IStorage() {
@Override
public void updateTransaction(List<Transaction> transactions) {
// TODO Auto-generated method stub
}
@Override
public void updateItem(AuctionPlugin plugin, AuctionItem auctionItem, StorageType type) {
// TODO Auto-generated method stub
}
@Override
public void update(AuctionPlugin plugin, StorageType type) {
// TODO Auto-generated method stub
}
@Override
public void storeTransaction(Transaction transaction) {
// TODO Auto-generated method stub
}
@Override
public void saveTransactions(List<Transaction> transactions) {
// TODO Auto-generated method stub
}
@Override
public void saveItems(AuctionPlugin plugin, List<AuctionItem> auctionItems, StorageType type) {
// TODO Auto-generated method stub
}
@Override
public void saveItem(AuctionPlugin plugin, AuctionItem auctionItem, StorageType type) {
// TODO Auto-generated method stub
}
@Override
public void save(AuctionPlugin plugin) {
// TODO Auto-generated method stub
}
@Override
public void removeItem(AuctionPlugin plugin, AuctionItem auctionItem, StorageType type) {
// TODO Auto-generated method stub
}
@Override
public void load(StorageManager storageManager, AuctionPlugin plugin) {
// TODO Auto-generated method stub
}
@Override
public List<Transaction> getTransactions() {
// TODO Auto-generated method stub
return null;
}
@Override
public List<AuctionItem> getItems(AuctionPlugin plugin, StorageType type) {
// TODO Auto-generated method stub
return null;
}
});
Here is an example of use with the JsonStorage class. This class is directly the one used in the plugin, if you have questions about the API you can come on discord.
package fr.maxlego08.zauctionhouse.storage.storages;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Consumer;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import fr.maxlego08.zauctionhouse.api.AuctionItem;
import fr.maxlego08.zauctionhouse.api.AuctionPlugin;
import fr.maxlego08.zauctionhouse.api.enums.StorageType;
import fr.maxlego08.zauctionhouse.api.event.events.AuctionItemExpireEvent;
import fr.maxlego08.zauctionhouse.api.storage.IStorage;
import fr.maxlego08.zauctionhouse.api.storage.StorageManager;
import fr.maxlego08.zauctionhouse.api.transaction.Transaction;
import fr.maxlego08.zauctionhouse.api.utils.Config;
import fr.maxlego08.zauctionhouse.zcore.logger.LoggerManager;
import fr.maxlego08.zauctionhouse.zcore.utils.ZUtils;
public class JSonStorage extends ZUtils implements IStorage {
private List<AuctionItem> items = new ArrayList<>();
private List<AuctionItem> buyingItems = new ArrayList<>();
private List<AuctionItem> expiredItems = new ArrayList<>();
private List<Transaction> transactions = new ArrayList<>();
private transient Map<UUID, Long> cooldowns = new HashMap<UUID, Long>();
@Override
public void load(StorageManager manager, AuctionPlugin plugin) {
this.items.removeIf(e -> e == null);
this.buyingItems.removeIf(e -> e == null);
this.expiredItems.removeIf(e -> e == null);
this.buyingItems.forEach(e -> {
if (e == null){
return;
}
if (e != null){
e.setCanBuy(false);
}
e.setStorageType(StorageType.BUY);
});
this.expiredItems.forEach(e -> {
if (e == null){
return;
}
if (e != null){
e.setCanBuy(false);
}
e.setStorageType(StorageType.EXPIRE);
});
this.items.forEach(e -> {
if (e == null){
return;
}
e.setStorageType(StorageType.STORAGE);
});
this.purgeTransactions(Config.removeTransactionAfterSeconds, () -> {
});
}
@Override
public void saveItem(AuctionPlugin plugin, AuctionItem auctionItem, StorageType type) {
auctionItem.setStorageType(type);
switch (type) {
case BUY:
buyingItems.add(auctionItem);
break;
case EXPIRE:
expiredItems.add(auctionItem);
break;
case STORAGE:
items.add(auctionItem);
break;
default:
break;
}
}
@Override
public void removeItem(AuctionPlugin plugin, AuctionItem auctionItem, StorageType type) {
switch (type) {
case BUY:
buyingItems.remove(auctionItem);
break;
case EXPIRE:
expiredItems.remove(auctionItem);
break;
case STORAGE:
items.remove(auctionItem);
break;
default:
break;
}
}
@Override
public void saveItems(AuctionPlugin plugin, List<AuctionItem> i, StorageType type) {
switch (type) {
case BUY:
buyingItems = i;
break;
case EXPIRE:
expiredItems = i;
break;
case STORAGE:
items = i;
break;
default:
break;
}
}
@Override
public void update(AuctionPlugin plugin, StorageType type) {
switch (type) {
case BUY:
update(plugin, buyingItems, type);
break;
case EXPIRE:
update(plugin, expiredItems, type);
break;
case STORAGE:
update(plugin, items, type);
break;
default:
break;
}
}
private void update(AuctionPlugin plugin, List<AuctionItem> items, StorageType type) {
long currentMilliSecond = System.currentTimeMillis();
Iterator<AuctionItem> iterator = items.iterator();
while (iterator.hasNext()) {
AuctionItem auctionItem = iterator.next();
if (auctionItem == null)
continue;
if (System.currentTimeMillis() > auctionItem.getExpireAt() && auctionItem.getExpireAt() != -1) {
Bukkit.getScheduler().runTask(plugin, () -> {
AuctionItemExpireEvent event = new AuctionItemExpireEvent(auctionItem.getExpireAt(),
currentMilliSecond, auctionItem, type);
event.callEvent();
});
// Ajout de logger sur les informations ici !
if (type.equals(StorageType.STORAGE)) {
long expiredAt = Config.expireTime != -1 ? (System.currentTimeMillis() + (1000 * Config.expireTime))
: Config.expireTime;
auctionItem.setExpireAt(expiredAt);
auctionItem.setCanBuy(false);
saveItem(plugin, auctionItem, StorageType.EXPIRE);
iterator.remove();
String message = "x%s %s on sale by %s has just expired, it goes in the inventory of expired items.";
LoggerManager.getInstance().log(message, auctionItem.getAmount(),
getItemName(auctionItem.getItemStack()), auctionItem.getSeller().getName());
} else {
iterator.remove();
if (type.equals(StorageType.BUY)) {
String message = "x%s %s, bought by %s, has just expired, the item is definitively deleted.";
LoggerManager.getInstance().log(message, auctionItem.getAmount(),
getItemName(auctionItem.getItemStack()), auctionItem.getSeller().getName());
} else {
String message = "x%s %s, item of %s, has just expired, the item is definitively deleted.";
LoggerManager.getInstance().log(message, auctionItem.getAmount(),
getItemName(auctionItem.getItemStack()), auctionItem.getSeller().getName());
}
}
}
}
}
@Override
public List<AuctionItem> getItems(AuctionPlugin plugin, StorageType type) {
this.update(plugin, type);
switch (type) {
case BUY:
return buyingItems;
case EXPIRE:
return expiredItems;
case STORAGE:
return items;
default:
return new ArrayList<>();
}
}
@Override
public void save(AuctionPlugin plugin) {
}
@Override
public void storeTransaction(Transaction transaction, Consumer<Transaction> consumer) {
this.transactions.add(transaction);
if (consumer != null) {
consumer.accept(transaction);
}
}
@Override
public void saveTransactions(List<Transaction> transactions) {
this.transactions = transactions;
}
@Override
public void updateItem(AuctionPlugin plugin, AuctionItem auctionItem, StorageType type) {
this.removeItem(plugin, auctionItem, StorageType.STORAGE);
this.saveItem(plugin, auctionItem, type);
}
@Override
public List<Transaction> getTransactions() {
return transactions;
}
@Override
public void updateTransaction(List<Transaction> transactions) {
// TODO Auto-generated method stub
}
@Override
public void purgeTransactions(long seconds, Runnable runnable) {
Iterator<Transaction> iterator = this.transactions.iterator();
while (iterator.hasNext()) {
Transaction transaction = iterator.next();
long diff = Math.abs(System.currentTimeMillis() - transaction.getDate()) / 1000;
if (diff > seconds) {
iterator.remove();
}
}
runnable.run();
}
/**
* @return the items
*/
public List<AuctionItem> getItems() {
return items;
}
/**
* @return the buyingItems
*/
public List<AuctionItem> getBuyingItems() {
return buyingItems;
}
/**
* @return the expiredItems
*/
public List<AuctionItem> getExpiredItems() {
return expiredItems;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "JSonStorage [items=" + items + ", buyingItems=" + buyingItems + ", expiredItems=" + expiredItems
+ ", transactions=" + transactions + "]";
}
@Override
public void fetchClaimMoney(Player player, Consumer<List<Transaction>> object) {
// TODO Auto-generated method stub
}
@Override
public boolean isCooldown(UUID uniqueId) {
long expiredAt = this.cooldowns.getOrDefault(uniqueId, 0l);
if (expiredAt > System.currentTimeMillis()) {
return true;
}
this.cooldowns.put(uniqueId, System.currentTimeMillis() + (1000 * Config.cooldownClickMilliseconds));
return false;
}
/**
* @return the cooldowns
*/
public Map<UUID, Long> getCooldowns() {
return cooldowns;
}
/**
* @param items the items to set
*/
public void setItems(List<AuctionItem> items) {
this.items = items;
}
/**
* @param buyingItems the buyingItems to set
*/
public void setBuyingItems(List<AuctionItem> buyingItems) {
this.buyingItems = buyingItems;
}
/**
* @param expiredItems the expiredItems to set
*/
public void setExpiredItems(List<AuctionItem> expiredItems) {
this.expiredItems = expiredItems;
}
/**
* @param transactions the transactions to set
*/
public void setTransactions(List<Transaction> transactions) {
this.transactions = transactions;
}
/**
* @param cooldowns the cooldowns to set
*/
public void setCooldowns(Map<UUID, Long> cooldowns) {
this.cooldowns = cooldowns;
}
}
Last updated