parent
5f9afca286
commit
9bb87ca1ca
12 changed files with 372 additions and 36 deletions
@ -0,0 +1,36 @@ |
||||
package xyz.mineconomia.mineconomiacore.commands; |
||||
|
||||
import com.arangodb.ArangoCollection; |
||||
import com.arangodb.entity.BaseDocument; |
||||
import org.bukkit.command.Command; |
||||
import org.bukkit.command.CommandExecutor; |
||||
import org.bukkit.command.CommandSender; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.inventory.ItemStack; |
||||
import org.jetbrains.annotations.NotNull; |
||||
import xyz.mineconomia.mineconomiacore.serialization; |
||||
|
||||
import java.io.IOException; |
||||
import java.util.Map; |
||||
|
||||
import static xyz.mineconomia.mineconomiacore.database.database; |
||||
|
||||
public class sample implements CommandExecutor { |
||||
@Override |
||||
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) { |
||||
ArangoCollection collection = database.collection("shops"); |
||||
if (collection.documentExists(strings[0])){ |
||||
BaseDocument baseDocument = collection.getDocument(strings[0], BaseDocument.class); |
||||
Map<String, Object> shopData = baseDocument.getProperties(); |
||||
shopData.get("item"); |
||||
try { |
||||
((Player) commandSender).getInventory().addItem((ItemStack) serialization.stringToBukkitObject((String) shopData.get("item"))); |
||||
} catch (IOException | ClassNotFoundException e) { |
||||
throw new RuntimeException(e); |
||||
} |
||||
}else{ |
||||
commandSender.sendMessage("Shop není!"); |
||||
} |
||||
return false; |
||||
} |
||||
} |
||||
@ -0,0 +1,32 @@ |
||||
package xyz.mineconomia.mineconomiacore.events; |
||||
|
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.event.EventHandler; |
||||
import org.bukkit.event.Listener; |
||||
import org.bukkit.event.inventory.InventoryAction; |
||||
import org.bukkit.event.inventory.InventoryClickEvent; |
||||
import org.bukkit.event.inventory.InventoryCloseEvent; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
|
||||
public class shopGuiInteract implements Listener { |
||||
public static HashMap<Player, Map<String, Object>> storeDatas = new HashMap<>(); |
||||
@EventHandler |
||||
public void clickEvent(InventoryClickEvent event){ |
||||
Player player = (Player) event.getWhoClicked(); |
||||
Map<String, Object> storeData = storeDatas.get(player); |
||||
if (storeData == null) return; |
||||
event.setCancelled(true); |
||||
if (!event.getAction().equals(InventoryAction.PICKUP_ALL)) return; |
||||
|
||||
|
||||
} |
||||
@EventHandler |
||||
public void closeEvent(InventoryCloseEvent event){ |
||||
Player player = (Player) event.getPlayer(); |
||||
storeDatas.remove(player); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,137 @@ |
||||
package xyz.mineconomia.mineconomiacore.events; |
||||
|
||||
import com.arangodb.ArangoCollection; |
||||
import com.arangodb.entity.BaseDocument; |
||||
import org.bukkit.*; |
||||
import org.bukkit.block.BlockState; |
||||
import org.bukkit.block.Container; |
||||
import org.bukkit.block.Sign; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.event.EventHandler; |
||||
import org.bukkit.event.Listener; |
||||
import org.bukkit.event.block.Action; |
||||
import org.bukkit.event.player.PlayerInteractEvent; |
||||
import org.bukkit.inventory.Inventory; |
||||
import org.bukkit.inventory.ItemStack; |
||||
import org.bukkit.inventory.meta.ItemMeta; |
||||
import org.bukkit.persistence.PersistentDataType; |
||||
import xyz.mineconomia.mineconomiacore.PDC; |
||||
import xyz.mineconomia.mineconomiacore.serialization; |
||||
|
||||
import java.io.IOException; |
||||
import java.text.DecimalFormat; |
||||
import java.text.NumberFormat; |
||||
import java.util.*; |
||||
|
||||
import static xyz.mineconomia.mineconomiacore.database.database; |
||||
|
||||
public class shopInteract implements Listener { |
||||
|
||||
@EventHandler |
||||
public static void savePosition(PlayerInteractEvent event) throws IOException, ClassNotFoundException { |
||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK){ |
||||
Player player = event.getPlayer(); |
||||
BlockState blockState = Objects.requireNonNull(event.getClickedBlock()).getState(); |
||||
if (blockState instanceof Sign sign){ |
||||
if (PDC.GetTileStatePDC(sign, "shop", PersistentDataType.STRING) != null){ |
||||
ArangoCollection collection = database.collection("shops"); |
||||
event.setCancelled(true); |
||||
String shopid = (String) PDC.GetTileStatePDC(sign, "shop", PersistentDataType.STRING); |
||||
player.sendMessage(ChatColor.GREEN + "Načítám data obchodu..."); |
||||
if (collection.documentExists(shopid)){ |
||||
BaseDocument baseDocument = collection.getDocument(shopid, BaseDocument.class); |
||||
Map<String, Object> shopData = baseDocument.getProperties(); |
||||
List<List<String>> placeholders = new ArrayList<>(); |
||||
NumberFormat formatInteger = new DecimalFormat("0"); |
||||
NumberFormat formatter = new DecimalFormat("0.00"); |
||||
String regime = (String) shopData.get("regime"); |
||||
String ownerPrefix = ""; |
||||
if (((String) shopData.get("type")).contains("group")){ |
||||
ownerPrefix = "Skupina "; |
||||
} |
||||
placeholders.add(new ArrayList<>(List.of("%%owner%%", ownerPrefix + shopData.get("owner")))); |
||||
String count = (String) formatInteger.format(shopData.get("count")); |
||||
String price = formatter.format( shopData.get("price")); |
||||
String countEight = formatInteger.format(Math.multiplyExact((Long) shopData.get("count"), 8)); |
||||
String priceEight = formatter.format(Math.multiplyExact((Long) shopData.get("price"),8)); |
||||
Inventory inventory; |
||||
Inventory invetoryToCheck; |
||||
Inventory inventoryToAddTo; |
||||
String shopPrefix; |
||||
OfflinePlayer buyer; |
||||
OfflinePlayer seller; |
||||
String shopErrorMoney; |
||||
String shopErrorProduct; |
||||
Material shopMaterial; |
||||
Material shopErrorMaterial; |
||||
if (shopData.get("regime").equals("buy")) { |
||||
invetoryToCheck = ((Container) ((Location) serialization.stringToBukkitObject((String) shopData.get("containerLocation"))).getBlock().getState()).getInventory(); |
||||
inventoryToAddTo = player.getInventory(); |
||||
shopPrefix = "&aKoupit "; |
||||
shopMaterial = Material.LIME_WOOL; |
||||
shopErrorMaterial = Material.LIME_STAINED_GLASS; |
||||
inventory = Bukkit.createInventory(null, 9, ChatColor.DARK_GREEN+ ""+ChatColor.BOLD +"Prodej"); |
||||
shopErrorMoney = "&cNemáš dost peněz"; |
||||
shopErrorProduct = "&cMajitel nemá dostatek itemů"; |
||||
buyer = player; |
||||
seller = Bukkit.getOfflinePlayer((String) shopData.get("owner")); |
||||
|
||||
}else{ |
||||
invetoryToCheck = player.getInventory();; |
||||
inventoryToAddTo = ((Container) ((Location) serialization.stringToBukkitObject((String) shopData.get("containerLocation"))).getBlock().getState()).getInventory(); |
||||
shopPrefix = "&eProdat "; |
||||
shopMaterial = Material.YELLOW_WOOL; |
||||
shopErrorMaterial = Material.YELLOW_STAINED_GLASS; |
||||
inventory = Bukkit.createInventory(null, 9, ChatColor.GOLD + ""+ ChatColor.BOLD +"Výkup"); |
||||
shopErrorMoney = "&cMajitel nemá dost peněz"; |
||||
shopErrorProduct = "&cNemáš dostatek itemů"; |
||||
buyer = Bukkit.getOfflinePlayer((String) shopData.get("owner")); |
||||
seller = player; |
||||
} |
||||
|
||||
inventory.setItem(0, newItemStack(shopPrefix + count + "ks za " + price + "$", shopMaterial)); |
||||
inventory.setItem(1, newItemStack(shopPrefix + countEight + "ks za " + priceEight + "$", shopMaterial)); |
||||
inventory.setItem(7, (ItemStack) serialization.stringToBukkitObject((String) shopData.get("item"))); |
||||
inventory.setItem(8, newItemStack("&l&bInformace o obchodu:", Material.PLAYER_HEAD, List.of("&eMajitel: " + shopData.get("owner")))); |
||||
shopData.put("inventoryToAddTo", inventoryToAddTo); |
||||
shopData.put("inventoryToCheck", invetoryToCheck); |
||||
shopData.put("seller", seller); |
||||
shopData.put("buyer", buyer); |
||||
shopGuiInteract.storeDatas.put(player, shopData); |
||||
player.openInventory(inventory); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}else{ |
||||
player.sendMessage(ChatColor.RED + "Data obchodu nebyla nalezena"); |
||||
} |
||||
|
||||
} |
||||
} |
||||
} |
||||
} |
||||
public static ItemStack newItemStack(String name, Material material){ |
||||
ItemStack itemStack = new ItemStack(material); |
||||
ItemMeta itemMeta = itemStack.getItemMeta(); |
||||
assert itemMeta != null; |
||||
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); |
||||
itemStack.setItemMeta(itemMeta); |
||||
return itemStack; |
||||
} |
||||
public static ItemStack newItemStack(String name, Material material, List<String> list){ |
||||
ItemStack itemStack = new ItemStack(material); |
||||
ItemMeta itemMeta = itemStack.getItemMeta(); |
||||
assert itemMeta != null; |
||||
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name)); |
||||
List<String> lore = new ArrayList<>(); |
||||
for (String loreline: list){ |
||||
lore.add(ChatColor.translateAlternateColorCodes('&', loreline)); |
||||
} |
||||
itemMeta.setLore(lore); |
||||
itemStack.setItemMeta(itemMeta); |
||||
return itemStack; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,35 @@ |
||||
package xyz.mineconomia.mineconomiacore; |
||||
|
||||
import org.bukkit.inventory.Inventory; |
||||
import org.bukkit.inventory.ItemStack; |
||||
|
||||
import java.util.Objects; |
||||
|
||||
public class invTools { |
||||
public static int getFreeSpaceForItem(Inventory inventory, ItemStack itemStack){ |
||||
int count = 0; |
||||
int stackSize = itemStack.getMaxStackSize(); |
||||
for (int i = 0; inventory.getSize() > i; i++){ |
||||
if (inventory.getItem(i) == null){ |
||||
count += stackSize; |
||||
} else if (Objects.requireNonNull(inventory.getItem(i)).isSimilar(itemStack)) { |
||||
count += stackSize - Objects.requireNonNull(inventory.getItem(i)).getAmount(); |
||||
} |
||||
|
||||
} |
||||
return count; |
||||
} |
||||
public static int itemAmount(Inventory inventory, ItemStack itemStack){ |
||||
int count = 0; |
||||
for(int i = 0; inventory.getSize() > i; i++){ |
||||
ItemStack comparedItem = inventory.getItem(i); |
||||
if (comparedItem != null){ |
||||
if (itemStack.isSimilar(comparedItem)){ |
||||
count += comparedItem.getAmount(); |
||||
} |
||||
} |
||||
} |
||||
return count; |
||||
} |
||||
|
||||
} |
||||
@ -1,8 +1,12 @@ |
||||
package xyz.mineconomia.mineconomiacore; |
||||
|
||||
import com.arangodb.entity.BaseDocument; |
||||
import org.bukkit.configuration.file.FileConfiguration; |
||||
|
||||
public interface config { |
||||
import java.util.HashMap; |
||||
|
||||
public interface publicValues { |
||||
FileConfiguration config = MineconomiaCore.getPlugin(MineconomiaCore.class).getConfig(); |
||||
HashMap<String, Object> shops = new HashMap<>(); |
||||
} |
||||
|
||||
@ -0,0 +1,30 @@ |
||||
package xyz.mineconomia.mineconomiacore; |
||||
|
||||
import org.bukkit.inventory.ItemStack; |
||||
import org.bukkit.util.io.BukkitObjectInputStream; |
||||
import org.bukkit.util.io.BukkitObjectOutputStream; |
||||
|
||||
import java.io.*; |
||||
import java.util.Base64; |
||||
|
||||
public class serialization { |
||||
public static String bukkitObjectToString(Object object){ |
||||
byte[] serializedObject = null; |
||||
try { |
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
||||
BukkitObjectOutputStream oos = new BukkitObjectOutputStream(baos); |
||||
oos.writeObject(object); |
||||
oos.close(); |
||||
serializedObject = baos.toByteArray(); |
||||
|
||||
} catch (IOException e) { |
||||
MineconomiaCore.logger.info("it's fucked: " + e); |
||||
} |
||||
return Base64.getEncoder().encodeToString(serializedObject); |
||||
} |
||||
public static Object stringToBukkitObject(String string) throws IOException, ClassNotFoundException { |
||||
byte[] byteArray = Base64.getDecoder().decode(string); |
||||
BukkitObjectInputStream in = new BukkitObjectInputStream(new ByteArrayInputStream(byteArray)); |
||||
return in.readObject(); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue