Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,17 @@ jobs:
gh release create "$TAG" \
"plugin/target/displayentityutils-$TAG.jar" \
--verify-tag \
--title "DEU $TAG" \
--title "$TAG" \
--notes-file "docs/release-notes/$TAG.md" \
--generate-notes

- name: Trigger Build on Jitpack
background: true
continue-on-error: true
run: |
curl -L --fail --retry 3 --retry-delay 7 \
"https://jitpack.io/com/github/PZDonny/DisplayEntityUtils/${TAG}/build.log"

- name: Get Release body
id: release_notes
env:
Expand All @@ -61,7 +68,7 @@ jobs:
with:
token: ${{ secrets.MODRINTH_TOKEN }}
project: ${{ vars.MODRINTH_ID }}
name: DEU ${{ env.TAG }}
name: ${{ env.TAG }}
version: ${{ env.TAG }}
changelog: ${{ steps.release_notes.outputs.body }}
loaders: |-
Expand Down
2 changes: 1 addition & 1 deletion api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>net.donnypz.displayentityutils</groupId>
<artifactId>deu</artifactId>
<version>3.7.0</version>
<version>3.7.1</version>
</parent>

<artifactId>api</artifactId>
Expand Down
24 changes: 6 additions & 18 deletions api/src/main/java/net/donnypz/displayentityutils/DisplayAPI.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package net.donnypz.displayentityutils;

import net.donnypz.displayentityutils.managers.DisplayStorage;
import net.donnypz.displayentityutils.database.DisplayStorage;
import net.donnypz.displayentityutils.managers.LoadMethod;
import net.donnypz.displayentityutils.utils.DisplayEntities.AnimationPlayer;
import net.donnypz.displayentityutils.utils.bdengine.convert.common.BDEConversionHandler;
Expand All @@ -12,6 +12,9 @@
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;

import java.util.HashMap;
import java.util.Map;

public final class DisplayAPI {

public static final Component pluginPrefix = Component.text("[DisplayEntityUtils] ", NamedTextColor.YELLOW);
Expand All @@ -29,9 +32,7 @@ public final class DisplayAPI {

private static final String legacyPartTagPrefix = "deu.parttag_";

static DisplayStorage LOCAL_STORAGE;
static DisplayStorage MYSQL_STORAGE;
static DisplayStorage MONGODB_STORAGE;
static Map<LoadMethod, DisplayStorage> storages = new HashMap<>();
static AnimationPlayer.AnimationPlayerProvider ANIMATION_PLAYER_SERVICE;
static BDEConversionHandler BDE_CONVERSION_HANDLER;
static Scheduler SCHEDULER;
Expand Down Expand Up @@ -113,20 +114,7 @@ public static boolean isEssentialsInstalled() {
}

public static DisplayStorage getStorage(@NotNull LoadMethod method){
switch(method){
case LOCAL -> {
return LOCAL_STORAGE;
}
case MYSQL -> {
return MYSQL_STORAGE;
}
case MONGODB -> {
return MONGODB_STORAGE;
}
default -> {
return null;
}
}
return storages.get(method);
}

public static Scheduler getScheduler(){
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package net.donnypz.displayentityutils.managers;
package net.donnypz.displayentityutils.database;

import net.donnypz.displayentityutils.utils.DisplayEntities.DisplayAnimation;
import net.donnypz.displayentityutils.utils.DisplayEntities.DisplayEntityGroup;
Expand All @@ -25,6 +25,4 @@ public interface DisplayStorage {
@NotNull List<String> getGroupTags();

@NotNull List<String> getAnimationTags();


}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package net.donnypz.displayentityutils.events;

import net.donnypz.displayentityutils.utils.DisplayEntities.ActiveGroup;
import net.donnypz.displayentityutils.utils.DisplayEntities.DisplayAnimator;
import net.donnypz.displayentityutils.utils.DisplayEntities.SpawnedDisplayAnimation;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
Expand All @@ -12,8 +11,7 @@
import java.util.UUID;

/**
* Called when a {@link DisplayAnimator} starts playing a {@link SpawnedDisplayAnimation}.
* This is called once on an animator of the type {@link DisplayAnimator.AnimationType#LOOP}.
* Called when a player is removed from their animation camera view.
*/
public class AnimationCameraPlayerRemovedEvent extends Event{
private static final HandlerList handlers = new HandlerList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@
import java.util.UUID;

/**
* Called when a {@link DisplayAnimator} starts playing a {@link SpawnedDisplayAnimation}.
* This is called once on an animator of the type {@link DisplayAnimator.AnimationType#LOOP}.
* Called when an animation camera begins its camera path
*/
public class AnimationCameraStartEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
Expand All @@ -29,7 +28,12 @@ public class AnimationCameraStartEvent extends Event implements Cancellable {
int startFrameId;
private boolean isCancelled = false;

public AnimationCameraStartEvent(ActiveGroup<?> group, DisplayAnimator animator, SpawnedDisplayAnimation animation, Collection<Player> players, int startFrameId, UUID cameraUUID){
public AnimationCameraStartEvent(ActiveGroup<?> group,
DisplayAnimator animator,
SpawnedDisplayAnimation animation,
Collection<Player> players,
int startFrameId,
UUID cameraUUID){
super(!Bukkit.isPrimaryThread());
this.group = group;
this.animation = animation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
import java.util.UUID;

/**
* Called when a {@link DisplayAnimator} starts playing a {@link SpawnedDisplayAnimation}.
* This is called once on an animator of the type {@link DisplayAnimator.AnimationType#LOOP}.
* Called when an animation camera completes its path
*/
public class AnimationCameraStopEvent extends Event{
private static final HandlerList handlers = new HandlerList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,22 @@ public static void deselectSpawnedAnimation(@NotNull Player player){
* @return boolean whether the save was successful
*/
public static boolean saveDisplayAnimation(@NotNull LoadMethod loadMethod, @NotNull DisplayAnimation displayAnimation, @Nullable Player saver){
if (displayAnimation.getAnimationTag() == null || !loadMethod.isEnabled()){
if (!loadMethod.isEnabled()){
if (saver != null) {
saver.sendMessage(DisplayAPI.pluginPrefix.append(Component.text("Failed to save animation", NamedTextColor.RED)));
saver.sendMessage(Component.text("| Storage location is not enabled.", NamedTextColor.GRAY, TextDecoration.ITALIC));
}
return false;
}

if (displayAnimation.getAnimationTag() == null) {
if (saver != null) {
saver.sendMessage(DisplayAPI.pluginPrefix.append(Component.text("Failed to save animation", NamedTextColor.RED)));
saver.sendMessage(Component.text("| The animation does not have a tag.", NamedTextColor.GRAY, TextDecoration.ITALIC));
}
return false;
}

boolean success = DisplayAPI.getStorage(loadMethod).saveDisplayAnimation(displayAnimation, saver);
if (success){
attemptCacheAnimation(displayAnimation.getAnimationTag(), displayAnimation.toSpawnedDisplayAnimation());
Expand All @@ -104,7 +117,7 @@ public static boolean saveDisplayAnimationJson(@NotNull DisplayAnimation display
if (!DisplayConfig.overwritexistingSaves()){
if (saver != null){
saver.sendMessage(MiniMessage.miniMessage().deserialize("- <red>Failed to save animation <light_purple>JSON <red>locally!"));
saver.sendMessage(Component.text("Save with tag already exists!", NamedTextColor.GRAY, TextDecoration.ITALIC));
saver.sendMessage(Component.text("| Save with tag already exists!", NamedTextColor.GRAY, TextDecoration.ITALIC));
}
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -428,9 +428,22 @@ public static boolean isGroupRegistered(@NotNull SpawnedDisplayEntityGroup spawn
* @return boolean whether the save was successful
*/
public static boolean saveDisplayEntityGroup(@NotNull LoadMethod loadMethod, @NotNull DisplayEntityGroup displayEntityGroup, @Nullable Player saver) {
if (displayEntityGroup.getTag() == null || !loadMethod.isEnabled()) {
if (!loadMethod.isEnabled()){
if (saver != null) {
saver.sendMessage(DisplayAPI.pluginPrefix.append(Component.text("Failed to save display entity group", NamedTextColor.RED)));
saver.sendMessage(Component.text("| Storage location is not enabled.", NamedTextColor.GRAY, TextDecoration.ITALIC));
}
return false;
}

if (displayEntityGroup.getTag() == null) {
if (saver != null) {
saver.sendMessage(DisplayAPI.pluginPrefix.append(Component.text("Failed to save display entity group", NamedTextColor.RED)));
saver.sendMessage(Component.text("| The group does not have a tag.", NamedTextColor.GRAY, TextDecoration.ITALIC));
}
return false;
}

return DisplayAPI.getStorage(loadMethod).saveDisplayEntityGroup(displayEntityGroup, saver);
}

Expand Down
18 changes: 18 additions & 0 deletions docs/release-notes/3.7.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
**Release Highlights**
- Updated config ⚙
- Database optimizations 🐇
- Database security fixes 🔒

## Config Changes
- Added additional config settings for `mongodb`, simplifying connections

## API Changes
> [!NOTE]
>**New Version:** `3.7.1`

### <ins>Breaking Changes</ins>
- Moved `DisplayStorage` into `net.donnypz.displayentityutils.database` package

## Bug Fixes / QOL
- Improved queries for `MongoDB` storage
- Implemented changes to prevent SQL injection
17 changes: 14 additions & 3 deletions plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>net.donnypz.displayentityutils</groupId>
<artifactId>deu</artifactId>
<version>3.7.0</version>
<version>3.7.1</version>
</parent>

<artifactId>plugin</artifactId>
Expand Down Expand Up @@ -102,7 +102,6 @@
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>5.1.2</version>
</dependency>

<dependency>
Expand All @@ -114,7 +113,7 @@
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.1.0</version>
<version>7.1.0</version>
</dependency>

<dependency>
Expand Down Expand Up @@ -153,4 +152,16 @@
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-bom</artifactId>
<version>5.11.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

</project>
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package net.donnypz.displayentityutils;

import net.donnypz.displayentityutils.database.MYSQLDisplayStorage;
import net.donnypz.displayentityutils.database.MongoDisplayStorage;
import net.donnypz.displayentityutils.managers.DisplayAnimationManager;
import net.donnypz.displayentityutils.managers.MYSQLManager;
import net.donnypz.displayentityutils.managers.MongoManager;
import net.donnypz.displayentityutils.managers.LoadMethod;
import net.donnypz.displayentityutils.managers.PluginFolders;
import net.donnypz.displayentityutils.utils.controller.DisplayController;
import net.kyori.adventure.text.Component;
Expand Down Expand Up @@ -54,25 +55,61 @@ static void read(FileConfiguration config){
if (config.getBoolean("mongodb.enabled")){
DisplayConfig.isMongoEnabled = true;
String cString = config.getString("mongodb.connectionString");
String host = config.getString("mongodb.host");
int port = config.getInt("mongodb.port");
String databaseName = config.getString("mongodb.database");
String username = config.getString("mongodb.username");
String password = config.getString("mongodb.password");
String groupCollection = config.getString("mongodb.groupCollection");
String animationCollection = config.getString("mongodb.animationCollection");
MongoManager.createConnection(cString, databaseName, groupCollection, animationCollection);
if (cString == null || cString.isBlank()){
((MongoDisplayStorage) DisplayAPI.getStorage(LoadMethod.MONGODB)).createConnection(
host,
port,
databaseName,
username,
password,
groupCollection,
animationCollection
);
}
else{
((MongoDisplayStorage) DisplayAPI.getStorage(LoadMethod.MONGODB)).createConnection(
cString,
databaseName,
groupCollection,
animationCollection
);
}

}

if (config.getBoolean("mysql.enabled")){
DisplayConfig.isMYSQLEnabled = true;
String username = config.getString("mysql.username");
String password = config.getString("mysql.password");

if (!config.getString("mysql.connectionURL").isBlank()){
MYSQLManager.createConnection(config.getString("mysql.connectionURL"), username, password);
String connectionUrl = config.getString("mysql.connectionURL");
((MYSQLDisplayStorage) DisplayAPI.getStorage(LoadMethod.MYSQL)).createConnection(
connectionUrl,
username,
password
);
}
else{
String database = config.getString("mysql.database");
String host = config.getString("mysql.host");
int port = config.getInt("mysql.port");
boolean useSSL = config.getBoolean("mysql.useSSL");
MYSQLManager.createConnection(host, port, database, username, password, useSSL);
((MYSQLDisplayStorage) DisplayAPI.getStorage(LoadMethod.MYSQL)).createConnection(
host,
port,
database,
username,
password,
useSSL
);
}
}

Expand Down
Loading
Loading