From 2368e4f70fcd4e227890b5bb1ca984507dca6a47 Mon Sep 17 00:00:00 2001 From: Warrior <50800980+Warriorrrr@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:57:36 +0100 Subject: [PATCH] Make plot groups extend townyobject (#7141) * Make plot groups extend townyobject * Save metadata --- .../palmergames/bukkit/towny/db/SQLSchema.java | 1 + .../bukkit/towny/db/TownyFlatFileSource.java | 5 +++++ .../bukkit/towny/db/TownySQLSource.java | 6 ++++++ .../bukkit/towny/object/ObjectGroup.java | 16 ++++------------ .../bukkit/towny/object/PlotGroup.java | 5 +++++ 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/db/SQLSchema.java b/Towny/src/main/java/com/palmergames/bukkit/towny/db/SQLSchema.java index 7f59bfadd2..7c3564f346 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/db/SQLSchema.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/db/SQLSchema.java @@ -157,6 +157,7 @@ private static List getPlotGroupColumns() { columns.add("`groupName` mediumtext NOT NULL"); columns.add("`groupPrice` float DEFAULT NULL"); columns.add("`town` VARCHAR(32) NOT NULL"); + columns.add("`metadata` text DEFAULT NULL"); return columns; } diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/db/TownyFlatFileSource.java b/Towny/src/main/java/com/palmergames/bukkit/towny/db/TownyFlatFileSource.java index db38f3f0a5..e5040c8323 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/db/TownyFlatFileSource.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/db/TownyFlatFileSource.java @@ -1609,6 +1609,10 @@ public boolean loadPlotGroup(PlotGroup group) { line = keys.get("groupPrice"); if (line != null && !line.isEmpty()) group.setPrice(Double.parseDouble(line.trim())); + + line = keys.get("metadata"); + if (line != null) + MetadataLoader.getInstance().deserializeMetadata(group, line.trim()); } catch (Exception e) { TownyMessaging.sendErrorMsg(Translation.of("flatfile_err_exception_reading_group_file_at_line", path, line)); @@ -2081,6 +2085,7 @@ public boolean savePlotGroup(PlotGroup group) { list.add("groupName=" + group.getName()); list.add("groupPrice=" + group.getPrice()); list.add("town=" + group.getTown().getName()); + list.add("metadata=" + serializeMetadata(group)); } catch (Exception e) { logger.warn("An exception occurred while saving plot group " + Optional.ofNullable(group).map(g -> g.getUUID().toString()).orElse("null") + ": ", e); } diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/db/TownySQLSource.java b/Towny/src/main/java/com/palmergames/bukkit/towny/db/TownySQLSource.java index f08ea0fda4..d4acadc7b5 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/db/TownySQLSource.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/db/TownySQLSource.java @@ -1997,6 +1997,11 @@ private boolean loadPlotGroup(ResultSet rs) { group.setPrice(Float.parseFloat(line.trim())); } catch (Exception ignored) {} } + + line = rs.getString("metadata"); + if (line != null) { + MetadataLoader.getInstance().deserializeMetadata(group, line); + } } catch (SQLException e) { plugin.getLogger().log(Level.WARNING, "Loading Error: Exception while reading plot group: " + uuid + " at line: " + line + " in the sql database", e); @@ -2267,6 +2272,7 @@ public synchronized boolean savePlotGroup(PlotGroup group) { pltgrp_hm.put("groupName", group.getName()); pltgrp_hm.put("groupPrice", group.getPrice()); pltgrp_hm.put("town", group.getTown().getName()); + pltgrp_hm.put("metadata", serializeMetadata(group)); updateDB("PLOTGROUPS", pltgrp_hm, Collections.singletonList("groupID")); diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/object/ObjectGroup.java b/Towny/src/main/java/com/palmergames/bukkit/towny/object/ObjectGroup.java index 12783dbe19..f7fcf9008d 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/object/ObjectGroup.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/object/ObjectGroup.java @@ -7,9 +7,8 @@ * * @author Suneet Tipirneni (Siris) */ -public abstract class ObjectGroup implements Nameable, Identifiable { +public abstract class ObjectGroup extends TownyObject implements Identifiable { private UUID uuid; - private String name; /** * The constructor for the Group object. @@ -17,8 +16,8 @@ public abstract class ObjectGroup implements Nameable, Identifiable { * @param name An alias for the id used for player in-game interaction via commands. */ public ObjectGroup(UUID id, String name) { - this.uuid = id; - this.name = name; + super(name); + this.uuid = id; } public UUID getUUID() { @@ -28,13 +27,6 @@ public UUID getUUID() { public void setUUID(UUID id) { this.uuid = id; } - - @Override - public String getName() { - return name; - } - - public void setName(String name) { this.name = name; } /** * Determines whether a group is equivalent or not. @@ -56,7 +48,7 @@ public boolean equals(Object obj) { */ @Override public String toString() { - return name + "," + uuid; + return getName() + "," + uuid; } /** diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/object/PlotGroup.java b/Towny/src/main/java/com/palmergames/bukkit/towny/object/PlotGroup.java index 9eaa52c261..941e15df7a 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/object/PlotGroup.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/object/PlotGroup.java @@ -46,6 +46,11 @@ public String toString() { return super.toString() + "," + getTown().toString() + "," + getPrice(); } + @Override + public boolean exists() { + return this.town != null && this.town.exists() && this.town.hasPlotGroupName(getName()); + } + /** * Override the name change method to internally rehash the plot group map. * @param name The name of the group.