Implement itemcase shop variables.
This commit is contained in:
parent
419ec715d9
commit
98e2032182
@ -33,6 +33,7 @@ import org.bukkit.event.block.BlockBreakEvent;
|
|||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||||
import org.bukkit.event.entity.ItemDespawnEvent;
|
import org.bukkit.event.entity.ItemDespawnEvent;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
@ -46,6 +47,24 @@ import org.bukkit.util.Vector;
|
|||||||
*/
|
*/
|
||||||
public final class Itemcase {
|
public final class Itemcase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Types of Itemcase.
|
||||||
|
*/
|
||||||
|
public static enum Type {
|
||||||
|
SHOWCASE,
|
||||||
|
SHOP_BUY,
|
||||||
|
SHOP_SELL,
|
||||||
|
SHOP_MULTI
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Storage types.
|
||||||
|
*/
|
||||||
|
public static enum StorageType {
|
||||||
|
FINITE,
|
||||||
|
INFINITE
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The ItemStack that this itemcase is showing.
|
* The ItemStack that this itemcase is showing.
|
||||||
*/
|
*/
|
||||||
@ -76,16 +95,45 @@ public final class Itemcase {
|
|||||||
*/
|
*/
|
||||||
private Item displayItem;
|
private Item displayItem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This itemcase's Type.
|
||||||
|
*/
|
||||||
|
private Type type = Type.SHOWCASE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The storage type of this itemcase.
|
||||||
|
*/
|
||||||
|
private StorageType storageType = StorageType.FINITE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The storage of this itemcase.
|
||||||
|
*/
|
||||||
|
private Inventory storage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The buy price of this itemcase.
|
||||||
|
*/
|
||||||
|
private double buyPrice = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The sell price of this itemcase.
|
||||||
|
*/
|
||||||
|
private double sellPrice = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
|
* @param type The type of Itemcase.
|
||||||
* @param itemStack The ItemStack to be displayed.
|
* @param itemStack The ItemStack to be displayed.
|
||||||
* @param location The location of the itemcase.
|
* @param location The location of the itemcase.
|
||||||
* @param owner The owner of this itemcase.
|
* @param owner The owner of this itemcase.
|
||||||
*/
|
*/
|
||||||
public Itemcase(ItemStack itemStack, Location location,
|
public Itemcase(Type type, ItemStack itemStack, Location location,
|
||||||
OfflinePlayer owner) {
|
OfflinePlayer owner) {
|
||||||
|
|
||||||
|
// Set type.
|
||||||
|
this.type = type;
|
||||||
|
|
||||||
// Set item stack and ensure stack size is 1.
|
// Set item stack and ensure stack size is 1.
|
||||||
this.itemStack = itemStack.clone();
|
this.itemStack = itemStack.clone();
|
||||||
this.itemStack.setAmount(1);
|
this.itemStack.setAmount(1);
|
||||||
@ -235,6 +283,96 @@ public final class Itemcase {
|
|||||||
return this.displayItem;
|
return this.displayItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param type Type.
|
||||||
|
*/
|
||||||
|
public void setType(Type type) {
|
||||||
|
|
||||||
|
// Set type.
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Type.
|
||||||
|
*/
|
||||||
|
public Type getType() {
|
||||||
|
|
||||||
|
// Return type.
|
||||||
|
return this.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param storageType StorageType.
|
||||||
|
*/
|
||||||
|
public void setStorageType(StorageType storageType) {
|
||||||
|
|
||||||
|
// Set storage type.
|
||||||
|
this.storageType= storageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Storage Type.
|
||||||
|
*/
|
||||||
|
public StorageType getStorageType() {
|
||||||
|
|
||||||
|
// Return storage type.
|
||||||
|
return this.storageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param inventory Inventory.
|
||||||
|
*/
|
||||||
|
public void setStorage(Inventory inventory) {
|
||||||
|
|
||||||
|
// Set inventory.
|
||||||
|
this.storage = inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Inventory.
|
||||||
|
*/
|
||||||
|
public Inventory getStorage() {
|
||||||
|
|
||||||
|
// Return inventory.
|
||||||
|
return this.storage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param buyPrice Buy price.
|
||||||
|
*/
|
||||||
|
public void setBuyPrice(double buyPrice) {
|
||||||
|
|
||||||
|
// Set price.
|
||||||
|
this.buyPrice = buyPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Buy price.
|
||||||
|
*/
|
||||||
|
public double getBuyPrice() {
|
||||||
|
|
||||||
|
// Return price.
|
||||||
|
return this.buyPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param buyPrice Sell price.
|
||||||
|
*/
|
||||||
|
public void setSellPrice(double sellPrice) {
|
||||||
|
|
||||||
|
// Set price.
|
||||||
|
this.sellPrice = sellPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Sell price.
|
||||||
|
*/
|
||||||
|
public double getSellPrice() {
|
||||||
|
|
||||||
|
// Return price.
|
||||||
|
return this.sellPrice;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The default location to spawn the display item.
|
* @return The default location to spawn the display item.
|
||||||
*/
|
*/
|
||||||
|
@ -17,21 +17,24 @@ package com.gmail.bleedobsidian.itemcase.configurations;
|
|||||||
import com.gmail.bleedobsidian.itemcase.ConfigurationFile;
|
import com.gmail.bleedobsidian.itemcase.ConfigurationFile;
|
||||||
import com.gmail.bleedobsidian.itemcase.ItemCaseCore;
|
import com.gmail.bleedobsidian.itemcase.ItemCaseCore;
|
||||||
import com.gmail.bleedobsidian.itemcase.Itemcase;
|
import com.gmail.bleedobsidian.itemcase.Itemcase;
|
||||||
|
import com.gmail.bleedobsidian.itemcase.Itemcase.StorageType;
|
||||||
|
import com.gmail.bleedobsidian.itemcase.Itemcase.Type;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import org.apache.commons.multiverse.io.FileUtils;
|
import org.apache.commons.multiverse.io.FileUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A configuration file that holds all Itemcase saves for a specific world.
|
* A configuration file that holds all Itemcase saves for a specific world.
|
||||||
@ -75,6 +78,9 @@ public class WorldFile extends ConfigurationFile {
|
|||||||
// Create a unique key for this itemcase based on location.
|
// Create a unique key for this itemcase based on location.
|
||||||
String key = "itemcases." + blockX + "/" + blockY + "/" + blockZ + ".";
|
String key = "itemcases." + blockX + "/" + blockY + "/" + blockZ + ".";
|
||||||
|
|
||||||
|
// Set this Itemcase's type.
|
||||||
|
this.file.set(key + "type", itemcase.getType().name());
|
||||||
|
|
||||||
// Set this Itemcase's Owner.
|
// Set this Itemcase's Owner.
|
||||||
String uuid = itemcase.getOwner().getUniqueId().toString();
|
String uuid = itemcase.getOwner().getUniqueId().toString();
|
||||||
this.file.set(key + "owner", uuid);
|
this.file.set(key + "owner", uuid);
|
||||||
@ -83,6 +89,45 @@ public class WorldFile extends ConfigurationFile {
|
|||||||
Map<String, Object> itemstack = itemcase.getItemStack().serialize();
|
Map<String, Object> itemstack = itemcase.getItemStack().serialize();
|
||||||
this.file.set(key + "itemstack", itemstack);
|
this.file.set(key + "itemstack", itemstack);
|
||||||
|
|
||||||
|
// If itemcase is a shop.
|
||||||
|
if(itemcase.getType() != Type.SHOWCASE) {
|
||||||
|
|
||||||
|
// Set storage type.
|
||||||
|
this.file.set(key + "shop.storage-type",
|
||||||
|
itemcase.getStorageType().name());
|
||||||
|
|
||||||
|
// If shop has finite storage.
|
||||||
|
if(itemcase.getStorageType() == StorageType.FINITE) {
|
||||||
|
|
||||||
|
// Serialize inventory.
|
||||||
|
Map<String, Object> inventory =
|
||||||
|
this.serializeInventory(itemcase.getStorage());
|
||||||
|
|
||||||
|
// Set inventory.
|
||||||
|
this.file.set(key + "shop.storage", inventory);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If this itemcase buys.
|
||||||
|
if(itemcase.getType() == Type.SHOP_BUY ||
|
||||||
|
itemcase.getType() == Type.SHOP_MULTI) {
|
||||||
|
|
||||||
|
// Set buy price.
|
||||||
|
this.file.set(key + "shop.buy-price", itemcase.getBuyPrice());
|
||||||
|
}
|
||||||
|
|
||||||
|
// If this itemcase sells.
|
||||||
|
if(itemcase.getType() == Type.SHOP_SELL ||
|
||||||
|
itemcase.getType() == Type.SHOP_MULTI) {
|
||||||
|
|
||||||
|
// Set sell price.
|
||||||
|
this.file.set(key + "shop.sell-price", itemcase.getSellPrice());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Set shop section to null.
|
||||||
|
this.file.set(key + "shop", null);
|
||||||
|
}
|
||||||
|
|
||||||
// Attempt to save to file.
|
// Attempt to save to file.
|
||||||
this.save(ItemCaseCore.instance);
|
this.save(ItemCaseCore.instance);
|
||||||
}
|
}
|
||||||
@ -146,6 +191,10 @@ public class WorldFile extends ConfigurationFile {
|
|||||||
Location location = new Location(this.world, blockX, blockY,
|
Location location = new Location(this.world, blockX, blockY,
|
||||||
blockZ);
|
blockZ);
|
||||||
|
|
||||||
|
// Get type.
|
||||||
|
Type type = Itemcase.Type.valueOf(
|
||||||
|
this.file.getString(key + ".type"));
|
||||||
|
|
||||||
// Get owner.
|
// Get owner.
|
||||||
UUID uuid = UUID.fromString(this.file.getString(key + ".owner"));
|
UUID uuid = UUID.fromString(this.file.getString(key + ".owner"));
|
||||||
OfflinePlayer owner = Bukkit.getOfflinePlayer(uuid);
|
OfflinePlayer owner = Bukkit.getOfflinePlayer(uuid);
|
||||||
@ -157,7 +206,52 @@ public class WorldFile extends ConfigurationFile {
|
|||||||
ItemStack itemstack = ItemStack.deserialize(itemstackMap);
|
ItemStack itemstack = ItemStack.deserialize(itemstackMap);
|
||||||
|
|
||||||
// Create itemcase object.
|
// Create itemcase object.
|
||||||
Itemcase itemcase = new Itemcase(itemstack, location, owner);
|
Itemcase itemcase = new Itemcase(type, itemstack, location, owner);
|
||||||
|
|
||||||
|
// If itemcase is a shop.
|
||||||
|
if(type != Type.SHOWCASE) {
|
||||||
|
|
||||||
|
// Get storage type.
|
||||||
|
StorageType storageType = StorageType.valueOf(
|
||||||
|
this.file.getString(key + "shop.storage-type"));
|
||||||
|
|
||||||
|
// Set storage type.
|
||||||
|
itemcase.setStorageType(storageType);
|
||||||
|
|
||||||
|
// If itemcase has finite storage.
|
||||||
|
if(storageType == StorageType.FINITE) {
|
||||||
|
|
||||||
|
// Deserialse inventory.
|
||||||
|
Inventory inventory = this.deserializeInventory(
|
||||||
|
this.file.getConfigurationSection(
|
||||||
|
key + "shop.storage").getValues(true));
|
||||||
|
|
||||||
|
// Set inventory.
|
||||||
|
itemcase.setStorage(inventory);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If this itemcase buys.
|
||||||
|
if(type == Type.SHOP_BUY || type == Type.SHOP_MULTI) {
|
||||||
|
|
||||||
|
// Get buy price.
|
||||||
|
double buyPrice =
|
||||||
|
this.file.getDouble(key + "shop.buy-price");
|
||||||
|
|
||||||
|
// Set buy price.
|
||||||
|
itemcase.setBuyPrice(buyPrice);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If this itemcase sells.
|
||||||
|
if(type == Type.SHOP_SELL || type == Type.SHOP_MULTI) {
|
||||||
|
|
||||||
|
// Get sell price.
|
||||||
|
double sellPrice =
|
||||||
|
this.file.getDouble(key + "shop.sell-price");
|
||||||
|
|
||||||
|
// Set sell price.
|
||||||
|
itemcase.setSellPrice(sellPrice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Add to list.
|
// Add to list.
|
||||||
itemcases.add(itemcase);
|
itemcases.add(itemcase);
|
||||||
@ -184,4 +278,79 @@ public class WorldFile extends ConfigurationFile {
|
|||||||
// Delete directory.
|
// Delete directory.
|
||||||
FileUtils.deleteDirectory(fileReference);
|
FileUtils.deleteDirectory(fileReference);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serialize the given inventory.
|
||||||
|
*
|
||||||
|
* @param inventory Inventory.
|
||||||
|
* @return Map.
|
||||||
|
*/
|
||||||
|
private Map<String, Object> serializeInventory(Inventory inventory) {
|
||||||
|
|
||||||
|
// Create map.
|
||||||
|
Map<String, Object> map = new HashMap();
|
||||||
|
|
||||||
|
// Set size.
|
||||||
|
map.put("size", inventory.getSize());
|
||||||
|
|
||||||
|
// Set name.
|
||||||
|
map.put("name", inventory.getName());
|
||||||
|
|
||||||
|
// Loop through all content slots.
|
||||||
|
for(int i = 0; i < inventory.getSize(); i++) {
|
||||||
|
|
||||||
|
// Check if content slot has any items.
|
||||||
|
if (inventory.getItem(i) != null) {
|
||||||
|
|
||||||
|
// Serialize itemstack in content slot.
|
||||||
|
map.put("" + i, inventory.getItem(i).serialize());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return map.
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserialize inventory from given map.
|
||||||
|
*
|
||||||
|
* @param map Map.
|
||||||
|
* @return Inventory.
|
||||||
|
*/
|
||||||
|
private Inventory deserializeInventory(Map<String, Object> map) {
|
||||||
|
|
||||||
|
// Get size.
|
||||||
|
int size = Integer.parseInt((String) map.get("size"));
|
||||||
|
|
||||||
|
// Get name.
|
||||||
|
String name = (String) map.get("name");
|
||||||
|
|
||||||
|
// Create inventory.
|
||||||
|
Inventory inventory = Bukkit.createInventory(null, size, name);
|
||||||
|
|
||||||
|
// For every map entry.
|
||||||
|
for(Entry<String, Object> entry : map.entrySet()) {
|
||||||
|
|
||||||
|
// Check entry is parameter.
|
||||||
|
if(entry.getKey().equals("size") ||
|
||||||
|
entry.getKey().equals("name")) {
|
||||||
|
|
||||||
|
// Skip.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get slot.
|
||||||
|
int slot = Integer.parseInt(entry.getKey());
|
||||||
|
|
||||||
|
// Deserialize item.
|
||||||
|
ItemStack item = ItemStack.deserialize(
|
||||||
|
(Map<String, Object>) entry.getValue());
|
||||||
|
|
||||||
|
// Set item in slot.
|
||||||
|
inventory.setItem(slot, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return inventory.
|
||||||
|
return inventory;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,8 +22,6 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
@ -116,7 +114,8 @@ public final class ItemcaseManager {
|
|||||||
OfflinePlayer owner) {
|
OfflinePlayer owner) {
|
||||||
|
|
||||||
// Create new itemcase instance.
|
// Create new itemcase instance.
|
||||||
Itemcase itemcase = new Itemcase(itemStack, location, owner);
|
Itemcase itemcase = new Itemcase(Itemcase.Type.SHOWCASE, itemStack,
|
||||||
|
location, owner);
|
||||||
|
|
||||||
// Add itemcase to the list.
|
// Add itemcase to the list.
|
||||||
this.itemcases.add(itemcase);
|
this.itemcases.add(itemcase);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user