pull/6/head
jakub 10 months ago
parent 6736f94a0a
commit 319b29c56e
  1. 4
      src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
  2. 9
      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. 16
      src/main/java/xyz/soukup/ecoCraftCore/utilities/PDC.java

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

@ -27,14 +27,9 @@ public class TransactionCommand {
String receiver = StringArgumentType.getString(ctx, "receiver"); String receiver = StringArgumentType.getString(ctx, "receiver");
double amount = DoubleArgumentType.getDouble(ctx, "amount"); 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"); Transaction tx = new Transaction(amount, "player", sender, "player", receiver, "command");
dao.create(tx); tx.save();
} catch (Exception e) {
e.printStackTrace();
return 0;
}
return 1; return 1;
} }

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

@ -47,6 +47,9 @@ public class Shop {
@DatabaseField(canBeNull = false) @DatabaseField(canBeNull = false)
private Timestamp created = new Timestamp(System.currentTimeMillis()); private Timestamp created = new Timestamp(System.currentTimeMillis());
@DatabaseField(columnName = "active_on_server")
private String activeServer;
public Shop() { 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() { public ItemStack getItemStack() {
return JSONConverter.itemStackFromJson(this.itemStackJson); return JSONConverter.itemStackFromJson(this.itemStackJson);
} }

@ -2,7 +2,9 @@ package xyz.soukup.ecoCraftCore.objects;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
@DatabaseTable(tableName = "transactions") @DatabaseTable(tableName = "transactions")
@ -43,6 +45,22 @@ public class Transaction {
// ORMLite requires a no-arg constructor // 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) { public Transaction(double amount, String senderType, String sender, String receiverType, String receiver, String type) {
this.amount = amount; this.amount = amount;
this.senderType = senderType; this.senderType = senderType;

@ -3,7 +3,14 @@ package xyz.soukup.ecoCraftCore.objects;
import com.j256.ormlite.field.DataType; import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; 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 org.bukkit.inventory.ItemStack;
import xyz.soukup.ecoCraftCore.utilities.DaoRegistry;
import xyz.soukup.ecoCraftCore.utilities.JSONConverter;
import java.sql.SQLException;
@DatabaseTable(tableName = "virtual_chests") @DatabaseTable(tableName = "virtual_chests")
public class VirtualChest { public class VirtualChest {
@ -11,10 +18,55 @@ public class VirtualChest {
@DatabaseField(generatedId = true) @DatabaseField(generatedId = true)
private long id; private long id;
@DatabaseField @DatabaseField(columnName = "inventory")
private String type; 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.common.reflect.TypeToken;
import com.google.gson.Gson; import com.google.gson.Gson;
import org.bukkit.Bukkit;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
public class JSONConverter { public class JSONConverter {
public static String itemStackToJson(ItemStack item) { public static String itemStackToJson(ItemStack item) {
try { try {
Map<String, Object> map = item.serialize(); 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) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return null; 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; package xyz.soukup.ecoCraftCore.utilities;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.block.Chest;
import org.bukkit.block.DoubleChest;
import org.bukkit.block.TileState; import org.bukkit.block.TileState;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
@ -19,9 +21,23 @@ public class PDC {
}; };
public static void set(TileState tileState, String key, Object value, PersistentDataType persistentDataType){ public static void set(TileState tileState, String key, Object value, PersistentDataType persistentDataType){
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); setUniversal(tileState, key, value, persistentDataType);
tileState.update(); tileState.update();
} }
}
public static Integer getInteger(TileState tileState, String key){ public static Integer getInteger(TileState tileState, String key){
return (Integer) get(tileState, key, PersistentDataType.INTEGER); return (Integer) get(tileState, key, PersistentDataType.INTEGER);

Loading…
Cancel
Save