Compare commits

..

2 Commits

Author SHA1 Message Date
jakub 339371125f tak tak 2 years ago
jakub 9bb87ca1ca tak tak 2 years ago
  1. 38
      src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java
  2. 15
      src/main/java/xyz/mineconomia/mineconomiacore/PDC.java
  3. 61
      src/main/java/xyz/mineconomia/mineconomiacore/commands/gamble.java
  4. 39
      src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java
  5. 36
      src/main/java/xyz/mineconomia/mineconomiacore/commands/sample.java
  6. 21
      src/main/java/xyz/mineconomia/mineconomiacore/commands/sell.java
  7. 58
      src/main/java/xyz/mineconomia/mineconomiacore/commands/shop.java
  8. 127
      src/main/java/xyz/mineconomia/mineconomiacore/events/shopGuiInteract.java
  9. 140
      src/main/java/xyz/mineconomia/mineconomiacore/events/shopInteract.java
  10. 14
      src/main/java/xyz/mineconomia/mineconomiacore/handlers/SignHandler.java
  11. 35
      src/main/java/xyz/mineconomia/mineconomiacore/invTools.java
  12. 6
      src/main/java/xyz/mineconomia/mineconomiacore/publicValues.java
  13. 30
      src/main/java/xyz/mineconomia/mineconomiacore/serialization.java
  14. 10
      src/main/resources/plugin.yml

@ -1,14 +1,15 @@
package xyz.mineconomia.mineconomiacore; package xyz.mineconomia.mineconomiacore;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import xyz.mineconomia.mineconomiacore.CustomItems.ItemManager; import xyz.mineconomia.mineconomiacore.CustomItems.ItemManager;
import xyz.mineconomia.mineconomiacore.commands.BookCommand; import xyz.mineconomia.mineconomiacore.commands.*;
import xyz.mineconomia.mineconomiacore.commands.funHarvestBall;
import xyz.mineconomia.mineconomiacore.commands.mcore;
import xyz.mineconomia.mineconomiacore.commands.tpw;
import xyz.mineconomia.mineconomiacore.events.playerAccount; import xyz.mineconomia.mineconomiacore.events.playerAccount;
import xyz.mineconomia.mineconomiacore.events.shopGuiInteract;
import xyz.mineconomia.mineconomiacore.events.shopInteract;
import xyz.mineconomia.mineconomiacore.events.specialEvents; import xyz.mineconomia.mineconomiacore.events.specialEvents;
import xyz.mineconomia.mineconomiacore.handlers.FHBHandler; import xyz.mineconomia.mineconomiacore.handlers.FHBHandler;
@ -17,13 +18,19 @@ import java.util.logging.Logger;
public final class MineconomiaCore extends JavaPlugin { public final class MineconomiaCore extends JavaPlugin {
public static Logger logger = Bukkit.getLogger(); public static Logger logger = Bukkit.getLogger();
private static Economy econ = null;
@Override @Override
public void onEnable() { public void onEnable() {
// Plugin startup logic // Plugin startup logic
saveDefaultConfig(); saveDefaultConfig();
MineconomiaCore plugin= getPlugin(MineconomiaCore.class); MineconomiaCore plugin= getPlugin(MineconomiaCore.class);
if (!setupEconomy()) {
logger.info("No Vault economy! Stopping");
getServer().getPluginManager().disablePlugin(this);
return;
}
//Tohle třeba změnit později - jakub //Tohle třeba změnit později - jakub
Logger logger= plugin.getLogger(); Logger logger= plugin.getLogger();
@ -43,12 +50,16 @@ public final class MineconomiaCore extends JavaPlugin {
pm.registerEvents(new FHBHandler(), this); pm.registerEvents(new FHBHandler(), this);
pm.registerEvents(new playerAccount(), this); pm.registerEvents(new playerAccount(), this);
pm.registerEvents(new specialEvents(), this); pm.registerEvents(new specialEvents(), this);
pm.registerEvents(new shopInteract(), this);
pm.registerEvents(new shopGuiInteract(), this);
//BookCommand //BookCommand
Objects.requireNonNull(getCommand("pomoc")).setExecutor(new BookCommand()); Objects.requireNonNull(getCommand("pomoc")).setExecutor(new BookCommand());
Objects.requireNonNull(getCommand("tpw")).setExecutor(new tpw()); Objects.requireNonNull(getCommand("tpw")).setExecutor(new tpw());
Objects.requireNonNull(getCommand("fhb")).setExecutor(new funHarvestBall()); Objects.requireNonNull(getCommand("fhb")).setExecutor(new funHarvestBall());
Objects.requireNonNull(getCommand("shop")).setExecutor(new shop());
Objects.requireNonNull(getCommand("sample")).setExecutor(new sample());
Objects.requireNonNull(getCommand("gamble")).setExecutor(new gamble());
//CustomItems //CustomItems
ItemManager.init(); ItemManager.init();
} }
@ -59,4 +70,19 @@ public final class MineconomiaCore extends JavaPlugin {
saveConfig(); saveConfig();
} }
private boolean setupEconomy() {
if (getServer().getPluginManager().getPlugin("Vault") == null) {
return false;
}
RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null) {
return false;
}
econ = rsp.getProvider();
return true;
}
public static Economy getEconomy() {
return econ;
}
} }

@ -1,6 +1,7 @@
package xyz.mineconomia.mineconomiacore; package xyz.mineconomia.mineconomiacore;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.block.TileState;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataContainer;
@ -30,11 +31,10 @@ public class PDC {
pdc.remove(nKey); pdc.remove(nKey);
} }
public static ItemMeta WriteItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type, Object value){ public static void WriteItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type, Object value){
NamespacedKey nKey = new NamespacedKey(MineconomiaCore.getPlugin(MineconomiaCore.class), key); NamespacedKey nKey = new NamespacedKey(MineconomiaCore.getPlugin(MineconomiaCore.class), key);
PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); PersistentDataContainer pdc = itemMeta.getPersistentDataContainer();
pdc.set(nKey, type, value); pdc.set(nKey, type, value);
return itemMeta;
} }
public static Object GetItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type){ public static Object GetItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type){
@ -42,6 +42,17 @@ public class PDC {
PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); PersistentDataContainer pdc = itemMeta.getPersistentDataContainer();
return pdc.get(nKey, type); return pdc.get(nKey, type);
} }
public static void WriteTileStatePDC(TileState tileState, String key, PersistentDataType type, Object value){
NamespacedKey nKey = new NamespacedKey(MineconomiaCore.getPlugin(MineconomiaCore.class), key);
PersistentDataContainer pdc = tileState.getPersistentDataContainer();
pdc.set(nKey, type, value);
}
public static Object GetTileStatePDC(TileState tileState, String key, PersistentDataType type){
NamespacedKey nKey = new NamespacedKey(MineconomiaCore.getPlugin(MineconomiaCore.class), key);
PersistentDataContainer pdc = tileState.getPersistentDataContainer();
return pdc.get(nKey, type);
}
} }

@ -0,0 +1,61 @@
package xyz.mineconomia.mineconomiacore.commands;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import xyz.mineconomia.mineconomiacore.MineconomiaCore;
import xyz.mineconomia.mineconomiacore.events.shopInteract;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class gamble implements CommandExecutor {
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
Inventory gambleGui = Bukkit.createInventory(null, 27, "GAMBLE GAMBLE GAMBLE");
for (int i = 0; i<9; i++){
gambleGui.setItem( i,shopInteract.newItemStack(" ", Material.BLACK_STAINED_GLASS_PANE));
gambleGui.setItem( i + 18,shopInteract.newItemStack(" ", Material.BLACK_STAINED_GLASS_PANE));
}
gambleGui.setItem(4, shopInteract.newItemStack(" ", Material.LIME_STAINED_GLASS_PANE));
gambleGui.setItem(22, shopInteract.newItemStack(" ", Material.LIME_STAINED_GLASS_PANE));
Player p = (Player) commandSender;
List<ItemStack> itemStackList = new ArrayList<>();
for (Material m : Material.values()){
gambleGui.setItem(15, new ItemStack(m));
if (gambleGui.getItem(15) != null){
itemStackList.add(new ItemStack(m));
}
}
p.openInventory(gambleGui);
Collections.shuffle(itemStackList);
for(int i = 0; i < 100; i++){
Bukkit.getScheduler().scheduleSyncDelayedTask(MineconomiaCore.getPlugin(MineconomiaCore.class), new Runnable() {
public void run() {
ItemStack itemStackToEnd = itemStackList.get(0);
itemStackList.remove(0);
itemStackList.add(itemStackToEnd);
for (int i = 0; i<9; i++){
gambleGui.setItem(i+9, itemStackList.get(i));
if (gambleGui.getItem(i+9) == null){
gambleGui.setItem(i+9, new ItemStack(Material.STICK));
}
}
p.playSound(p, Sound.BLOCK_NOTE_BLOCK_BANJO, 100, 1);
}
}, Long.parseLong(String.valueOf(i+1)));
}
return true;
}
}

@ -2,27 +2,31 @@ package xyz.mineconomia.mineconomiacore.commands;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import xyz.mineconomia.mineconomiacore.PDC; import xyz.mineconomia.mineconomiacore.PDC;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import static xyz.mineconomia.mineconomiacore.config.config; import static xyz.mineconomia.mineconomiacore.publicValues.config;
public class mcore implements CommandExecutor { public class mcore implements TabExecutor {
@Override @Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, String[] args) { public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, String[] args) {
Player player = (Player) commandSender;
PlayerInventory inventory= player.getInventory();
ItemStack item = inventory.getItemInMainHand();
if (Objects.equals(args[0], "setSpecial")){ if (Objects.equals(args[0], "setSpecial")){
Player player = (Player) commandSender;
PlayerInventory inventory= player.getInventory();
ItemStack item = inventory.getItemInMainHand();
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
assert meta != null; assert meta != null;
PDC.WriteItemMetaPDC(meta, "special", PersistentDataType.INTEGER,1); PDC.WriteItemMetaPDC(meta, "special", PersistentDataType.INTEGER,1);
@ -35,6 +39,29 @@ public class mcore implements CommandExecutor {
} }
return true; return true;
} }
if (Objects.equals(args[0], "setSellItem")){
config.set("sellItems." + item.getType().name(), args[1]);
try {
config.save("config.yml");
} catch (IOException e) {
throw new RuntimeException(e);
}
player.sendMessage("Nastaveno");
return true;
}
return false; return false;
} }
@Nullable
@Override
public List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
List<String> completetions = new ArrayList<>();
switch (strings.length){
case 0:
completetions.add("setSpecial");
completetions.add("setSellItem");
}
return List.of();
}
} }

@ -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,21 @@
package xyz.mineconomia.mineconomiacore.commands;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.NotNull;
import xyz.mineconomia.mineconomiacore.PDC;
public class sell implements CommandExecutor {
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
Player p = (Player) commandSender;
PDC.WritePlayerPDC(p, "sellGUIOpen", PersistentDataType.INTEGER, 1);
p.openInventory(Bukkit.createInventory(null, 36, ChatColor.GREEN + "" + ChatColor.BOLD + "Vlož itemy, které chceš prodat"));
return false;
}
}

@ -2,24 +2,27 @@ package xyz.mineconomia.mineconomiacore.commands;
import com.arangodb.ArangoCollection; import com.arangodb.ArangoCollection;
import com.arangodb.entity.BaseDocument; import com.arangodb.entity.BaseDocument;
import com.arangodb.entity.BaseEdgeDocument;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.*;
import org.bukkit.block.Container;
import org.bukkit.block.Sign;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor; import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import xyz.mineconomia.mineconomiacore.PDC;
import xyz.mineconomia.mineconomiacore.events.specialEvents; import xyz.mineconomia.mineconomiacore.events.specialEvents;
import xyz.mineconomia.mineconomiacore.handlers.SignHandler;
import xyz.mineconomia.mineconomiacore.serialization;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.UUID;
import static xyz.mineconomia.mineconomiacore.config.config; import static xyz.mineconomia.mineconomiacore.publicValues.config;
import static xyz.mineconomia.mineconomiacore.database.database; import static xyz.mineconomia.mineconomiacore.database.database;
public class shop implements TabExecutor { public class shop implements TabExecutor {
@ -33,12 +36,16 @@ public class shop implements TabExecutor {
commandSender.sendMessage(ChatColor.RED + "Musíš být hráč"); commandSender.sendMessage(ChatColor.RED + "Musíš být hráč");
return false; return false;
} }
if (!(specialEvents.specialPreLocations.get(player).size() < 2)){ if (specialEvents.specialPreLocations.get(player) == null){
commandSender.sendMessage(ChatColor.RED + "Musíš mít označenou cedulku a úložiště"); commandSender.sendMessage(ChatColor.RED + "Musíš mít označenou cedulku a úložiště!");
return false; return false;
} }
Block block1 = specialEvents.specialPreLocations.get(player).get("loc1").getBlock(); if (!(specialEvents.specialPreLocations.get(player).size() == 2)){
Block block2 = specialEvents.specialPreLocations.get(player).get("loc2").getBlock(); commandSender.sendMessage(ChatColor.RED + "Musíš mít označenou cedulku a úložištěě");
return false;
}
BlockState block1 = specialEvents.specialPreLocations.get(player).get("loc1").getBlock().getState();
BlockState block2 = specialEvents.specialPreLocations.get(player).get("loc2").getBlock().getState();
Container container; Container container;
if (block1 instanceof Container){ if (block1 instanceof Container){
@ -58,7 +65,7 @@ public class shop implements TabExecutor {
commandSender.sendMessage(ChatColor.RED + "Nemáš označenou cedulku"); commandSender.sendMessage(ChatColor.RED + "Nemáš označenou cedulku");
return false; return false;
} }
ItemStack handyItem = player.getInventory().getItemInMainHand(); ItemStack handyItem = player.getInventory().getItemInMainHand().clone();
if (handyItem.getType() == Material.AIR){ if (handyItem.getType() == Material.AIR){
commandSender.sendMessage(ChatColor.RED + "Nemáš v ruce item, který chceš prodávat"); commandSender.sendMessage(ChatColor.RED + "Nemáš v ruce item, který chceš prodávat");
return false; return false;
@ -71,7 +78,7 @@ public class shop implements TabExecutor {
commandSender.sendMessage(ChatColor.RED + "Cena a počet kusů musí být čísla!"); commandSender.sendMessage(ChatColor.RED + "Cena a počet kusů musí být čísla!");
return false; return false;
} }
BaseDocument shopDocument = new BaseDocument(); BaseDocument shopDocument = new BaseDocument(""+ UUID.randomUUID());
String shopRegime; String shopRegime;
switch (args[0]){ switch (args[0]){
case "buy": case "buy":
@ -86,13 +93,32 @@ public class shop implements TabExecutor {
commandSender.sendMessage(ChatColor.RED + "Neplatný režim obchodu"); commandSender.sendMessage(ChatColor.RED + "Neplatný režim obchodu");
return false; return false;
} }
shopDocument.addAttribute("signLocation", sign.getLocation()); shopDocument.addAttribute("signLocation", serialization.bukkitObjectToString(sign.getLocation()));
shopDocument.addAttribute("storageLocation", container.getLocation()); shopDocument.addAttribute("signX", sign.getX());
shopDocument.addAttribute("count", args[1]); shopDocument.addAttribute("signY", sign.getY());
shopDocument.addAttribute("signZ", sign.getZ());
shopDocument.addAttribute("signW", sign.getWorld().toString());
shopDocument.addAttribute("containerLocation", serialization.bukkitObjectToString(container.getLocation()));
shopDocument.addAttribute("containerX", container.getX());
shopDocument.addAttribute("containerY", container.getY());
shopDocument.addAttribute("containerZ", container.getZ());
shopDocument.addAttribute("containerW", container.getWorld().toString());
shopDocument.addAttribute("owner", player.getDisplayName());
shopDocument.addAttribute("count", Math.round(Long.parseLong(args[1])));
shopDocument.addAttribute("price", Long.parseLong(args[2]));
shopDocument.addAttribute("type", "playerLimited"); shopDocument.addAttribute("type", "playerLimited");
shopDocument.addAttribute("regime", shopRegime); shopDocument.addAttribute("regime", shopRegime);
BaseEdgeDocument ownershipEdge = new BaseEdgeDocument(); handyItem.setAmount(1);
ArangoCollection playersCollection = database.collection("shops"); shopDocument.addAttribute("itemName", Objects.requireNonNull(handyItem.getItemMeta()).getDisplayName());
shopDocument.addAttribute("item", serialization.bukkitObjectToString(handyItem));
shopDocument.addAttribute("itemType", handyItem.getType());
PDC.WriteTileStatePDC(sign, "shop", PersistentDataType.STRING, shopDocument.getKey());
SignHandler.changeSignText(sign, player.getDisplayName(), shopRegime, args[2] + "$/" + args[1] + "ks", handyItem.getType().name().toLowerCase());
sign.update();
PDC.WriteTileStatePDC(container, "storage", PersistentDataType.STRING, shopDocument.getKey());
ArangoCollection shopCollection = database.collection("shops");
shopCollection.insertDocument(shopDocument);
commandSender.sendMessage(ChatColor.GREEN + "Obchod vytvořen");
return true; return true;
} }

@ -0,0 +1,127 @@
package xyz.mineconomia.mineconomiacore.events;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
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 org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import xyz.mineconomia.mineconomiacore.MineconomiaCore;
import xyz.mineconomia.mineconomiacore.invTools;
import xyz.mineconomia.mineconomiacore.serialization;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public class shopGuiInteract implements Listener {
public static HashMap<Player, Map<String, Object>> storeDatas = new HashMap<>();
@EventHandler
public void clickEvent(InventoryClickEvent event) throws IOException, ClassNotFoundException {
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;
String noSpaceMessage;
String noMoneyMessage;
String successUserMessage;
String successUserMessageEight;
String successOwnerMessage;
String successOwnerMessageEight;
String noItemsMessage;
String count = (String) storeData.get("count");
String price = (String) storeData.get("price");
String countEight = (String) storeData.get("countEight");
String priceEight = (String) storeData.get("priceEight");
String itemType = ((String) storeData.get("itemType")).toLowerCase();
ItemStack item = (ItemStack) serialization.stringToBukkitObject((String) storeData.get("item"));
Inventory buyerInventory = (Inventory) storeData.get("buyerInventory");
Inventory sellerInventory = (Inventory) storeData.get("sellerInventory");
OfflinePlayer buyer = (OfflinePlayer) storeData.get("buyer");
OfflinePlayer seller = (OfflinePlayer) storeData.get("seller");
OfflinePlayer owner = Bukkit.getOfflinePlayer((String) storeData.get("owner"));
Economy eco = MineconomiaCore.getEconomy();
if (storeData.get("regime").equals("buy")){
noSpaceMessage = ChatColor.RED + "Nemáš dost místa v inventáři";
noMoneyMessage = ChatColor.RED + "Nemáš dost peněz";
noItemsMessage = ChatColor.RED + "Prodejce nemá dost itemů ve skladišti";
successUserMessage = ChatColor.GREEN + "Koupil jsi" + count + "x " + itemType + "za" + price;
successUserMessageEight = ChatColor.GREEN + "Koupil jsi" + countEight + "x " + itemType + " za " + priceEight + "$";
successOwnerMessage = ChatColor.GREEN + "Hráč " + player.getDisplayName() + "si koupil " + count + "x " + itemType + " za " + price + "%";
successOwnerMessageEight = ChatColor.GREEN + "Hráč " + player.getDisplayName() + "si koupil " + countEight + "x " + itemType + " za " + priceEight + "%";
}else{
noSpaceMessage = ChatColor.RED + "Prodejce nemá dost místa ve skladišti";
noMoneyMessage = ChatColor.RED + "Prodejce nemá dost peněz";
noItemsMessage = ChatColor.RED + "Nemáš dost itemů";
successUserMessage = ChatColor.GREEN + "Prodal jsi" + count + "x " + itemType + "za" + price;
successUserMessageEight = ChatColor.GREEN + "Prodal jsi" + countEight + "x " + itemType + " za " + priceEight + "$";
successOwnerMessage = ChatColor.GREEN + "Hráč " + player.getDisplayName() + "ti prodal " + count + "x " + itemType + " za " + price + "%";
successOwnerMessageEight = ChatColor.GREEN + "Hráč " + player.getDisplayName() + "ti prodal " + countEight + "x " + itemType + " za " + priceEight + "%";
}
double finalPrice = Double.parseDouble(price);
int finalCount = Integer.parseInt(count);
int slot = event.getSlot();
if (slot == 1){
finalCount = Integer.parseInt(countEight);
finalPrice = Double.parseDouble(priceEight);
}
if (slot == 0 || slot == 1){
if (seller.equals(buyer)){
player.sendMessage(ChatColor.RED + "Sám sobě nic prodat nemůžeš");
return;
}
if(invTools.getFreeSpaceForItem(buyerInventory, item) < finalCount){
player.sendMessage(noSpaceMessage);
return;
}
if (finalPrice > eco.getBalance(buyer)){
player.sendMessage(noMoneyMessage);
return;
}
if (invTools.itemAmount(sellerInventory, item) < finalCount){
player.sendMessage(noItemsMessage);
return;
}
item.setAmount(finalCount);
sellerInventory.removeItem(item);
buyerInventory.addItem(item);
eco.withdrawPlayer(buyer, finalPrice);
eco.depositPlayer(seller, finalPrice);
if (slot == 0){
player.sendMessage(successUserMessage);
sendIfOnline(owner, successOwnerMessage);
}else{
player.sendMessage(successUserMessageEight);
sendIfOnline(owner, successOwnerMessageEight);
}
}
}
@EventHandler
public void closeEvent(InventoryCloseEvent event){
Player player = (Player) event.getPlayer();
storeDatas.remove(player);
}
public static void sendIfOnline(OfflinePlayer player, String message){
if (player.isOnline()) Objects.requireNonNull(player.getPlayer()).sendMessage(message);
}
}

@ -0,0 +1,140 @@
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();
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 ";
}
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 sellerInventory;
Inventory buyerInventory;
String shopPrefix;
OfflinePlayer buyer;
OfflinePlayer seller;
String shopErrorMoney;
String shopErrorProduct;
Material shopMaterial;
Material shopErrorMaterial;
if (shopData.get("regime").equals("buy")) {
sellerInventory = ((Container) ((Location) serialization.stringToBukkitObject((String) shopData.get("containerLocation"))).getBlock().getState()).getInventory();
buyerInventory = 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{
sellerInventory = player.getInventory();;
buyerInventory = ((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: " + ownerPrefix + shopData.get("owner"))));
shopData.put("buyerInventory", buyerInventory);
shopData.put("sellerInventory", sellerInventory);
shopData.put("seller", seller);
shopData.put("buyer", buyer);
shopData.put("price", price);
shopData.put("priceEight", priceEight);
shopData.put("count", count);
shopData.put("countEight", countEight);
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;
}
}

@ -5,25 +5,21 @@ import org.bukkit.block.Block;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
import static xyz.mineconomia.mineconomiacore.MineconomiaCore.logger;
public class SignHandler { public class SignHandler {
//Implement for //Implement for
public static void changeSignText(Location location, String line0, String line1, String line2, String line3) { public static void changeSignText(Sign sign, String line0, String line1, String line2, String line3) {
Block block = location.getBlock();
BlockState state = block.getState();
//Je to cedulka?
if (state instanceof Sign) {
Sign sign = (Sign) state;
//Nastavení textu //Nastavení textu
sign.setLine(0, line0); sign.setLine(0, line0);
sign.setLine(1, line1); sign.setLine(1, line1);
sign.setLine(2, line2); sign.setLine(2, line2);
sign.setLine(3, line3); sign.setLine(3, line3);
logger.info("successs");
//Aktualizace cedulky
sign.update();
}
} }
} }

@ -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; package xyz.mineconomia.mineconomiacore;
import com.arangodb.entity.BaseDocument;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
public interface config { import java.util.HashMap;
public interface publicValues {
FileConfiguration config = MineconomiaCore.getPlugin(MineconomiaCore.class).getConfig(); 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();
}
}

@ -1,7 +1,7 @@
name: MineconomiaCore name: MineconomiaCore
version: '${project.version}' version: '${project.version}'
main: xyz.mineconomia.mineconomiacore.MineconomiaCore main: xyz.mineconomia.mineconomiacore.MineconomiaCore
api-version: '1.20' api-version: '1.18'
prefix: MCore prefix: MCore
authors: [Jakub Soukup, Richard Telka] authors: [Jakub Soukup, Richard Telka]
commands: commands:
@ -15,3 +15,11 @@ commands:
usage: "toto je potřeba někdy dodělat - Kubík" usage: "toto je potřeba někdy dodělat - Kubík"
fhb: fhb:
description: "dá kuzelnou kouli sklizně " description: "dá kuzelnou kouli sklizně "
permission: mcore.fhb
shop:
description: "mgg nesnáším vysvětlování věcí, proč vůbec používáš help?"
sample:
description: will unfuck things
permission: mcore.unfuck
gamble:
description: "dd"
Loading…
Cancel
Save