pull/6/head
jakub 10 months ago
parent 6736f94a0a
commit 319b29c56e
  1. 4
      src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
  2. 11
      src/main/java/xyz/soukup/ecoCraftCore/commands/TransactionCommand.java
  3. 37
      src/main/java/xyz/soukup/ecoCraftCore/events/RulerMarking.java
  4. 11
      src/main/java/xyz/soukup/ecoCraftCore/objects/Shop.java
  5. 18
      src/main/java/xyz/soukup/ecoCraftCore/objects/Transaction.java
  6. 60
      src/main/java/xyz/soukup/ecoCraftCore/objects/VirtualChest.java
  7. 32
      src/main/java/xyz/soukup/ecoCraftCore/utilities/InventoryUtils.java
  8. 39
      src/main/java/xyz/soukup/ecoCraftCore/utilities/JSONConverter.java
  9. 20
      src/main/java/xyz/soukup/ecoCraftCore/utilities/PDC.java

@ -54,8 +54,8 @@ public final class EcoCraftCore extends JavaPlugin {
}
private void prepareDatabase() throws SQLException {
String databaseUrl = "jdbc:mysql://soukup.xyz:3306/ecc";
connectionSource = new JdbcConnectionSource(databaseUrl, "ecc", "ecc");
String databaseUrl = "jdbc:mysql://localhost:3306/ecc";
connectionSource = new JdbcConnectionSource(databaseUrl, "ecc", "");
Logger.getLogger("com.j256.ormlite.table.TableUtils").setLevel(Level.OFF);

@ -27,14 +27,9 @@ public class TransactionCommand {
String receiver = StringArgumentType.getString(ctx, "receiver");
double amount = DoubleArgumentType.getDouble(ctx, "amount");
try {
Dao<Transaction, Long> dao = DaoManager.createDao(EcoCraftCore.connectionSource, Transaction.class);
Transaction tx = new Transaction(amount, "player", sender, "player", receiver, "command");
dao.create(tx);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
Transaction tx = new Transaction(amount, "player", sender, "player", receiver, "command");
tx.save();
return 1;
}

@ -8,6 +8,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import xyz.soukup.ecoCraftCore.utilities.PDC;
@ -25,7 +26,9 @@ public class RulerMarking implements Listener {
ItemStack itemStack = event.getItem();
Block block = event.getClickedBlock();
Player player = event.getPlayer();
if(event.getHand() != EquipmentSlot.HAND) return;
if (itemStack == null || block == null){
return;
@ -40,26 +43,44 @@ public class RulerMarking implements Listener {
event.setCancelled(true);
if (block.getState() instanceof Chest chest){
chests.put(event.getPlayer(), chest);
event.getPlayer().sendMessage("pozice truhly nastavena");
Chest storedChest = chests.get(player);
if (storedChest != null && storedChest.equals(chest)){
return;
}
chests.put(player, chest);
player.sendMessage("pozice truhly nastavena");
return;
}
if (block.getState() instanceof Sign sign){
signs.put(event.getPlayer(), sign);
event.getPlayer().sendMessage("pozice cedule nastavena");
Sign storeSign = signs.get(player);
if (storeSign != null && storeSign.equals(sign)){
return;
}
signs.put(player, sign);
player.sendMessage("pozice cedule nastavena");
return;
}
Location location = block.getLocation();
switch (event.getAction()){
case LEFT_CLICK_BLOCK -> {
primaryLocations.put(event.getPlayer(), block.getLocation());
event.getPlayer().sendMessage("první pozice nastavena");
Location storedLocation = primaryLocations.get(player);
if (storedLocation != null && storedLocation.equals(location)){
return;
}
primaryLocations.put(player, location);
player.sendMessage("první pozice nastavena");
return;
}
case RIGHT_CLICK_BLOCK -> {
secondaryLocations.put(event.getPlayer(), block.getLocation());
event.getPlayer().sendMessage("druhá pozice nastavena");
Location storedLocation = secondaryLocations.get(player);
if (storedLocation != null && storedLocation.equals(location)){
return;
}
secondaryLocations.put(player, location);
player.sendMessage("druhá pozice nastavena");
return;
}
}

@ -47,6 +47,9 @@ public class Shop {
@DatabaseField(canBeNull = false)
private Timestamp created = new Timestamp(System.currentTimeMillis());
@DatabaseField(columnName = "active_on_server")
private String activeServer;
public Shop() {
}
@ -95,6 +98,14 @@ public class Shop {
}
}
public void save(){
try {
DaoRegistry.getShopDao().createOrUpdate(this);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public ItemStack getItemStack() {
return JSONConverter.itemStackFromJson(this.itemStackJson);
}

@ -2,7 +2,9 @@ package xyz.soukup.ecoCraftCore.objects;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
import java.sql.SQLException;
import java.sql.Timestamp;
@DatabaseTable(tableName = "transactions")
@ -43,6 +45,22 @@ public class Transaction {
// ORMLite requires a no-arg constructor
}
public void save(){
try {
DaoRegistry.getTransactionDao().createOrUpdate(this);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public static Transaction findById(int id) {
try {
return DaoRegistry.getTransactionDao().queryForId(id);
} catch (SQLException e) {
return null;
}
}
public Transaction(double amount, String senderType, String sender, String receiverType, String receiver, String type) {
this.amount = amount;
this.senderType = senderType;

@ -3,7 +3,14 @@ package xyz.soukup.ecoCraftCore.objects;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import org.bukkit.block.Chest;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
import xyz.soukup.ecoCraftCore.utilities.JSONConverter;
import java.sql.SQLException;
@DatabaseTable(tableName = "virtual_chests")
public class VirtualChest {
@ -11,10 +18,55 @@ public class VirtualChest {
@DatabaseField(generatedId = true)
private long id;
@DatabaseField
private String type;
@DatabaseField(columnName = "inventory")
private String inventoryJson;
@DatabaseField(columnName = "active_on_server")
private String activeServer;
@DatabaseField(columnName = "is_opened")
private Boolean isOpened = false;
private Inventory inventory;
public VirtualChest(){
}
public VirtualChest(Chest chest){
Inventory inventory = chest.getSnapshotInventory();
this.inventoryJson = JSONConverter.inventoryToJson(inventory);
}
public static VirtualChest findById(int id) {
try {
return DaoRegistry.getVirtualChestDao().queryForId(id);
} catch (SQLException e) {
return null;
}
}
public void save(){
if (this.inventory != null){
this.inventoryJson = JSONConverter.inventoryToJson(this.inventory);
}
try {
DaoRegistry.getVirtualChestDao().createOrUpdate(this);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public Inventory getInventory(){
if (this.inventory == null){
this.inventory = JSONConverter.inventoryFromJson(this.inventoryJson);
}
return this.inventory;
}
@DatabaseField(dataType = DataType.SERIALIZABLE, columnName = "data")
private ItemStack[] itemStacks;
}

@ -0,0 +1,32 @@
package xyz.soukup.ecoCraftCore.utilities;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
public class InventoryUtils {
public static Integer getCount(Inventory inventory, ItemStack item){
int count = 0;
for (ItemStack itemStack : inventory.getContents()){
if (itemStack != null && itemStack.isSimilar(item)){
count += itemStack.getAmount();
}
}
return count;
}
public static Integer getSpaceLeft(Inventory inventory, ItemStack item){
int count = 0;
int stackSize = item.getMaxStackSize();
for (ItemStack itemStack : inventory.getContents()){
if(itemStack == null){
count += stackSize;
continue;
}
if (itemStack.isSimilar(item)){
count += stackSize - itemStack.getAmount();
}
}
return count;
}
}

@ -2,18 +2,20 @@ package xyz.soukup.ecoCraftCore.utilities;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import org.bukkit.Bukkit;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
public class JSONConverter {
public static String itemStackToJson(ItemStack item) {
try {
Map<String, Object> map = item.serialize();
return new Gson().toJson(map); // or use your JSON library of choice
return new Gson().toJson(map);
} catch (Exception e) {
e.printStackTrace();
return null;
@ -31,6 +33,39 @@ public class JSONConverter {
}
}
public static String inventoryToJson(Inventory inventory) {
try {
Map<String, Object> map = new HashMap<>();
map.put("size", inventory.getSize());
map.put("contents", inventory.getContents());
return new Gson().toJson(map);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static Inventory inventoryFromJson(String json) {
try {
Type type = new TypeToken<Map<String, Object>>() {}.getType();
Map<String, Object> map = new Gson().fromJson(json, type);
int size = ((Double) map.get("size")).intValue();
Object[] contentsArray = ((Object[]) ((Map) map).get("contents"));
ItemStack[] contents = new ItemStack[contentsArray.length];
for (int i = 0; i < contentsArray.length; i++) {
Map<String, Object> itemMap = (Map<String, Object>) contentsArray[i];
contents[i] = ItemStack.deserialize(itemMap);
}
Inventory inventory = Bukkit.createInventory(null, size);
inventory.setContents(contents);
return inventory;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}

@ -1,6 +1,8 @@
package xyz.soukup.ecoCraftCore.utilities;
import org.bukkit.NamespacedKey;
import org.bukkit.block.Chest;
import org.bukkit.block.DoubleChest;
import org.bukkit.block.TileState;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
@ -19,8 +21,22 @@ public class PDC {
};
public static void set(TileState tileState, String key, Object value, PersistentDataType persistentDataType){
setUniversal(tileState, key, value, persistentDataType);
tileState.update();
if (tileState instanceof DoubleChest doubleChest){
Chest leftSideChest = (Chest) doubleChest.getLeftSide();
Chest rightSideChest = (Chest) doubleChest.getRightSide();
assert leftSideChest != null;
setUniversal(leftSideChest, key, value, persistentDataType);
assert rightSideChest != null;
setUniversal(rightSideChest, key, value, persistentDataType);
leftSideChest.update();
rightSideChest.update();
}else {
setUniversal(tileState, key, value, persistentDataType);
tileState.update();
}
}
public static Integer getInteger(TileState tileState, String key){

Loading…
Cancel
Save