From e5f9f5738b6ee3428b6a8fab52ce58dd3254623d Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 13:49:51 +0100 Subject: [PATCH 01/97] Move stuff out to main api and start creating api-bukkit --- api-bukkit/pom.xml | 42 +++++++++++++++++++ .../at/pavlov/bukkit/cannons}/Projectile.java | 3 +- api-internal/pom.xml | 11 +++++ .../at/pavlov/internal/cannons/ICannon.java | 8 ++++ .../internal/cannons}/RunnableAsync.java | 2 +- .../internal/cannons}/data/AimingData.java | 5 +-- .../cannons}/data/AmmoLoadingData.java | 8 +--- .../internal/cannons}/data/AngleData.java | 2 +- .../cannons}/data/CannonMainData.java | 2 +- .../cannons}/data/CannonPosition.java | 8 ++-- .../internal/cannons}/data/FiringData.java | 8 +--- .../internal/cannons}/data/LinkingData.java | 2 +- .../internal/cannons}/data/SentryData.java | 2 +- .../internal/cannons}/data/WhitelistData.java | 5 +-- .../functionalities/CannonDataHolder.java | 25 +++++++++++ .../functionalities/InventoryObject.java | 11 +++++ .../cannons}/functionalities/Rotational.java | 7 ++-- .../cannons}/functionalities/Updatable.java | 2 +- .../cannons}/holders/AimingDataHolder.java | 6 +-- .../holders/AmmoLoadingDataHolder.java | 19 ++++----- .../cannons}/holders/AngleDataHolder.java | 6 +-- .../holders/CannonMainDataHolder.java | 6 +-- .../holders/CannonPositionHolder.java | 40 ++++++++---------- .../cannons}/holders/FiringDataHolder.java | 13 +++--- .../cannons}/holders/LinkingDataHolder.java | 16 ++++--- .../cannons}/holders/ObserverMapHolder.java | 25 +++++------ .../cannons}/holders/SentryDataHolder.java | 4 +- .../cannons}/holders/WhitelistDataHolder.java | 5 +-- .../internal/enums}/CannonRotation.java | 2 +- .../pavlov/internal/enums}/MessageEnum.java | 2 +- cannons-bukkit/pom.xml | 5 +++ .../CannonDesignHolder.java | 7 +--- .../at/pavlov/cannons/interfaces/ICannon.java | 15 ------- .../functionalities/CannonDataHolder.java | 27 ------------ .../functionalities/InventoryObject.java | 12 ------ 35 files changed, 186 insertions(+), 177 deletions(-) create mode 100644 api-bukkit/pom.xml rename {cannons-bukkit/src/main/java/at/pavlov/cannons/projectile => api-bukkit/src/main/java/at/pavlov/bukkit/cannons}/Projectile.java (99%) create mode 100644 api-internal/src/main/java/at/pavlov/internal/cannons/ICannon.java rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/RunnableAsync.java (86%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-internal/src/main/java/at/pavlov/internal/cannons}/data/AimingData.java (76%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-internal/src/main/java/at/pavlov/internal/cannons}/data/AmmoLoadingData.java (66%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-internal/src/main/java/at/pavlov/internal/cannons}/data/AngleData.java (88%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-internal/src/main/java/at/pavlov/internal/cannons}/data/CannonMainData.java (93%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-internal/src/main/java/at/pavlov/internal/cannons}/data/CannonPosition.java (76%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-internal/src/main/java/at/pavlov/internal/cannons}/data/FiringData.java (73%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-internal/src/main/java/at/pavlov/internal/cannons}/data/LinkingData.java (87%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-internal/src/main/java/at/pavlov/internal/cannons}/data/SentryData.java (96%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-internal/src/main/java/at/pavlov/internal/cannons}/data/WhitelistData.java (79%) create mode 100644 api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java create mode 100644 api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/InventoryObject.java rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/functionalities/Rotational.java (82%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/functionalities/Updatable.java (74%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/holders/AimingDataHolder.java (89%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/holders/AmmoLoadingDataHolder.java (86%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/holders/AngleDataHolder.java (96%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/holders/CannonMainDataHolder.java (88%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/holders/CannonPositionHolder.java (70%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/holders/FiringDataHolder.java (82%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/holders/LinkingDataHolder.java (81%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/holders/ObserverMapHolder.java (61%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/holders/SentryDataHolder.java (97%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces => api-internal/src/main/java/at/pavlov/internal/cannons}/holders/WhitelistDataHolder.java (90%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/CannonRotation.java (87%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/MessageEnum.java (99%) rename cannons-bukkit/src/main/java/at/pavlov/cannons/{interfaces/holders => cannon}/CannonDesignHolder.java (71%) delete mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/ICannon.java delete mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/CannonDataHolder.java delete mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/InventoryObject.java diff --git a/api-bukkit/pom.xml b/api-bukkit/pom.xml new file mode 100644 index 00000000..dc16d794 --- /dev/null +++ b/api-bukkit/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + at.pavlov + cannons + 1.0.0 + + + api-bukkit + + + 17 + 17 + UTF-8 + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + at.pavlov + api-internal + 1.0.0 + compile + + + org.spigotmc + spigot-api + 1.21.1-R0.1-SNAPSHOT + provided + + + + \ No newline at end of file diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/Projectile.java similarity index 99% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/Projectile.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/cannons/Projectile.java index 4a58a0a9..ebec6da0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/Projectile.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.projectile; +package at.pavlov.bukkit.cannons; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.builders.ParticleBuilder; @@ -9,7 +9,6 @@ import lombok.Getter; import lombok.Setter; import org.bukkit.FireworkEffect; -import org.bukkit.Particle; import org.bukkit.block.data.BlockData; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; diff --git a/api-internal/pom.xml b/api-internal/pom.xml index 49cc600b..fd895f51 100644 --- a/api-internal/pom.xml +++ b/api-internal/pom.xml @@ -21,6 +21,17 @@ gson 2.11.0 + + org.projectlombok + lombok + 1.18.32 + provided + + + org.jetbrains + annotations + 24.1.0 + diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/ICannon.java b/api-internal/src/main/java/at/pavlov/internal/cannons/ICannon.java new file mode 100644 index 00000000..e0a1b355 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/ICannon.java @@ -0,0 +1,8 @@ +package at.pavlov.internal.cannons; + +import at.pavlov.internal.cannons.functionalities.CannonDataHolder; +import at.pavlov.internal.cannons.functionalities.InventoryObject; + +public interface ICannon extends CannonDataHolder, InventoryObject { + boolean sameType(ICannon cannon); +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/RunnableAsync.java b/api-internal/src/main/java/at/pavlov/internal/cannons/RunnableAsync.java similarity index 86% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/RunnableAsync.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/RunnableAsync.java index a485eefe..e6caf449 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/RunnableAsync.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/RunnableAsync.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.interfaces; +package at.pavlov.internal.cannons; import at.pavlov.cannons.dao.AsyncTaskManager; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/AimingData.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/AimingData.java similarity index 76% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/AimingData.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/data/AimingData.java index 07c5d0bf..622f3d10 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/AimingData.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/AimingData.java @@ -1,10 +1,7 @@ -package at.pavlov.cannons.cannon.data; +package at.pavlov.internal.cannons.data; import lombok.Data; -import lombok.Setter; -import org.jetbrains.annotations.ApiStatus; -@Setter(onMethod_ = {@ApiStatus.Internal}) @Data public class AimingData { // sentry aiming angles the cannon tries to reach private double aimingPitch = 0.0; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/AmmoLoadingData.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/AmmoLoadingData.java similarity index 66% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/AmmoLoadingData.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/data/AmmoLoadingData.java index ab243ad9..0021e14e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/AmmoLoadingData.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/AmmoLoadingData.java @@ -1,13 +1,9 @@ -package at.pavlov.cannons.cannon.data; +package at.pavlov.internal.cannons.data; -import at.pavlov.cannons.projectile.Projectile; import lombok.Data; -import lombok.Setter; -import org.jetbrains.annotations.ApiStatus; -@Setter(onMethod_ = {@ApiStatus.Internal}) @Data -public class AmmoLoadingData { +public class AmmoLoadingData { private int loadedGunpowder; private Projectile loadedProjectile; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/AngleData.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/AngleData.java similarity index 88% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/AngleData.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/data/AngleData.java index c66e2005..b44a3ee1 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/AngleData.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/AngleData.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.cannon.data; +package at.pavlov.internal.cannons.data; import lombok.Data; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/CannonMainData.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonMainData.java similarity index 93% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/CannonMainData.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonMainData.java index 14dde8dc..461de995 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/CannonMainData.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonMainData.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.cannon.data; +package at.pavlov.internal.cannons.data; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/CannonPosition.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonPosition.java similarity index 76% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/CannonPosition.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonPosition.java index 1dfd17a6..d806b541 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/CannonPosition.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonPosition.java @@ -1,18 +1,16 @@ -package at.pavlov.cannons.cannon.data; +package at.pavlov.internal.cannons.data; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.bukkit.block.BlockFace; -import org.bukkit.util.Vector; import java.util.UUID; @NoArgsConstructor @AllArgsConstructor -@Data public class CannonPosition { +@Data public class CannonPosition { // direction the cannon is facing - private BlockFace cannonDirection; + private Direction cannonDirection; // the location is described by the offset of the cannon and the design private Vector offset; // world of the cannon diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/FiringData.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/FiringData.java similarity index 73% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/FiringData.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/data/FiringData.java index 57651e5a..db826cea 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/FiringData.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/FiringData.java @@ -1,14 +1,10 @@ -package at.pavlov.cannons.cannon.data; +package at.pavlov.internal.cannons.data; -import at.pavlov.cannons.projectile.Projectile; import lombok.Data; -import lombok.Setter; -import org.jetbrains.annotations.ApiStatus; import java.util.UUID; -@Setter(onMethod_ = {@ApiStatus.Internal}) -@Data public class FiringData { +@Data public class FiringData { // amount of fired cannonballs with this cannon private long firedCannonballs; // the projectile which was loaded previously diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/LinkingData.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/LinkingData.java similarity index 87% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/LinkingData.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/data/LinkingData.java index a5a6fb6b..a098a8d1 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/LinkingData.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/LinkingData.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.cannon.data; +package at.pavlov.internal.cannons.data; import lombok.Data; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/SentryData.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/SentryData.java similarity index 96% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/SentryData.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/data/SentryData.java index 9661f15e..7c2360a3 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/SentryData.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/SentryData.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.cannon.data; +package at.pavlov.internal.cannons.data; import lombok.Data; import lombok.Setter; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/WhitelistData.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/WhitelistData.java similarity index 79% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/WhitelistData.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/data/WhitelistData.java index 7988b2f2..da7a3e84 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/data/WhitelistData.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/WhitelistData.java @@ -1,13 +1,10 @@ -package at.pavlov.cannons.cannon.data; +package at.pavlov.internal.cannons.data; import lombok.Data; -import lombok.Setter; -import org.jetbrains.annotations.ApiStatus; import java.util.HashSet; import java.util.UUID; -@Setter(onMethod_ = {@ApiStatus.Internal}) @Data public class WhitelistData { // the last player which was added or removed from the whitelist private UUID lastWhitelisted; diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java new file mode 100644 index 00000000..9243845a --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java @@ -0,0 +1,25 @@ +package at.pavlov.internal.cannons.functionalities; + +import at.pavlov.internal.cannons.holders.AimingDataHolder; +import at.pavlov.internal.cannons.holders.AmmoLoadingDataHolder; +import at.pavlov.internal.cannons.holders.AngleDataHolder; +import at.pavlov.internal.cannons.holders.CannonMainDataHolder; +import at.pavlov.internal.cannons.holders.CannonPositionHolder; +import at.pavlov.internal.cannons.holders.FiringDataHolder; +import at.pavlov.internal.cannons.holders.LinkingDataHolder; +import at.pavlov.internal.cannons.holders.ObserverMapHolder; +import at.pavlov.internal.cannons.holders.SentryDataHolder; +import at.pavlov.internal.cannons.holders.WhitelistDataHolder; + +public interface CannonDataHolder extends + FiringDataHolder, + AimingDataHolder, + SentryDataHolder, + CannonPositionHolder, + AmmoLoadingDataHolder, + WhitelistDataHolder, + CannonMainDataHolder, + LinkingDataHolder, + AngleDataHolder, + ObserverMapHolder +{} diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/InventoryObject.java b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/InventoryObject.java new file mode 100644 index 00000000..332d59de --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/InventoryObject.java @@ -0,0 +1,11 @@ +package at.pavlov.internal.cannons.functionalities; + +import at.pavlov.internal.enums.MessageEnum; + +import java.util.List; +import java.util.UUID; + +public interface InventoryObject { + MessageEnum reloadFromChests(UUID player, boolean consumesAmmo); + List getInventoryList(); +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/Rotational.java b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/Rotational.java similarity index 82% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/Rotational.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/Rotational.java index 87214597..120783cc 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/Rotational.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/Rotational.java @@ -1,9 +1,8 @@ -package at.pavlov.cannons.interfaces.functionalities; +package at.pavlov.internal.cannons.functionalities; -import at.pavlov.cannons.Enum.CannonRotation; -import org.bukkit.util.Vector; +import at.pavlov.internal.enums.CannonRotation; -public interface Rotational { +public interface Rotational { void rotate(Vector center, CannonRotation rotation); /** diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/Updatable.java b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/Updatable.java similarity index 74% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/Updatable.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/Updatable.java index 1428b5ba..427f0288 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/Updatable.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/Updatable.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.interfaces.functionalities; +package at.pavlov.internal.cannons.functionalities; public interface Updatable { default void hasUpdated() { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/AimingDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/AimingDataHolder.java similarity index 89% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/AimingDataHolder.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/holders/AimingDataHolder.java index 32c70226..9bcfb7c3 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/AimingDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/AimingDataHolder.java @@ -1,7 +1,7 @@ -package at.pavlov.cannons.interfaces.holders; +package at.pavlov.internal.cannons.holders; -import at.pavlov.cannons.cannon.data.AimingData; -import at.pavlov.cannons.interfaces.functionalities.Updatable; +import at.pavlov.internal.cannons.data.AimingData; +import at.pavlov.internal.cannons.functionalities.Updatable; public interface AimingDataHolder extends Updatable { AimingData getAimingData(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/AmmoLoadingDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/AmmoLoadingDataHolder.java similarity index 86% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/AmmoLoadingDataHolder.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/holders/AmmoLoadingDataHolder.java index 16034293..4c1cbecc 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/AmmoLoadingDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/AmmoLoadingDataHolder.java @@ -1,15 +1,12 @@ -package at.pavlov.cannons.interfaces.holders; +package at.pavlov.internal.cannons.holders; -import at.pavlov.cannons.Enum.MessageEnum; -import at.pavlov.cannons.cannon.data.AmmoLoadingData; -import at.pavlov.cannons.interfaces.functionalities.Updatable; -import at.pavlov.cannons.projectile.Projectile; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.ApiStatus; +import at.pavlov.internal.cannons.data.AmmoLoadingData; +import at.pavlov.internal.cannons.functionalities.Updatable; +import at.pavlov.internal.enums.MessageEnum; -public interface AmmoLoadingDataHolder extends Updatable { - AmmoLoadingData getAmmoLoadingData(); - void setAmmoLoadingData(AmmoLoadingData ammoLoadingData); +public interface AmmoLoadingDataHolder extends Updatable { + AmmoLoadingData getAmmoLoadingData(); + void setAmmoLoadingData(AmmoLoadingData ammoLoadingData); //region Soot default void setSoot(double soot) { @@ -97,12 +94,10 @@ default void pushProjectile(int amount) { // the tempTimestamp set and getters were fully exposed // but there should be no reason to directly edit those - @ApiStatus.Internal default long getTemperatureTimeStamp() { return getAmmoLoadingData().getTempTimestamp(); } - @ApiStatus.Internal default void setTemperatureTimeStamp(long timestamp) { hasUpdated(); getAmmoLoadingData().setTempTimestamp(timestamp); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/AngleDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/AngleDataHolder.java similarity index 96% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/AngleDataHolder.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/holders/AngleDataHolder.java index 371b976a..a1318753 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/AngleDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/AngleDataHolder.java @@ -1,7 +1,7 @@ -package at.pavlov.cannons.interfaces.holders; +package at.pavlov.internal.cannons.holders; -import at.pavlov.cannons.cannon.data.AngleData; -import at.pavlov.cannons.interfaces.functionalities.Updatable; +import at.pavlov.internal.cannons.data.AngleData; +import at.pavlov.internal.cannons.functionalities.Updatable; public interface AngleDataHolder extends Updatable { AngleData getAngleData(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/CannonMainDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonMainDataHolder.java similarity index 88% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/CannonMainDataHolder.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonMainDataHolder.java index 2190a663..9aceaf7f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/CannonMainDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonMainDataHolder.java @@ -1,7 +1,7 @@ -package at.pavlov.cannons.interfaces.holders; +package at.pavlov.internal.cannons.holders; -import at.pavlov.cannons.cannon.data.CannonMainData; -import at.pavlov.cannons.interfaces.functionalities.Updatable; +import at.pavlov.internal.cannons.data.CannonMainData; +import at.pavlov.internal.cannons.functionalities.Updatable; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/CannonPositionHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java similarity index 70% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/CannonPositionHolder.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java index 7d407f5b..8a33db96 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/CannonPositionHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java @@ -1,22 +1,14 @@ -package at.pavlov.cannons.interfaces.holders; - -import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.cannon.data.CannonPosition; -import at.pavlov.cannons.interfaces.functionalities.Updatable; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.util.Vector; - -import java.util.List; +package at.pavlov.internal.cannons.holders; + +import at.pavlov.internal.cannons.data.CannonPosition; +import at.pavlov.internal.cannons.functionalities.Updatable; + import java.util.UUID; -public interface CannonPositionHolder extends Updatable { +public interface CannonPositionHolder extends Updatable { - CannonPosition getCannonPosition(); - void setCannonPosition(CannonPosition position); + CannonPosition getCannonPosition(); + void setCannonPosition(CannonPosition position); default Vector getVelocity() { return getCannonPosition().getVelocity(); @@ -44,11 +36,11 @@ default void setOffset(Vector offset) { this.hasUpdated(); } - default BlockFace getCannonDirection() { + default Direction getCannonDirection() { return getCannonPosition().getCannonDirection(); } - default void setCannonDirection(BlockFace cannonDirection) { + default void setCannonDirection(Direction cannonDirection) { getCannonPosition().setCannonDirection(cannonDirection); this.hasUpdated(); } @@ -57,9 +49,10 @@ default UUID getWorld() { return getCannonPosition().getWorld(); } - /** + /* * @return bukkit world from saved UUID */ + /* default World getWorldBukkit() { if (this.getWorld() == null) { return null; @@ -69,7 +62,7 @@ default World getWorldBukkit() { Cannons.logger().info("Can't find world: " + getWorld()); return Bukkit.getWorld(this.getWorld()); // return new Location(bukkitWorld, ) - } + }*/ default void setWorld(UUID world) { getCannonPosition().setWorld(world); @@ -81,12 +74,15 @@ default void setWorld(UUID world) { * * @param moved - how far the cannon has been moved */ + void move(Vector moved); + /* default void move(Vector moved) { getOffset().add(moved); this.hasUpdated(); - } + }*/ + /* Location getLocation(); - Location getMuzzle(); + Location getMuzzle();*/ } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/FiringDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/FiringDataHolder.java similarity index 82% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/FiringDataHolder.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/holders/FiringDataHolder.java index e11552b7..acd8cd47 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/FiringDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/FiringDataHolder.java @@ -1,15 +1,14 @@ -package at.pavlov.cannons.interfaces.holders; +package at.pavlov.internal.cannons.holders; -import at.pavlov.cannons.cannon.data.FiringData; -import at.pavlov.cannons.interfaces.functionalities.Updatable; -import at.pavlov.cannons.projectile.Projectile; +import at.pavlov.internal.cannons.data.FiringData; +import at.pavlov.internal.cannons.functionalities.Updatable; import java.util.UUID; //TODO: Separate all "Last" to a cannon state class if this gets too convoluted -public interface FiringDataHolder extends Updatable { - FiringData getFiringData(); - void setFiringData(FiringData firingData); +public interface FiringDataHolder extends Updatable { + FiringData getFiringData(); + void setFiringData(FiringData firingData); default Projectile getLastFiredProjectile() { return getFiringData().getLastFiredProjectile(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/LinkingDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/LinkingDataHolder.java similarity index 81% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/LinkingDataHolder.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/holders/LinkingDataHolder.java index 2b4316d6..12b446f7 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/LinkingDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/LinkingDataHolder.java @@ -1,9 +1,7 @@ -package at.pavlov.cannons.interfaces.holders; +package at.pavlov.internal.cannons.holders; -import at.pavlov.cannons.Enum.MessageEnum; -import at.pavlov.cannons.cannon.data.LinkingData; -import org.apache.commons.lang3.Validate; -import org.bukkit.entity.Player; +import at.pavlov.internal.cannons.data.LinkingData; +import at.pavlov.internal.enums.MessageEnum; import java.util.UUID; @@ -47,7 +45,7 @@ default boolean hasCannonOperator() { * @param player player will be added as cannon operator * @return message for the player */ - default MessageEnum addCannonOperator(Player player) { + default MessageEnum addCannonOperator(UUID player) { return addCannonOperator(player, true); } @@ -58,7 +56,7 @@ default MessageEnum addCannonOperator(Player player) { * @param masterCannon if the controlled cannon is a slave and not the master cannon * @return message for the player */ - MessageEnum addCannonOperator(Player player, Boolean masterCannon); + MessageEnum addCannonOperator(UUID player, Boolean masterCannon); /** * removes the player as observer @@ -77,11 +75,11 @@ default MessageEnum removeCannonOperator() { * @param player player to test * @return true is player is listed as cannon operator */ - default boolean isCannonOperator(Player player) { + default boolean isCannonOperator(UUID player) { UUID cannonOperator = getCannonOperator(); if (cannonOperator == null) return false; - return cannonOperator.equals(player.getUniqueId()); + return cannonOperator.equals(player); } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/ObserverMapHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/ObserverMapHolder.java similarity index 61% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/ObserverMapHolder.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/holders/ObserverMapHolder.java index c3895240..f016a95c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/ObserverMapHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/ObserverMapHolder.java @@ -1,8 +1,7 @@ -package at.pavlov.cannons.interfaces.holders; +package at.pavlov.internal.cannons.holders; -import at.pavlov.cannons.Enum.MessageEnum; -import org.apache.commons.lang3.Validate; -import org.bukkit.entity.Player; +import at.pavlov.internal.enums.MessageEnum; +import org.jetbrains.annotations.NotNull; import java.util.HashMap; import java.util.UUID; @@ -17,10 +16,8 @@ public interface ObserverMapHolder { * @param player player will be removed as observer * @return message for the player */ - default MessageEnum removeObserver(Player player) { - Validate.notNull(player, "player must not be null"); - - getObserverMap().remove(player.getUniqueId()); + default MessageEnum removeObserver(@NotNull UUID player) { + getObserverMap().remove(player); return MessageEnum.CannonObserverRemoved; } @@ -30,8 +27,8 @@ default MessageEnum removeObserver(Player player) { * @param player player to test * @return true is player is listed as observer */ - default boolean isObserver(Player player) { - return this.getObserverMap().containsKey(player.getUniqueId()); + default boolean isObserver(@NotNull UUID player) { + return this.getObserverMap().containsKey(player); } /** @@ -41,7 +38,7 @@ default boolean isObserver(Player player) { * @param removeAfterShowing if true, the observer only works once * @return message for the player */ - MessageEnum addObserver(Player player, boolean removeAfterShowing); + MessageEnum addObserver(@NotNull UUID player, boolean removeAfterShowing); /** * toogles the player as observer for this cannon @@ -50,10 +47,8 @@ default boolean isObserver(Player player) { * @param removeAfterShowing if true, the observer only works once * @return message for the player */ - default MessageEnum toggleObserver(Player player, boolean removeAfterShowing) { - Validate.notNull(player, "player must not be null"); - - if (getObserverMap().containsKey(player.getUniqueId())) + default MessageEnum toggleObserver(@NotNull UUID player, boolean removeAfterShowing) { + if (getObserverMap().containsKey(player)) return removeObserver(player); else return addObserver(player, removeAfterShowing); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/SentryDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/SentryDataHolder.java similarity index 97% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/SentryDataHolder.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/holders/SentryDataHolder.java index 899b828a..44c5eadd 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/SentryDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/SentryDataHolder.java @@ -1,7 +1,7 @@ -package at.pavlov.cannons.interfaces.holders; +package at.pavlov.internal.cannons.holders; import at.pavlov.cannons.cannon.data.SentryData; -import at.pavlov.cannons.interfaces.functionalities.Updatable; +import at.pavlov.internal.cannons.functionalities.Updatable; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/WhitelistDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/WhitelistDataHolder.java similarity index 90% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/WhitelistDataHolder.java rename to api-internal/src/main/java/at/pavlov/internal/cannons/holders/WhitelistDataHolder.java index c685fe81..fa747e6f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/WhitelistDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/WhitelistDataHolder.java @@ -1,7 +1,6 @@ -package at.pavlov.cannons.interfaces.holders; +package at.pavlov.internal.cannons.holders; -import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.cannon.data.WhitelistData; +import at.pavlov.internal.cannons.data.WhitelistData; import java.util.HashSet; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/CannonRotation.java b/api-internal/src/main/java/at/pavlov/internal/enums/CannonRotation.java similarity index 87% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/CannonRotation.java rename to api-internal/src/main/java/at/pavlov/internal/enums/CannonRotation.java index 14d5d02b..d5835f7f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/CannonRotation.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/CannonRotation.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; public enum CannonRotation { LEFT(-90), diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/MessageEnum.java b/api-internal/src/main/java/at/pavlov/internal/enums/MessageEnum.java similarity index 99% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/MessageEnum.java rename to api-internal/src/main/java/at/pavlov/internal/enums/MessageEnum.java index 87001ceb..5f4f28bb 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/MessageEnum.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/MessageEnum.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; public enum MessageEnum { diff --git a/cannons-bukkit/pom.xml b/cannons-bukkit/pom.xml index 472804aa..c47ec88d 100644 --- a/cannons-bukkit/pom.xml +++ b/cannons-bukkit/pom.xml @@ -81,6 +81,11 @@ api-internal 1.0.0 + + at.pavlov + api-bukkit + 1.0.0 + org.apache.commons commons-lang3 diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/CannonDesignHolder.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonDesignHolder.java similarity index 71% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/CannonDesignHolder.java rename to cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonDesignHolder.java index c1b7e6c1..3b79510b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/holders/CannonDesignHolder.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonDesignHolder.java @@ -1,9 +1,6 @@ -package at.pavlov.cannons.interfaces.holders; +package at.pavlov.cannons.cannon; -import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.cannon.CannonDesign; -import at.pavlov.cannons.cannon.DesignStorage; -import at.pavlov.cannons.interfaces.functionalities.Updatable; +import at.pavlov.internal.cannons.functionalities.Updatable; public interface CannonDesignHolder extends Updatable { void setCannonDesign(CannonDesign design); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/ICannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/ICannon.java deleted file mode 100644 index f5df0ac2..00000000 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/ICannon.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.pavlov.cannons.interfaces; - -import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.interfaces.functionalities.CannonDataHolder; -import at.pavlov.cannons.interfaces.functionalities.InventoryObject; -import org.bukkit.entity.Player; - -public interface ICannon extends CannonDataHolder, InventoryObject { - - boolean sameType(ICannon cannon); - - default boolean isAccessLinkingAllowed(Cannon fcannon, Player player) { - return !this.getCannonDesign().isAccessForOwnerOnly() || fcannon.getOwner() == player.getUniqueId(); - } -} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/CannonDataHolder.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/CannonDataHolder.java deleted file mode 100644 index 7827be04..00000000 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/CannonDataHolder.java +++ /dev/null @@ -1,27 +0,0 @@ -package at.pavlov.cannons.interfaces.functionalities; - -import at.pavlov.cannons.interfaces.holders.AimingDataHolder; -import at.pavlov.cannons.interfaces.holders.AmmoLoadingDataHolder; -import at.pavlov.cannons.interfaces.holders.AngleDataHolder; -import at.pavlov.cannons.interfaces.holders.CannonDesignHolder; -import at.pavlov.cannons.interfaces.holders.CannonMainDataHolder; -import at.pavlov.cannons.interfaces.holders.CannonPositionHolder; -import at.pavlov.cannons.interfaces.holders.FiringDataHolder; -import at.pavlov.cannons.interfaces.holders.LinkingDataHolder; -import at.pavlov.cannons.interfaces.holders.ObserverMapHolder; -import at.pavlov.cannons.interfaces.holders.SentryDataHolder; -import at.pavlov.cannons.interfaces.holders.WhitelistDataHolder; - -public interface CannonDataHolder extends - FiringDataHolder, - AimingDataHolder, - SentryDataHolder, - CannonPositionHolder, - AmmoLoadingDataHolder, - WhitelistDataHolder, - CannonDesignHolder, - CannonMainDataHolder, - LinkingDataHolder, - AngleDataHolder, - ObserverMapHolder -{} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/InventoryObject.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/InventoryObject.java deleted file mode 100644 index 66b84448..00000000 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/interfaces/functionalities/InventoryObject.java +++ /dev/null @@ -1,12 +0,0 @@ -package at.pavlov.cannons.interfaces.functionalities; - -import at.pavlov.cannons.Enum.MessageEnum; -import org.bukkit.inventory.Inventory; - -import java.util.List; -import java.util.UUID; - -public interface InventoryObject { - MessageEnum reloadFromChests(UUID player, boolean consumesAmmo); - List getInventoryList(); -} From 385fc69bb51609a3d65234b4bb9c9d1bd32448f1 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 21:03:45 +0100 Subject: [PATCH 02/97] Move enums to api-internal --- .../java/at/pavlov/bukkit}/projectile/ProjectileProperties.java | 2 +- .../src/main/java/at/pavlov/internal/enums}/BreakCause.java | 2 +- .../src/main/java/at/pavlov/internal/enums}/CommandList.java | 2 +- .../src/main/java/at/pavlov/internal/enums}/DamageType.java | 2 +- .../src/main/java/at/pavlov/internal/enums}/EntityDataType.java | 2 +- .../src/main/java/at/pavlov/internal/enums}/FakeBlockType.java | 2 +- .../src/main/java/at/pavlov/internal/enums}/InteractAction.java | 2 +- .../main/java/at/pavlov/internal/enums}/ProjectileCause.java | 2 +- .../src/main/java/at/pavlov/internal/enums}/SelectCannon.java | 2 +- .../src/main/java/at/pavlov/internal/enums}/TargetType.java | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-bukkit/src/main/java/at/pavlov/bukkit}/projectile/ProjectileProperties.java (94%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/BreakCause.java (92%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/CommandList.java (98%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/DamageType.java (61%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/EntityDataType.java (95%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/FakeBlockType.java (92%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/InteractAction.java (90%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/ProjectileCause.java (93%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/SelectCannon.java (86%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/Enum => api-internal/src/main/java/at/pavlov/internal/enums}/TargetType.java (78%) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileProperties.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/ProjectileProperties.java similarity index 94% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileProperties.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/projectile/ProjectileProperties.java index ee408df8..dfecd05e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileProperties.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/ProjectileProperties.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.projectile; +package at.pavlov.bukkit.projectile; public enum ProjectileProperties { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/BreakCause.java b/api-internal/src/main/java/at/pavlov/internal/enums/BreakCause.java similarity index 92% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/BreakCause.java rename to api-internal/src/main/java/at/pavlov/internal/enums/BreakCause.java index 4c61c01a..87b116eb 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/BreakCause.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/BreakCause.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; public enum BreakCause { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/CommandList.java b/api-internal/src/main/java/at/pavlov/internal/enums/CommandList.java similarity index 98% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/CommandList.java rename to api-internal/src/main/java/at/pavlov/internal/enums/CommandList.java index 9589e7b0..9be2b971 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/CommandList.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/CommandList.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; public enum CommandList { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/DamageType.java b/api-internal/src/main/java/at/pavlov/internal/enums/DamageType.java similarity index 61% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/DamageType.java rename to api-internal/src/main/java/at/pavlov/internal/enums/DamageType.java index c0b89f63..5f1acc83 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/DamageType.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/DamageType.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; public enum DamageType { EXPLOSION, diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/EntityDataType.java b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java similarity index 95% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/EntityDataType.java rename to api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java index 094f632c..883776c6 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/EntityDataType.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; public enum EntityDataType { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/FakeBlockType.java b/api-internal/src/main/java/at/pavlov/internal/enums/FakeBlockType.java similarity index 92% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/FakeBlockType.java rename to api-internal/src/main/java/at/pavlov/internal/enums/FakeBlockType.java index d40249f7..52205842 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/FakeBlockType.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/FakeBlockType.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; /** * Created by Peter on 25.04.2014. diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/InteractAction.java b/api-internal/src/main/java/at/pavlov/internal/enums/InteractAction.java similarity index 90% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/InteractAction.java rename to api-internal/src/main/java/at/pavlov/internal/enums/InteractAction.java index 4a436a99..fdfa9b28 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/InteractAction.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/InteractAction.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; public enum InteractAction { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/ProjectileCause.java b/api-internal/src/main/java/at/pavlov/internal/enums/ProjectileCause.java similarity index 93% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/ProjectileCause.java rename to api-internal/src/main/java/at/pavlov/internal/enums/ProjectileCause.java index 8818341c..d80d1460 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/ProjectileCause.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/ProjectileCause.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; public enum ProjectileCause { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/SelectCannon.java b/api-internal/src/main/java/at/pavlov/internal/enums/SelectCannon.java similarity index 86% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/SelectCannon.java rename to api-internal/src/main/java/at/pavlov/internal/enums/SelectCannon.java index cd6b9681..5ba0495a 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/SelectCannon.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/SelectCannon.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; public enum SelectCannon { OBSERVER, diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/TargetType.java b/api-internal/src/main/java/at/pavlov/internal/enums/TargetType.java similarity index 78% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/TargetType.java rename to api-internal/src/main/java/at/pavlov/internal/enums/TargetType.java index 75e18545..138dc0c7 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Enum/TargetType.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/TargetType.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.Enum; +package at.pavlov.internal.enums; public enum TargetType { MONSTER, From 87fff67f2963e0f75d448bea9d34a129206de7c3 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 21:05:01 +0100 Subject: [PATCH 03/97] Move main bukkit classes to api-bukkit --- .../bukkit}/builders/ParticleBuilder.java | 2 +- .../pavlov/bukkit/cannons}/CannonBlocks.java | 4 +- .../pavlov/bukkit/cannons}/CannonDesign.java | 41 +++++----- .../bukkit/cannons}/CannonDesignHolder.java | 9 +-- .../pavlov/bukkit}/container/ItemHolder.java | 16 +--- .../pavlov/bukkit}/container/SimpleBlock.java | 20 ++++- .../pavlov/bukkit}/container/SoundHolder.java | 74 +++++++++---------- .../bukkit}/container/SpawnEntityHolder.java | 29 ++++---- .../container/SpawnMaterialHolder.java | 5 +- .../{cannons => projectile}/Projectile.java | 25 +++---- .../at/pavlov/bukkit}/utils/FileUtils.java | 4 +- 11 files changed, 112 insertions(+), 117 deletions(-) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-bukkit/src/main/java/at/pavlov/bukkit}/builders/ParticleBuilder.java (91%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-bukkit/src/main/java/at/pavlov/bukkit/cannons}/CannonBlocks.java (98%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-bukkit/src/main/java/at/pavlov/bukkit/cannons}/CannonDesign.java (93%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/cannon => api-bukkit/src/main/java/at/pavlov/bukkit/cannons}/CannonDesignHolder.java (66%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-bukkit/src/main/java/at/pavlov/bukkit}/container/ItemHolder.java (90%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-bukkit/src/main/java/at/pavlov/bukkit}/container/SimpleBlock.java (89%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-bukkit/src/main/java/at/pavlov/bukkit}/container/SoundHolder.java (55%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-bukkit/src/main/java/at/pavlov/bukkit}/container/SpawnEntityHolder.java (83%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-bukkit/src/main/java/at/pavlov/bukkit}/container/SpawnMaterialHolder.java (89%) rename api-bukkit/src/main/java/at/pavlov/bukkit/{cannons => projectile}/Projectile.java (96%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-bukkit/src/main/java/at/pavlov/bukkit}/utils/FileUtils.java (88%) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/builders/ParticleBuilder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/builders/ParticleBuilder.java similarity index 91% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/builders/ParticleBuilder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/builders/ParticleBuilder.java index df17495f..6dfe5052 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/builders/ParticleBuilder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/builders/ParticleBuilder.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.builders; +package at.pavlov.bukkit.builders; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonBlocks.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java similarity index 98% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonBlocks.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java index fef85f12..08026468 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonBlocks.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java @@ -1,6 +1,6 @@ -package at.pavlov.cannons.cannon; +package at.pavlov.bukkit.cannons; -import at.pavlov.cannons.container.SimpleBlock; +import at.pavlov.bukkit.container.SimpleBlock; import org.bukkit.util.Vector; import java.util.ArrayList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java similarity index 93% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonDesign.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index 8a30380e..970f2e63 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -1,10 +1,9 @@ -package at.pavlov.cannons.cannon; +package at.pavlov.bukkit.cannons; -import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.container.ItemHolder; -import at.pavlov.cannons.container.SimpleBlock; -import at.pavlov.cannons.container.SoundHolder; -import at.pavlov.cannons.projectile.Projectile; +import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.SimpleBlock; +import at.pavlov.bukkit.container.SoundHolder; +import at.pavlov.bukkit.projectile.Projectile; import lombok.Data; import org.bukkit.Location; import org.bukkit.Material; @@ -197,7 +196,7 @@ * @param cannon * @return */ - public Location getRotationCenter(Cannon cannon) + public Location getRotationCenter(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); if (cannonBlocks != null) @@ -205,7 +204,7 @@ public Location getRotationCenter(Cannon cannon) return cannonBlocks.getRotationCenter().clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit()); } - Cannons.logger().info("missing rotation center for cannon design " + cannon.getCannonName()); + //Cannons.logger().info("missing rotation center for cannon design " + cannon.getCannonName()); return cannon.getOffset().toLocation(cannon.getWorldBukkit()); } @@ -215,7 +214,7 @@ public Location getRotationCenter(Cannon cannon) * @param cannon * @return */ - public Location getMuzzle(Cannon cannon) + public Location getMuzzle(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); if (cannonBlocks != null) @@ -223,7 +222,7 @@ public Location getMuzzle(Cannon cannon) return cannonBlocks.getMuzzle().clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit()); } - Cannons.logger().info("missing muzzle location for cannon design " + cannon.getCannonName()); + //Cannons.logger().info("missing muzzle location for cannon design " + cannon.getCannonName()); return cannon.getOffset().toLocation(cannon.getWorldBukkit()); } @@ -232,7 +231,7 @@ public Location getMuzzle(Cannon cannon) * @param cannon the used cannon * @return the firing trigger of the cannon - can be null if the cannon has no trigger */ - public Location getFiringTrigger(Cannon cannon) + public Location getFiringTrigger(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); if (cannonBlocks != null && cannonBlocks.getFiringTrigger() != null) @@ -264,7 +263,7 @@ public List getAllCannonBlocks(BlockFace cannonDirection) * @param cannon * @return */ - public List getAllCannonBlocks(Cannon cannon) + public List getAllCannonBlocks(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); @@ -284,7 +283,7 @@ public List getAllCannonBlocks(Cannon cannon) * @param cannon * @return */ - public List getDestructibleBlocks(Cannon cannon) + public List getDestructibleBlocks(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); @@ -304,7 +303,7 @@ public List getDestructibleBlocks(Cannon cannon) * @param cannon * @return */ - public List getFiringIndicator(Cannon cannon) + public List getFiringIndicator(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); @@ -323,7 +322,7 @@ public List getFiringIndicator(Cannon cannon) * @param cannon * @return */ - public List getLoadingInterface(Cannon cannon) + public List getLoadingInterface(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); @@ -342,7 +341,7 @@ public List getLoadingInterface(Cannon cannon) * @param cannon * @return */ - public List getBarrelBlocks(Cannon cannon) + public List getBarrelBlocks(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); @@ -361,7 +360,7 @@ public List getBarrelBlocks(Cannon cannon) * @param cannon * @return */ - public List getRightClickTrigger(Cannon cannon) + public List getRightClickTrigger(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); @@ -380,7 +379,7 @@ public List getRightClickTrigger(Cannon cannon) * @param cannon * @return */ - public List getRedstoneTrigger(Cannon cannon) + public List getRedstoneTrigger(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); @@ -400,7 +399,7 @@ public List getRedstoneTrigger(Cannon cannon) * @param cannon * @return */ - public List getChestsAndSigns(Cannon cannon) + public List getChestsAndSigns(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); @@ -419,7 +418,7 @@ public List getChestsAndSigns(Cannon cannon) * @param cannon * @return */ - public List getRedstoneTorches(Cannon cannon) + public List getRedstoneTorches(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); @@ -438,7 +437,7 @@ public List getRedstoneTorches(Cannon cannon) * @param cannon * @return */ - public List getRedstoneWireAndRepeater(Cannon cannon) + public List getRedstoneWireAndRepeater(CannonBukkit cannon) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonDesignHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesignHolder.java similarity index 66% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonDesignHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesignHolder.java index 3b79510b..9de1600b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonDesignHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesignHolder.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.cannon; +package at.pavlov.bukkit.cannons; import at.pavlov.internal.cannons.functionalities.Updatable; @@ -7,7 +7,7 @@ public interface CannonDesignHolder extends Updatable { CannonDesign getCannonDesign(); - default boolean sameDesign(Cannon cannon) { + default boolean sameDesign(CannonBukkit cannon) { return sameDesign(cannon.getCannonDesign()); } @@ -19,9 +19,6 @@ default String getDesignID() { return getCannonDesign().getDesignID(); } - default void setDesignID(String designID) { - setCannonDesign(DesignStorage.getInstance().getDesign(designID)); - this.hasUpdated(); - } + void setDesignID(String designID); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/ItemHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java similarity index 90% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/container/ItemHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java index 592e847e..2415e1e9 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/ItemHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java @@ -1,8 +1,5 @@ -package at.pavlov.cannons.container; +package at.pavlov.bukkit.container; -import at.pavlov.cannons.Cannons; -import org.apache.commons.lang3.StringUtils; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Block; @@ -11,7 +8,6 @@ import org.bukkit.inventory.meta.ItemMeta; import java.util.*; -import java.util.logging.Level; //small class as at.pavlov.cannons.container for item id and data @@ -22,12 +18,6 @@ public class ItemHolder private List lore; private boolean useTypeName; - //half of this stuff is useless, keeping it for compatibity maybe for now - private static Class localeClass = null; - private static Class craftItemStackClass = null, nmsItemStackClass = null, nmsItemClass = null; - private static String OBC_PREFIX = Bukkit.getServer().getClass().getPackage().getName(); - private static String NMS_PREFIX = OBC_PREFIX.replace("org.bukkit.craftbukkit", "net.minecraft.server"); - public ItemHolder(ItemStack item) { useTypeName = false; @@ -109,7 +99,7 @@ public ItemHolder(String str) s.close(); } catch(Exception e) { - Cannons.logger().log(Level.SEVERE,"[CANNONS] Error while converting " + str + ". Check formatting (minecraft:clock)"); + //Cannons.logger().log(Level.SEVERE,"[CANNONS] Error while converting " + str + ". Check formatting (minecraft:clock)"); } } @@ -224,7 +214,7 @@ public boolean equalsFuzzy(Block block) { public String toString() { - return this.material + ":" + this.displayName + ":" + StringUtils.join(this.lore, ":"); + return this.material + ":" + this.displayName + ":" + String.join(":", this.lore); } public Material getType() diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/SimpleBlock.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java similarity index 89% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/container/SimpleBlock.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java index fbfde11c..5f5a27d6 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/SimpleBlock.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java @@ -1,11 +1,11 @@ -package at.pavlov.cannons.container; +package at.pavlov.bukkit.container; -import at.pavlov.cannons.utils.CannonsUtil; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.material.Directional; import org.bukkit.util.Vector; @@ -190,7 +190,7 @@ public SimpleBlock subtract(Location loc) * @return */ public void rotate90(){ - this.blockData = CannonsUtil.roateBlockFacingClockwise(this.blockData); + this.blockData = rotateBlockFacingClockwise(this.blockData); int newx = -this.locZ; this.locZ = this.locX; this.locX = newx; @@ -249,5 +249,19 @@ public String toString() return "x:" + locX + " y:" + locY + " z:" + locZ +" blockdata:" + this.getBlockData().toString(); } + public static BlockData rotateBlockFacingClockwise(BlockData blockData){ + if (blockData instanceof org.bukkit.block.data.Directional directional){ + directional.setFacing(rotateFace(directional.getFacing())); + } + return blockData; + } + + public static BlockFace rotateFace(BlockFace face) { + if (face.equals(BlockFace.NORTH)) return BlockFace.EAST; + if (face.equals(BlockFace.EAST)) return BlockFace.SOUTH; + if (face.equals(BlockFace.SOUTH)) return BlockFace.WEST; + if (face.equals(BlockFace.WEST)) return BlockFace.NORTH; + return BlockFace.UP; + } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/SoundHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java similarity index 55% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/container/SoundHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java index 54bb7187..f10e4945 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/SoundHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java @@ -1,6 +1,5 @@ -package at.pavlov.cannons.container; +package at.pavlov.bukkit.container; -import at.pavlov.cannons.Cannons; import org.bukkit.Sound; import java.util.Locale; @@ -13,48 +12,47 @@ public class SoundHolder { private Float volume; private Float pitch; - public SoundHolder(String str) - { + public SoundHolder(String str) { // data structure: // 'IRON_GOLEM_WALK:1:0.5' - try - { + try(Scanner s = new Scanner(str).useDelimiter("\\s*:\\s*")) { soundenum = null; soundstr = null; volume = 1.0F; pitch = 1.0F; - Scanner s = new Scanner(str).useDelimiter("\\s*:\\s*"); + //Scanner s = new Scanner(str).useDelimiter("\\s*:\\s*"); // use US locale to be able to identify floats in the string s.useLocale(Locale.US); - if (s.hasNext()) - { + if (s.hasNext()) { String scan = s.next(); - if (scan!=null && !scan.equalsIgnoreCase("none")) - try { - soundenum = Sound.valueOf(scan); - } - catch(Exception e){ - soundstr = scan; - } + if (scan == null || scan.equalsIgnoreCase("none")) { + return; + } + + try { + soundenum = Sound.valueOf(scan); + } catch (Exception e) { + soundstr = scan; + } + return; } - else - Cannons.logger().log(Level.WARNING,"missing sound value in: " + str); - if (s.hasNextFloat()) + //Cannons.logger().log(Level.WARNING,"missing sound value in: " + str); + + if (s.hasNextFloat()) { volume = s.nextFloat(); - else - Cannons.logger().log(Level.WARNING,"missing volume value in: " + str); - if (s.hasNextFloat()) + return; + } + + //Cannons.logger().log(Level.WARNING,"missing volume value in: " + str); + if (s.hasNextFloat()) { pitch = s.nextFloat(); - else - Cannons.logger().log(Level.WARNING,"missing pitch value in: " + str); - s.close(); - } - catch(Exception e) - { - Cannons.logger().log(Level.SEVERE,"Error while converting " + str + ". Formatting: 'IRON_GOLEM_WALK:1:0.5'" + e.toString()); + } + //Cannons.logger().log(Level.WARNING,"missing pitch value in: " + str); + } catch (Exception e) { + //Cannons.logger().log(Level.SEVERE, "Error while converting " + str + ". Formatting: 'IRON_GOLEM_WALK:1:0.5'" + e.toString()); } } @@ -102,22 +100,22 @@ public void setPitch(Float pitch) { this.pitch = pitch; } - public boolean isValid(){ - return this.soundenum!=null || this.soundstr!=null; + public boolean isValid() { + return this.soundenum != null || this.soundstr != null; } - public boolean isSoundString(){ - return this.soundstr!=null; + public boolean isSoundString() { + return this.soundstr != null; } - public boolean isSoundEnum(){ - return this.soundenum!=null; + public boolean isSoundEnum() { + return this.soundenum != null; } - public String toString(){ - if (this.soundenum!=null) + public String toString() { + if (this.soundenum != null) return this.soundenum + ":" + volume + ":" + pitch; - else if (this.soundstr!=null) + else if (this.soundstr != null) return this.soundstr + ":" + volume + ":" + pitch; else return "Sound not found"; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/SpawnEntityHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java similarity index 83% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/container/SpawnEntityHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java index 72e9d48b..052697ca 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/SpawnEntityHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java @@ -1,13 +1,11 @@ -package at.pavlov.cannons.container; +package at.pavlov.bukkit.container; -import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.EntityDataType; +import at.pavlov.internal.enums.EntityDataType; import org.bukkit.entity.EntityType; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import java.util.*; -import java.util.logging.Level; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -38,23 +36,23 @@ public SpawnEntityHolder(String str) setType(EntityType.valueOf(result.group(1))); setMinAmount(Integer.parseInt(result.group(2))); if (getMinAmount() < 0) { - Cannons.getPlugin().logSevere("Min amount for spawned entity: " + getType() + " is <0"); + //Cannons.getPlugin().logSevere("Min amount for spawned entity: " + getType() + " is <0"); setMinAmount(0); } setMaxAmount(Integer.parseInt(result.group(3))); if (getMaxAmount() > 100) { - Cannons.getPlugin().logSevere("Max amount for spawned entity: " + getType() + " is >1000 and was reset to 10"); + //Cannons.getPlugin().logSevere("Max amount for spawned entity: " + getType() + " is >1000 and was reset to 10"); setMaxAmount(10); } } catch (Exception e) { s.close(); - Cannons.logger().log(Level.SEVERE, "Error: wrong entity type or min-max values"); + //Cannons.logger().log(Level.SEVERE, "Error: wrong entity type or min-max values"); return; } if (result.group(4) == null) { s.close(); - Cannons.logger().log(Level.WARNING, "type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); + //Cannons.logger().log(Level.WARNING, "type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); return; } @@ -77,7 +75,7 @@ public SpawnEntityHolder(String str) String[] s2 = s1.split(":(?![^\\[]*\\])"); // check if there are argument and value if (s2.length <= 1) { - Cannons.logger().log(Level.SEVERE, "" + s1 + " does not have an argument, use 'DURATION:10'"); + //Cannons.logger().log(Level.SEVERE, "" + s1 + " does not have an argument, use 'DURATION:10'"); continue; } @@ -94,8 +92,9 @@ public SpawnEntityHolder(String str) break; } } - if (!found) - Cannons.logger().log(Level.SEVERE, "'" + s2[0] + "' is not supported by Cannons"); + if (!found) { + //Cannons.logger().log(Level.SEVERE, "'" + s2[0] + "' is not supported by Cannons"); + } continue; } @@ -141,18 +140,18 @@ public SpawnEntityHolder(String str) icon = Boolean.parseBoolean(val); break; default: - Cannons.logger().log(Level.SEVERE, "'" + s3[0] + "' is not a correct potion effect argument. See Bukkit PotionType"); + //Cannons.logger().log(Level.SEVERE, "'" + s3[0] + "' is not a correct potion effect argument. See Bukkit PotionType"); } } - Cannons.getPlugin().logDebug("AREA OF EFFECT CLOUD potion type: " + type + " duration " + duration + " amplifier " + amplifier + " ambient " + ambient + " particles " + particles + " icon " + icon); + //Cannons.getPlugin().logDebug("AREA OF EFFECT CLOUD potion type: " + type + " duration " + duration + " amplifier " + amplifier + " ambient " + ambient + " particles " + particles + " icon " + icon); if (type != null && duration > 0 && amplifier > 0) potionEffects.add(new PotionEffect(type, duration, amplifier, ambient, particles, icon)); } } s.close(); - Cannons.logger().info("type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); + //Cannons.logger().info("type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); } catch(Exception e) { - Cannons.logger().log(Level.SEVERE, "Error while converting " + str + ". Check formating (Zombie 1-2 EntityData)" + e); + //Cannons.logger().log(Level.SEVERE, "Error while converting " + str + ". Check formating (Zombie 1-2 EntityData)" + e); setType(null); setMinAmount(0); setMaxAmount(0); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/SpawnMaterialHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java similarity index 89% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/container/SpawnMaterialHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java index a7c4be95..15d4f8e0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/SpawnMaterialHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java @@ -1,6 +1,5 @@ -package at.pavlov.cannons.container; +package at.pavlov.bukkit.container; -import at.pavlov.cannons.Cannons; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; @@ -31,7 +30,7 @@ public SpawnMaterialHolder(String str) } catch(Exception e) { - Cannons.logger().log(Level.SEVERE,"Error while converting " + str + ". Check formatting (minecraft:cobweb 1-2)"); + //Cannons.logger().log(Level.SEVERE,"Error while converting " + str + ". Check formatting (minecraft:cobweb 1-2)"); material = Bukkit.createBlockData(Material.AIR); setMinAmount(0); setMaxAmount(0); diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java similarity index 96% rename from api-bukkit/src/main/java/at/pavlov/bukkit/cannons/Projectile.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index ebec6da0..71a72113 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -1,11 +1,10 @@ -package at.pavlov.bukkit.cannons; - -import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.builders.ParticleBuilder; -import at.pavlov.cannons.container.ItemHolder; -import at.pavlov.cannons.container.SoundHolder; -import at.pavlov.cannons.container.SpawnEntityHolder; -import at.pavlov.cannons.container.SpawnMaterialHolder; +package at.pavlov.bukkit.projectile; + +import at.pavlov.bukkit.builders.ParticleBuilder; +import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.SoundHolder; +import at.pavlov.bukkit.container.SpawnEntityHolder; +import at.pavlov.bukkit.container.SpawnMaterialHolder; import lombok.Getter; import lombok.Setter; import org.bukkit.FireworkEffect; @@ -26,7 +25,7 @@ public class Projectile implements Cloneable{ private String itemName; private ItemHolder loadingItem; //list of items or blocks that can represent this this (e.g. redstone dust may for wire when you click a block) - private List alternativeItemList = new ArrayList(); + private List alternativeItemList = new ArrayList<>(); //properties of the cannonball private EntityType projectileEntity; @@ -39,7 +38,7 @@ public class Projectile implements Cloneable{ private int numberOfBullets; private double spreadMultiplier; private int sentryIgnoredBlocks; - private List propertyList = new ArrayList(); + private List propertyList = new ArrayList<>(); //smokeTrail private boolean smokeTrailEnabled; @@ -79,8 +78,8 @@ public class Projectile implements Cloneable{ private double spawnBlockRadius; private double spawnEntityRadius; private double spawnVelocity; - private List spawnBlocks = new ArrayList(); - private List spawnEntities = new ArrayList(); + private List spawnBlocks = new ArrayList<>(); + private List spawnEntities = new ArrayList<>(); private List spawnProjectiles; //spawn Fireworks @@ -117,7 +116,7 @@ public Projectile clone(){ } catch(CloneNotSupportedException e) { - Cannons.logger().info("Cloning not allowed."); + //Cannons.logger().info("Cloning not allowed."); return this; } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/FileUtils.java b/api-bukkit/src/main/java/at/pavlov/bukkit/utils/FileUtils.java similarity index 88% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/utils/FileUtils.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/utils/FileUtils.java index 584d0aaa..66356367 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/FileUtils.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/utils/FileUtils.java @@ -1,6 +1,6 @@ -package at.pavlov.cannons.utils; +package at.pavlov.bukkit.utils; -import at.pavlov.cannons.builders.ParticleBuilder; +import at.pavlov.bukkit.builders.ParticleBuilder; import org.bukkit.Particle; import org.bukkit.configuration.file.FileConfiguration; From 176a6ef3b769b2e6a6ee57ce756be30ab5f5b7fa Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 21:05:20 +0100 Subject: [PATCH 04/97] Get this somewhere else --- .../main/java/at/pavlov/cannons/scheduler}/RunnableAsync.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename {api-internal/src/main/java/at/pavlov/internal/cannons => cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler}/RunnableAsync.java (87%) diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/RunnableAsync.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/RunnableAsync.java similarity index 87% rename from api-internal/src/main/java/at/pavlov/internal/cannons/RunnableAsync.java rename to cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/RunnableAsync.java index e6caf449..0a437dcd 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/RunnableAsync.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/RunnableAsync.java @@ -1,4 +1,4 @@ -package at.pavlov.internal.cannons; +package at.pavlov.cannons.scheduler; import at.pavlov.cannons.dao.AsyncTaskManager; From b4e2e2806daa062d726c751dbd9d7bd9ed4ff506 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 21:10:52 +0100 Subject: [PATCH 05/97] Complete interfaces --- .../pavlov/bukkit/cannons/CannonBukkit.java | 13 +++++++ .../cannons/CannonDataHolderBukkit.java | 28 +++++++++++++++ .../holders/CannonPositionHBukkit.java | 34 +++++++++++++++++++ .../at/pavlov/internal/cannons/ICannon.java | 8 ----- .../cannons/holders/SentryDataHolder.java | 2 +- 5 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBukkit.java create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java delete mode 100644 api-internal/src/main/java/at/pavlov/internal/cannons/ICannon.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBukkit.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBukkit.java new file mode 100644 index 00000000..5ce21763 --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBukkit.java @@ -0,0 +1,13 @@ +package at.pavlov.bukkit.cannons; + +import at.pavlov.internal.cannons.functionalities.InventoryObject; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; + +public interface CannonBukkit extends CannonDataHolderBukkit, InventoryObject { + boolean sameType(CannonBukkit cannonBukkit); + + default boolean isAccessLinkingAllowed(CannonBukkit fcannon, Player player) { + return !this.getCannonDesign().isAccessForOwnerOnly() || fcannon.getOwner() == player.getUniqueId(); + } +} diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java new file mode 100644 index 00000000..f1a7430e --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java @@ -0,0 +1,28 @@ +package at.pavlov.bukkit.cannons; + +import at.pavlov.bukkit.cannons.holders.CannonPositionHBukkit; +import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.internal.cannons.holders.AimingDataHolder; +import at.pavlov.internal.cannons.holders.AmmoLoadingDataHolder; +import at.pavlov.internal.cannons.holders.AngleDataHolder; +import at.pavlov.internal.cannons.holders.CannonMainDataHolder; +import at.pavlov.internal.cannons.holders.FiringDataHolder; +import at.pavlov.internal.cannons.holders.LinkingDataHolder; +import at.pavlov.internal.cannons.holders.ObserverMapHolder; +import at.pavlov.internal.cannons.holders.SentryDataHolder; +import at.pavlov.internal.cannons.holders.WhitelistDataHolder; +import org.bukkit.entity.Player; + +public interface CannonDataHolderBukkit extends + AimingDataHolder, + AmmoLoadingDataHolder, + AngleDataHolder, + CannonMainDataHolder, + CannonPositionHBukkit, + FiringDataHolder, + LinkingDataHolder, + ObserverMapHolder, + SentryDataHolder, + WhitelistDataHolder, + CannonDesignHolder +{} diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java new file mode 100644 index 00000000..6e99879b --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java @@ -0,0 +1,34 @@ +package at.pavlov.bukkit.cannons.holders; + +import at.pavlov.internal.cannons.holders.CannonPositionHolder; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.BlockFace; +import org.bukkit.util.Vector; + +public interface CannonPositionHBukkit extends CannonPositionHolder { + + /** + * @return bukkit world from saved UUID + */ + default World getWorldBukkit() { + if (this.getWorld() == null) { + return null; + } + World bukkitWorld = Bukkit.getWorld(this.getWorld()); + //if (bukkitWorld == null) + // Cannons.logger().info("Can't find world: " + getWorld()); + return Bukkit.getWorld(this.getWorld()); + // return new Location(bukkitWorld, ) + } + + default void move(Vector moved) { + getOffset().add(moved); + this.hasUpdated(); + } + + Location getLocation(); + + Location getMuzzle(); +} diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/ICannon.java b/api-internal/src/main/java/at/pavlov/internal/cannons/ICannon.java deleted file mode 100644 index e0a1b355..00000000 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/ICannon.java +++ /dev/null @@ -1,8 +0,0 @@ -package at.pavlov.internal.cannons; - -import at.pavlov.internal.cannons.functionalities.CannonDataHolder; -import at.pavlov.internal.cannons.functionalities.InventoryObject; - -public interface ICannon extends CannonDataHolder, InventoryObject { - boolean sameType(ICannon cannon); -} diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/SentryDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/SentryDataHolder.java index 44c5eadd..71eda0a5 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/SentryDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/SentryDataHolder.java @@ -1,6 +1,6 @@ package at.pavlov.internal.cannons.holders; -import at.pavlov.cannons.cannon.data.SentryData; +import at.pavlov.internal.cannons.data.SentryData; import at.pavlov.internal.cannons.functionalities.Updatable; import java.util.UUID; From dfdd85e880d0914ae926aab2f586681f8b7daca2 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 21:11:01 +0100 Subject: [PATCH 06/97] Complete interfaces x2 --- .../cannons/holders/CannonPositionHolder.java | 25 ------------------- 1 file changed, 25 deletions(-) diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java index 8a33db96..4555652f 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java @@ -49,21 +49,6 @@ default UUID getWorld() { return getCannonPosition().getWorld(); } - /* - * @return bukkit world from saved UUID - */ - /* - default World getWorldBukkit() { - if (this.getWorld() == null) { - return null; - } - World bukkitWorld = Bukkit.getWorld(this.getWorld()); - if (bukkitWorld == null) - Cannons.logger().info("Can't find world: " + getWorld()); - return Bukkit.getWorld(this.getWorld()); - // return new Location(bukkitWorld, ) - }*/ - default void setWorld(UUID world) { getCannonPosition().setWorld(world); this.hasUpdated(); @@ -75,14 +60,4 @@ default void setWorld(UUID world) { * @param moved - how far the cannon has been moved */ void move(Vector moved); - /* - default void move(Vector moved) { - getOffset().add(moved); - this.hasUpdated(); - }*/ - /* - - Location getLocation(); - - Location getMuzzle();*/ } From 98d89f4da08d0555cb5f094eb81399e19bacac14 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 21:19:32 +0100 Subject: [PATCH 07/97] Add/Fix poms --- api-bukkit/pom.xml | 6 ++++++ pom.xml | 1 + 2 files changed, 7 insertions(+) diff --git a/api-bukkit/pom.xml b/api-bukkit/pom.xml index dc16d794..b4b28fae 100644 --- a/api-bukkit/pom.xml +++ b/api-bukkit/pom.xml @@ -37,6 +37,12 @@ 1.21.1-R0.1-SNAPSHOT provided + + org.projectlombok + lombok + 1.18.32 + provided + \ No newline at end of file diff --git a/pom.xml b/pom.xml index ceebd3da..9e9d3067 100644 --- a/pom.xml +++ b/pom.xml @@ -19,5 +19,6 @@ api-internal cannons-bukkit + api-bukkit \ No newline at end of file From 9a58ad795f19e26470e4424b2677e08266f171b8 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 21:19:38 +0100 Subject: [PATCH 08/97] Fix imports --- .../at/pavlov/cannons/API/CannonsAPI.java | 6 +- .../main/java/at/pavlov/cannons/Aiming.java | 20 ++--- .../main/java/at/pavlov/cannons/Cannons.java | 32 +++----- .../at/pavlov/cannons/CreateExplosion.java | 18 ++--- .../java/at/pavlov/cannons/FireCannon.java | 20 ++--- .../java/at/pavlov/cannons/cannon/Cannon.java | 79 +++++++++++-------- .../pavlov/cannons/cannon/CannonManager.java | 10 +-- .../pavlov/cannons/cannon/DesignStorage.java | 8 +- .../commands/CannonsCommandManager.java | 2 +- .../at/pavlov/cannons/commands/Commands.java | 15 ++-- .../java/at/pavlov/cannons/config/Config.java | 6 +- .../pavlov/cannons/config/UserMessages.java | 4 +- .../pavlov/cannons/container/DeathCause.java | 2 +- .../cannons/container/FakeBlockEntry.java | 2 +- .../at/pavlov/cannons/container/Target.java | 2 +- .../pavlov/cannons/dao/DeleteCannonTask.java | 2 +- .../at/pavlov/cannons/dao/LoadCannonTask.java | 4 +- .../pavlov/cannons/dao/LoadWhitelistTask.java | 2 +- .../at/pavlov/cannons/dao/SaveCannonTask.java | 4 +- .../cannons/dao/wrappers/FireTaskWrapper.java | 2 +- .../dao/wrappers/RemoveTaskWrapper.java | 2 +- .../event/CannonBeforeCreateEvent.java | 2 +- .../cannons/event/CannonDamageEvent.java | 4 +- .../cannons/event/CannonDestroyedEvent.java | 2 +- .../cannons/event/CannonPreLoadEvent.java | 2 +- .../pavlov/cannons/event/CannonUseEvent.java | 2 +- .../event/CannonsEntityDeathEvent.java | 2 +- .../cannons/event/ProjectileImpactEvent.java | 2 +- .../event/ProjectilePiercingEvent.java | 3 +- .../hooks/papi/CannonsPAPIExpansion.java | 3 +- .../cannons/listener/BlockListener.java | 2 +- .../cannons/listener/EntityListener.java | 2 +- .../cannons/listener/PlayerListener.java | 8 +- .../cannons/listener/RedstoneListener.java | 4 +- .../cannons/projectile/FlyingProjectile.java | 3 +- .../cannons/projectile/ProjectileManager.java | 3 +- .../cannons/projectile/ProjectileStorage.java | 11 +-- .../cannons/scheduler/FakeBlockHandler.java | 2 +- .../cannons/scheduler/ProjectileObserver.java | 10 +-- .../pavlov/cannons/utils/CannonSelector.java | 6 +- .../at/pavlov/cannons/utils/CannonsUtil.java | 4 +- .../cannons/utils/DesignComparator.java | 2 +- .../at/pavlov/cannons/utils/ParseUtils.java | 6 +- .../at/pavlov/cannons/utils/SoundUtils.java | 4 +- 44 files changed, 171 insertions(+), 160 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java index 391ded75..301d3323 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java @@ -1,9 +1,9 @@ package at.pavlov.cannons.API; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.BreakCause; -import at.pavlov.cannons.Enum.InteractAction; -import at.pavlov.cannons.Enum.MessageEnum; +import at.pavlov.internal.enums.BreakCause; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import net.countercraft.movecraft.MovecraftLocation; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index 2078f227..5a407a97 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -1,13 +1,13 @@ package at.pavlov.cannons; -import at.pavlov.cannons.Enum.FakeBlockType; -import at.pavlov.cannons.Enum.InteractAction; -import at.pavlov.cannons.Enum.MessageEnum; -import at.pavlov.cannons.Enum.TargetType; +import at.pavlov.internal.enums.FakeBlockType; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.internal.enums.TargetType; import at.pavlov.cannons.aim.GunAngles; import at.pavlov.cannons.aim.GunAnglesWrapper; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.cannon.CannonDesign; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.config.Config; @@ -18,7 +18,7 @@ import at.pavlov.cannons.event.CannonLinkAimingEvent; import at.pavlov.cannons.event.CannonTargetEvent; import at.pavlov.cannons.event.CannonUseEvent; -import at.pavlov.cannons.projectile.Projectile; +import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.scheduler.FakeBlockHandler; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; @@ -508,7 +508,7 @@ private boolean handleAutoamingFineadjusting(boolean playerInRange, Player playe boolean checkDesign = fcannon.getCannonDesign().equals(cannon.getCannonDesign()); boolean canAccess = cannon.isAccessLinkingAllowed(fcannon, player); - if (fcannon.isCannonOperator(player) && checkDesign && canAccess) + if (fcannon.isCannonOperator(player.getUniqueId()) && checkDesign && canAccess) updateAngle(player, fcannon, null, InteractAction.adjustAutoaim); } @@ -1018,7 +1018,7 @@ public MessageEnum enableAimingMode(Player player, Cannon cannon) { inAimingMode.put(player.getUniqueId(), cannon.getUID()); - MessageEnum message = cannon.addCannonOperator(player, true); + MessageEnum message = cannon.addCannonOperator(player.getUniqueId(), true); if (message != MessageEnum.AimingModeEnabled) return message; @@ -1035,7 +1035,7 @@ public MessageEnum enableAimingMode(Player player, Cannon cannon) { for (Cannon fcannon : event.getCannonList()) { if (fcannon.getCannonDesign().equals(cannon.getCannonDesign()) || event.isSameDesign()) - fcannon.addCannonOperator(player, false); + fcannon.addCannonOperator(player.getUniqueId(), false); } return MessageEnum.AimingModeEnabled; @@ -1234,7 +1234,7 @@ public void removePlayer(Player player) { */ public void removeObserverForAllCannons(Player player) { for (Cannon cannon : CannonManager.getCannonList().values()) { - cannon.removeObserver(player); + cannon.removeObserver(player.getUniqueId()); userMessages.sendMessage(MessageEnum.CannonObserverRemoved, player, cannon); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java index 089fc978..334a7008 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java @@ -1,16 +1,17 @@ package at.pavlov.cannons; +import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.API.CannonsAPI; -import at.pavlov.cannons.Enum.MessageEnum; +import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.cannon.CannonDesign; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.commands.CannonsCommandManager; import at.pavlov.cannons.commands.Commands; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.cannons.container.ItemHolder; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.PersistenceDatabase; import at.pavlov.cannons.hooks.movecraft.MovecraftHook; @@ -19,7 +20,6 @@ import at.pavlov.cannons.hooks.movecraft.type.MaxCannonsProperty; import at.pavlov.cannons.hooks.movecraftcombat.MovecraftCombatHook; import at.pavlov.cannons.listener.*; -import at.pavlov.cannons.projectile.Projectile; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.scheduler.FakeBlockHandler; @@ -61,6 +61,7 @@ public final class Cannons extends JavaPlugin private FireCannon fireCannon; private ProjectileObserver observer; + @Getter private CannonsAPI cannonsAPI; @Getter private HookManager hookManager; @@ -82,8 +83,10 @@ public final class Cannons extends JavaPlugin @Getter private boolean folia = false; - private final String cannonDatabase = "cannonlist_2_4_6"; - private final String whitelistDatabase = "whitelist_2_4_6"; + @Getter + private final String cannonDatabase = "cannonlist_2_4_6"; + @Getter + private final String whitelistDatabase = "whitelist_2_4_6"; public static Cannons getPlugin() { return (Cannons) Bukkit.getPluginManager().getPlugin("Cannons"); @@ -459,16 +462,19 @@ public ProjectileStorage getProjectileStorage() return ProjectileStorage.getInstance(); } + @Deprecated(forRemoval = true) public Projectile getProjectile(Cannon cannon, ItemHolder materialHolder) { return ProjectileStorage.getProjectile(cannon, materialHolder); } - + + @Deprecated(forRemoval = true) public Projectile getProjectile(Cannon cannon, ItemStack item) { return ProjectileStorage.getProjectile(cannon, item); } + @Deprecated(forRemoval = true) public Cannon getCannon(UUID id) { return CannonManager.getCannon(id); @@ -504,10 +510,6 @@ public ProjectileManager getProjectileManager(){ return ProjectileManager.getInstance(); } - public CannonsAPI getCannonsAPI() { - return cannonsAPI; - } - public BlockListener getBlockListener() { return blockListener; } @@ -521,14 +523,6 @@ public Economy getEconomy(){ return vaultHook.hook(); } - public String getCannonDatabase() { - return cannonDatabase; - } - - public String getWhitelistDatabase() { - return whitelistDatabase; - } - public void setDebugMode(boolean debugMode) { this.debugMode = debugMode; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 4fa10955..069240cc 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -1,14 +1,16 @@ package at.pavlov.cannons; -import at.pavlov.cannons.Enum.DamageType; -import at.pavlov.cannons.Enum.EntityDataType; -import at.pavlov.cannons.Enum.FakeBlockType; -import at.pavlov.cannons.Enum.ProjectileCause; +import at.pavlov.bukkit.container.SoundHolder; +import at.pavlov.bukkit.container.SpawnEntityHolder; +import at.pavlov.bukkit.container.SpawnMaterialHolder; +import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.ProjectileProperties; +import at.pavlov.internal.enums.DamageType; +import at.pavlov.internal.enums.EntityDataType; +import at.pavlov.internal.enums.FakeBlockType; +import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.container.DeathCause; -import at.pavlov.cannons.container.SoundHolder; -import at.pavlov.cannons.container.SpawnEntityHolder; -import at.pavlov.cannons.container.SpawnMaterialHolder; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.DelayedTask; import at.pavlov.cannons.event.CannonDamageEvent; @@ -18,9 +20,7 @@ import at.pavlov.cannons.multiversion.EntityTypeResolver; import at.pavlov.cannons.multiversion.EventResolver; import at.pavlov.cannons.projectile.FlyingProjectile; -import at.pavlov.cannons.projectile.Projectile; import at.pavlov.cannons.projectile.ProjectileManager; -import at.pavlov.cannons.projectile.ProjectileProperties; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.scheduler.FakeBlockHandler; import at.pavlov.cannons.utils.ArmorCalculationUtil; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index e84b5ed9..ef67942d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -1,12 +1,14 @@ package at.pavlov.cannons; -import at.pavlov.cannons.Enum.BreakCause; -import at.pavlov.cannons.Enum.FakeBlockType; -import at.pavlov.cannons.Enum.InteractAction; -import at.pavlov.cannons.Enum.MessageEnum; -import at.pavlov.cannons.Enum.ProjectileCause; +import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.ProjectileProperties; +import at.pavlov.internal.enums.BreakCause; +import at.pavlov.internal.enums.FakeBlockType; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.cannon.CannonDesign; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.dao.AsyncTaskManager; @@ -15,9 +17,7 @@ import at.pavlov.cannons.event.CannonUseEvent; import at.pavlov.cannons.multiversion.ParticleResolver; import at.pavlov.cannons.multiversion.PotionTypeResolver; -import at.pavlov.cannons.projectile.Projectile; import at.pavlov.cannons.projectile.ProjectileManager; -import at.pavlov.cannons.projectile.ProjectileProperties; import at.pavlov.cannons.dao.DelayedTask; import at.pavlov.cannons.dao.wrappers.FireTaskWrapper; import at.pavlov.cannons.scheduler.FakeBlockHandler; @@ -146,10 +146,10 @@ public MessageEnum playerFiring(Cannon cannon, Player player, InteractAction act LinkedList linkedCannons = new LinkedList<>(); for (Cannon fcannon : CannonManager.getCannonsInBox(cannon.getLocation(), d, d, d)) { - plugin.logDebug(fcannon.getCannonName() + " is cannon operator: " + fcannon.isCannonOperator(player)); + plugin.logDebug(fcannon.getCannonName() + " is cannon operator: " + fcannon.isCannonOperator(player.getUniqueId())); boolean allowedToFire = cannon.isAccessLinkingAllowed(fcannon, player); - if (fcannon.isCannonOperator(player) && + if (fcannon.isCannonOperator(player.getUniqueId()) && fcannon.canAimYaw(player.getEyeLocation().getYaw()) && /*fcannon.isAimingFinished() &&*/ fcannon.sameDesign(cannon) && diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index 14474c4b..d55b1386 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -1,28 +1,31 @@ package at.pavlov.cannons.cannon; +import at.pavlov.bukkit.cannons.CannonBlocks; +import at.pavlov.bukkit.cannons.CannonBukkit; +import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.cannons.CannonDesignHolder; +import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.SimpleBlock; +import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.BreakCause; -import at.pavlov.cannons.Enum.CannonRotation; -import at.pavlov.cannons.Enum.InteractAction; -import at.pavlov.cannons.Enum.MessageEnum; -import at.pavlov.cannons.cannon.data.AimingData; -import at.pavlov.cannons.cannon.data.AmmoLoadingData; -import at.pavlov.cannons.cannon.data.AngleData; -import at.pavlov.cannons.cannon.data.CannonMainData; -import at.pavlov.cannons.cannon.data.CannonPosition; -import at.pavlov.cannons.cannon.data.LinkingData; -import at.pavlov.cannons.cannon.data.SentryData; -import at.pavlov.cannons.cannon.data.WhitelistData; -import at.pavlov.cannons.container.ItemHolder; -import at.pavlov.cannons.container.SimpleBlock; -import at.pavlov.cannons.cannon.data.FiringData; +import at.pavlov.internal.enums.BreakCause; +import at.pavlov.internal.enums.CannonRotation; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.internal.cannons.data.AimingData; +import at.pavlov.internal.cannons.data.AmmoLoadingData; +import at.pavlov.internal.cannons.data.AngleData; +import at.pavlov.internal.cannons.data.CannonMainData; +import at.pavlov.internal.cannons.data.CannonPosition; +import at.pavlov.internal.cannons.data.LinkingData; +import at.pavlov.internal.cannons.data.SentryData; +import at.pavlov.internal.cannons.data.WhitelistData; +import at.pavlov.internal.cannons.data.FiringData; import at.pavlov.cannons.event.CannonDestroyedEvent; import at.pavlov.cannons.event.CannonGunpowderLoadEvent; import at.pavlov.cannons.event.CannonPreLoadEvent; import at.pavlov.cannons.event.CannonUseEvent; -import at.pavlov.cannons.interfaces.ICannon; -import at.pavlov.cannons.interfaces.functionalities.Rotational; -import at.pavlov.cannons.projectile.Projectile; +import at.pavlov.internal.cannons.functionalities.Rotational; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.InventoryManagement; @@ -45,6 +48,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.material.Attachable; import org.bukkit.util.Vector; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -52,13 +56,13 @@ import java.util.Random; import java.util.UUID; -public class Cannon implements ICannon, Rotational { +public class Cannon implements CannonBukkit, CannonDesignHolder, Rotational { private CannonMainData mainData; - private CannonPosition cannonPosition; + private CannonPosition cannonPosition; - private AmmoLoadingData ammoLoadingData = new AmmoLoadingData(); - private FiringData firingData = new FiringData(); + private AmmoLoadingData ammoLoadingData = new AmmoLoadingData<>(); + private FiringData firingData = new FiringData<>(); private AimingData aimingData = new AimingData(); private AngleData angleData = new AngleData(); @@ -1321,7 +1325,7 @@ public boolean equals(CannonDesign cannonDesign) { */ @Override public boolean equals(Object obj) { - if (obj instanceof ICannon obj2) { + if (obj instanceof CannonBukkit obj2) { return this.getUID().equals(obj2.getUID()); } return false; @@ -1333,7 +1337,7 @@ public int hashCode() { } @Override - public boolean sameType(ICannon cannon) { + public boolean sameType(CannonBukkit cannon) { if (!(cannon instanceof Cannon blockCannon)) { return false; } @@ -1395,6 +1399,12 @@ public CannonDesign getCannonDesign() { return this.design; } + @Override + public void setDesignID(String designID) { + setCannonDesign(DesignStorage.getInstance().getDesign(designID)); + this.hasUpdated(); + } + public void setLastUser(UUID lastUser) { this.firingData.setLastUser(lastUser); if (design.isLastUserBecomesOwner()) @@ -1597,6 +1607,11 @@ public HashMap getObserverMap() { return observerMap; } + @Override + public MessageEnum addObserver(@NotNull UUID player, boolean removeAfterShowing) { + return addObserver(Bukkit.getPlayer(player), removeAfterShowing); + } + /** * add the player as observer for this cannon * @@ -1732,11 +1747,13 @@ public EntityType getProjectileEntityType() { /** * add the player as cannon operator for this cannon, if * - * @param player player will be added as cannon operator + * @param playerID player id will be added as cannon operator * @param masterCannon if the controlled cannon is a slave and not the master cannon * @return message for the player */ - public MessageEnum addCannonOperator(Player player, Boolean masterCannon) { + public MessageEnum addCannonOperator(UUID playerID, Boolean masterCannon) { + Validate.notNull(playerID, "player must not be null"); + var player = Bukkit.getPlayer(playerID); Validate.notNull(player, "player must not be null"); //permission check @@ -1754,13 +1771,13 @@ public MessageEnum addCannonOperator(Player player, Boolean masterCannon) { } @Override - public FiringData getFiringData() { + public FiringData getFiringData() { this.hasUpdated(); return this.firingData; } @Override - public void setFiringData(FiringData firingData) { + public void setFiringData(FiringData firingData) { this.hasUpdated(); this.firingData = firingData; } @@ -1796,7 +1813,7 @@ public CannonPosition getCannonPosition() { } @Override - public void setCannonPosition(CannonPosition position) { + public void setCannonPosition(CannonPosition position) { this.hasUpdated(); this.cannonPosition = position; } @@ -1838,13 +1855,13 @@ public void setAngleData(AngleData angleData) { } @Override - public AmmoLoadingData getAmmoLoadingData() { + public AmmoLoadingData getAmmoLoadingData() { this.hasUpdated(); return ammoLoadingData; } @Override - public void setAmmoLoadingData(AmmoLoadingData ammoLoadingData) { + public void setAmmoLoadingData(AmmoLoadingData ammoLoadingData) { this.hasUpdated(); this.ammoLoadingData = ammoLoadingData; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index eb727cd4..a6d04328 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -1,13 +1,14 @@ package at.pavlov.cannons.cannon; +import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.SimpleBlock; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.BreakCause; -import at.pavlov.cannons.Enum.MessageEnum; +import at.pavlov.internal.enums.BreakCause; +import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.cannons.container.ItemHolder; -import at.pavlov.cannons.container.SimpleBlock; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.LoadWhitelistTask; import at.pavlov.cannons.event.CannonAfterCreateEvent; @@ -34,7 +35,6 @@ import java.util.LinkedList; import java.util.List; import java.util.UUID; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index 08cb8e16..bdafa35b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -1,10 +1,12 @@ package at.pavlov.cannons.cannon; +import at.pavlov.bukkit.cannons.CannonBlocks; +import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.SimpleBlock; +import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.container.DesignFileName; -import at.pavlov.cannons.container.ItemHolder; -import at.pavlov.cannons.container.SimpleBlock; -import at.pavlov.cannons.container.SoundHolder; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.DesignComparator; import at.pavlov.cannons.utils.ParseUtils; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/CannonsCommandManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/CannonsCommandManager.java index a0c61fa7..5bda0363 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/CannonsCommandManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/CannonsCommandManager.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.commands; -import at.pavlov.cannons.Enum.SelectCannon; +import at.pavlov.internal.enums.SelectCannon; import co.aikar.commands.CommandIssuer; import co.aikar.commands.InvalidCommandArgument; import co.aikar.commands.PaperCommandManager; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java index 07b5267c..045a2622 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java @@ -2,19 +2,19 @@ import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.BreakCause; -import at.pavlov.cannons.Enum.CommandList; -import at.pavlov.cannons.Enum.MessageEnum; -import at.pavlov.cannons.Enum.SelectCannon; +import at.pavlov.internal.enums.BreakCause; +import at.pavlov.internal.enums.CommandList; +import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.internal.enums.SelectCannon; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.cannon.CannonDesign; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.PersistenceDatabase; -import at.pavlov.cannons.projectile.Projectile; +import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.utils.CannonSelector; import at.pavlov.cannons.utils.CannonsUtil; @@ -34,7 +34,6 @@ import java.util.List; import java.util.Locale; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; @CommandAlias("cannons") @SuppressWarnings("deprecation") @@ -304,7 +303,7 @@ public static void onObserver(Player player, String[] args) { //selection done by a string '/cannons observer CANNON_NAME' Cannon cannon = CannonManager.getCannon(args[0]); if (cannon != null) - cannon.toggleObserver(player, false); + cannon.toggleObserver(player.getUniqueId(), false); else userMessages.sendMessage(MessageEnum.CmdCannonNotFound, player); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java index cadf3842..7131949c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java @@ -1,14 +1,14 @@ package at.pavlov.cannons.config; +import at.pavlov.bukkit.builders.ParticleBuilder; +import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.utils.FileUtils; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.builders.ParticleBuilder; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.cannons.container.ItemHolder; import at.pavlov.cannons.multiversion.ParticleResolver; import at.pavlov.cannons.utils.ArmorCalculationUtil; import at.pavlov.cannons.utils.CannonsUtil; -import at.pavlov.cannons.utils.FileUtils; import at.pavlov.cannons.utils.ParseUtils; import lombok.Data; import lombok.Getter; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java index 19e5ef45..28de2d6f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java @@ -1,10 +1,10 @@ package at.pavlov.cannons.config; +import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.MessageEnum; +import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.cannons.projectile.Projectile; import at.pavlov.cannons.utils.CannonsUtil; import lombok.Getter; import org.apache.commons.lang3.StringUtils; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java index 47c2bd43..abe7f3e0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.container; -import at.pavlov.cannons.projectile.Projectile; +import at.pavlov.bukkit.projectile.Projectile; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java index 80e074fd..5e81c7af 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.container; -import at.pavlov.cannons.Enum.FakeBlockType; +import at.pavlov.internal.enums.FakeBlockType; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java index 8f088599..84ebb1b3 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.container; -import at.pavlov.cannons.Enum.TargetType; +import at.pavlov.internal.enums.TargetType; import at.pavlov.cannons.cannon.Cannon; import org.bukkit.Location; import org.bukkit.entity.*; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java index b220e5a9..2384bced 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.dao; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.interfaces.RunnableAsync; +import at.pavlov.cannons.scheduler.RunnableAsync; import java.sql.Statement; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java index 71d21b07..52361654 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java @@ -2,9 +2,9 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.cannon.CannonDesign; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.DesignStorage; -import at.pavlov.cannons.interfaces.RunnableAsync; +import at.pavlov.cannons.scheduler.RunnableAsync; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.scheduler.CreateCannon; import org.bukkit.Bukkit; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java index 4dba2c87..e50ac5c6 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java @@ -3,7 +3,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.cannons.interfaces.RunnableAsync; +import at.pavlov.cannons.scheduler.RunnableAsync; import java.sql.ResultSet; import java.sql.Statement; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java index c85e20a3..48cf914d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java @@ -1,10 +1,10 @@ package at.pavlov.cannons.dao; +import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.cannons.interfaces.RunnableAsync; -import at.pavlov.cannons.projectile.Projectile; +import at.pavlov.cannons.scheduler.RunnableAsync; import java.sql.PreparedStatement; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java index 406ab70b..c78e18b7 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.dao.wrappers; -import at.pavlov.cannons.Enum.ProjectileCause; +import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.cannon.Cannon; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java index 91ea6b76..1c85a121 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.dao.wrappers; -import at.pavlov.cannons.Enum.BreakCause; +import at.pavlov.internal.enums.BreakCause; import at.pavlov.cannons.cannon.Cannon; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonBeforeCreateEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonBeforeCreateEvent.java index d510e83c..043e3ba9 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonBeforeCreateEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonBeforeCreateEvent.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.event; -import at.pavlov.cannons.Enum.MessageEnum; +import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.cannon.Cannon; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java index d21287d8..449fbef5 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java @@ -1,9 +1,7 @@ package at.pavlov.cannons.event; -import at.pavlov.cannons.Enum.DamageType; -import at.pavlov.cannons.Enum.InteractAction; +import at.pavlov.internal.enums.DamageType; import at.pavlov.cannons.projectile.FlyingProjectile; -import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDestroyedEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDestroyedEvent.java index a7fa52b3..2ba01e46 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDestroyedEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDestroyedEvent.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.event; -import at.pavlov.cannons.Enum.BreakCause; +import at.pavlov.internal.enums.BreakCause; import at.pavlov.cannons.cannon.Cannon; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonPreLoadEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonPreLoadEvent.java index 360cbf19..e7254a34 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonPreLoadEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonPreLoadEvent.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.event; +import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.projectile.Projectile; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonUseEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonUseEvent.java index cc763eb4..a37a7ab0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonUseEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonUseEvent.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.event; -import at.pavlov.cannons.Enum.InteractAction; +import at.pavlov.internal.enums.InteractAction; import at.pavlov.cannons.cannon.Cannon; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonsEntityDeathEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonsEntityDeathEvent.java index 5612af20..ebc690a3 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonsEntityDeathEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonsEntityDeathEvent.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.event; -import at.pavlov.cannons.projectile.Projectile; +import at.pavlov.bukkit.projectile.Projectile; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectileImpactEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectileImpactEvent.java index e4994843..ab112632 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectileImpactEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectileImpactEvent.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.event; -import at.pavlov.cannons.projectile.Projectile; +import at.pavlov.bukkit.projectile.Projectile; import org.bukkit.Location; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectilePiercingEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectilePiercingEvent.java index 83f78f40..fba28e1c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectilePiercingEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectilePiercingEvent.java @@ -1,7 +1,6 @@ package at.pavlov.cannons.event; -import at.pavlov.cannons.projectile.Projectile; -import org.antlr.v4.runtime.misc.NotNull; +import at.pavlov.bukkit.projectile.Projectile; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.event.Cancellable; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java index 67f9da9d..2b6a6425 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java @@ -1,8 +1,9 @@ package at.pavlov.cannons.hooks.papi; +import at.pavlov.bukkit.container.ItemHolder; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.container.ItemHolder; + import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java index 6a1c324a..edd238de 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java @@ -3,7 +3,7 @@ import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.BreakCause; +import at.pavlov.internal.enums.BreakCause; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.multiversion.EventResolver; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java index b58db1c4..cd0e5c40 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java @@ -2,7 +2,7 @@ import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.BreakCause; +import at.pavlov.internal.enums.BreakCause; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.projectile.ProjectileManager; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java index a32bfe76..16fc63a9 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java @@ -1,19 +1,19 @@ package at.pavlov.cannons.listener; +import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; -import at.pavlov.cannons.Enum.InteractAction; -import at.pavlov.cannons.Enum.MessageEnum; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.FireCannon; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.cannon.CannonDesign; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.multiversion.PotionTypeResolver; import at.pavlov.cannons.projectile.FlyingProjectile; -import at.pavlov.cannons.projectile.Projectile; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.utils.CannonSelector; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java index 93d00b32..9ea5f33b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java @@ -1,8 +1,8 @@ package at.pavlov.cannons.listener; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.InteractAction; -import at.pavlov.cannons.Enum.MessageEnum; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.FireCannon; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java index 0fcd056e..092de660 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java @@ -1,6 +1,7 @@ package at.pavlov.cannons.projectile; -import at.pavlov.cannons.Enum.ProjectileCause; +import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.container.MovingObject; import io.papermc.lib.PaperLib; import org.bukkit.Bukkit; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index 945a3183..4b57c8d5 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -1,8 +1,9 @@ package at.pavlov.cannons.projectile; +import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; -import at.pavlov.cannons.Enum.ProjectileCause; +import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.DelayedTask; import org.apache.commons.lang3.Validate; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index 8dde0f58..e74885af 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -1,18 +1,19 @@ package at.pavlov.cannons.projectile; +import at.pavlov.bukkit.builders.ParticleBuilder; +import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.SoundHolder; +import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.ProjectileProperties; +import at.pavlov.bukkit.utils.FileUtils; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.builders.ParticleBuilder; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.container.ItemHolder; -import at.pavlov.cannons.container.SoundHolder; import at.pavlov.cannons.utils.CannonsUtil; -import at.pavlov.cannons.utils.FileUtils; import at.pavlov.cannons.utils.ParseUtils; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.FireworkEffect; import org.bukkit.Material; -import org.bukkit.Particle; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.EntityType; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java index 6b1f60a4..668f6c23 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.scheduler; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.FakeBlockType; +import at.pavlov.internal.enums.FakeBlockType; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.container.FakeBlockEntry; import at.pavlov.cannons.dao.AsyncTaskManager; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index d34b79b7..996d2555 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -1,15 +1,15 @@ package at.pavlov.cannons.scheduler; +import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.SoundHolder; +import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.ProjectileProperties; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; -import at.pavlov.cannons.Enum.FakeBlockType; -import at.pavlov.cannons.container.ItemHolder; -import at.pavlov.cannons.container.SoundHolder; +import at.pavlov.internal.enums.FakeBlockType; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.projectile.FlyingProjectile; -import at.pavlov.cannons.projectile.Projectile; import at.pavlov.cannons.projectile.ProjectileManager; -import at.pavlov.cannons.projectile.ProjectileProperties; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; import io.papermc.lib.PaperLib; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonSelector.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonSelector.java index 672338e3..e99f5d35 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonSelector.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonSelector.java @@ -1,8 +1,8 @@ package at.pavlov.cannons.utils; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.Enum.MessageEnum; -import at.pavlov.cannons.Enum.SelectCannon; +import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.internal.enums.SelectCannon; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.config.UserMessages; @@ -201,7 +201,7 @@ public void setSelectedCannon(Player player, Cannon cannon, SelectCannon cmd, Bo switch (cmd) { case OBSERVER: { - MessageEnum message = cannon.toggleObserver(player, false); + MessageEnum message = cannon.toggleObserver(player.getUniqueId(), false); userMessages.sendMessage(message, player, cannon); SoundUtils.playSound(cannon.getMuzzle(), cannon.getCannonDesign().getSoundSelected()); break; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index 9d856c64..3b80e796 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -1,13 +1,13 @@ package at.pavlov.cannons.utils; +import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.ProjectileProperties; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.TargetManager; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.container.*; import at.pavlov.cannons.projectile.FlyingProjectile; -import at.pavlov.cannons.projectile.Projectile; -import at.pavlov.cannons.projectile.ProjectileProperties; import io.papermc.lib.PaperLib; import org.bukkit.*; import org.bukkit.block.Block; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java index 28aaeab3..092129ea 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.utils; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.cannon.CannonDesign; +import at.pavlov.bukkit.cannons.CannonDesign; import org.bukkit.block.BlockFace; import java.util.Comparator; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java index dd9dcc98..b2a1d17a 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java @@ -1,9 +1,9 @@ package at.pavlov.cannons.utils; +import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.SpawnEntityHolder; +import at.pavlov.bukkit.container.SpawnMaterialHolder; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.container.ItemHolder; -import at.pavlov.cannons.container.SpawnEntityHolder; -import at.pavlov.cannons.container.SpawnMaterialHolder; import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java index c41fa423..c54ba516 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java @@ -1,9 +1,7 @@ package at.pavlov.cannons.utils; -import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.container.SoundHolder; +import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.cannons.dao.AsyncTaskManager; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.World; From 79f3ed17812d7299fe75e6c2dfcc00df4c08c11a Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 21:29:54 +0100 Subject: [PATCH 09/97] Fix CannonDesign dataclass --- .../pavlov/bukkit/cannons/CannonDesign.java | 69 +------------------ .../java/at/pavlov/cannons/cannon/Cannon.java | 14 ++-- .../pavlov/cannons/cannon/DesignStorage.java | 14 ++-- 3 files changed, 17 insertions(+), 80 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index 970f2e63..ab683310 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -31,7 +31,7 @@ //ammunition_consumption private String gunpowderName; private ItemHolder gunpowderType; - private boolean needsGunpowder; + private boolean gunpowderNeeded; private boolean gunpowderConsumption; private boolean projectileConsumption; private boolean ammoInfiniteForPlayer; @@ -120,8 +120,8 @@ private double sootPerGunpowder; private int projectilePushing; private boolean hasRecoil; - private boolean isFrontloader; - private boolean isRotatable; + private boolean frontloader; + private boolean rotable; private int massOfCannon; private int startingSoot; private double explodingLoadedCannons; @@ -496,57 +496,6 @@ public int getMaxLoadableGunpowderOverloaded() return getMaxLoadableGunpowderNormal(); } - public double getMaxHorizontalAngleNormal() - { - return maxHorizontalAngle; - } - public void setMaxHorizontalAngleNormal(double maxHorizontalAngle) - { - this.maxHorizontalAngle = maxHorizontalAngle; - } - public double getMinHorizontalAngleNormal() - { - return minHorizontalAngle; - } - public void setMinHorizontalAngleNormal(double minHorizontalAngle) - { - this.minHorizontalAngle = minHorizontalAngle; - } - public double getMaxVerticalAngleNormal() - { - return maxVerticalAngle; - } - public void setMaxVerticalAngleNormal(double maxVerticalAngle) - { - this.maxVerticalAngle = maxVerticalAngle; - } - public double getMinVerticalAngleNormal() - { - return minVerticalAngle; - } - public void setMinVerticalAngleNormal(double minVerticalAngle) - { - this.minVerticalAngle = minVerticalAngle; - } - - public boolean isFrontloader() - { - return isFrontloader; - } - public void setFrontloader(boolean isFrontloader) - { - this.isFrontloader = isFrontloader; - } - public boolean isRotatable() - { - return isRotatable; - } - public void setRotatable(boolean isRotatable) - { - this.isRotatable = isRotatable; - } - - public void putCannonBlockMap(BlockFace cannonDirection, CannonBlocks blocks) { for (var block : blocks.getAllCannonBlocks()) { allowedMaterials.add(block.getBlockData().getMaterial()); @@ -598,16 +547,4 @@ public ItemStack getCoolingToolUsed(ItemStack item) } return null; } - - public boolean isGunpowderNeeded() { - return needsGunpowder; - } - - public void setOverloadingChangeInc(double overloadingChanceInc) { - this.overloadingChanceInc = overloadingChanceInc; - } - - public double getOverloadingChangeInc() { - return overloadingChanceInc; - } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index d55b1386..c7cdc85f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -1360,7 +1360,7 @@ public int getLoadedGunpowder() { * @return tun the maximum horizontal angle */ public double getMaxHorizontalAngle() { - return (isOnShip()) ? design.getMaxHorizontalAngleOnShip() : design.getMaxHorizontalAngleNormal(); + return (isOnShip()) ? design.getMaxHorizontalAngleOnShip() : design.getMaxHorizontalAngle(); } /** @@ -1369,7 +1369,7 @@ public double getMaxHorizontalAngle() { * @return the minimum horizontal angle */ public double getMinHorizontalAngle() { - return (isOnShip()) ? design.getMinHorizontalAngleOnShip() : design.getMinHorizontalAngleNormal(); + return (isOnShip()) ? design.getMinHorizontalAngleOnShip() : design.getMinHorizontalAngle(); } /** @@ -1378,7 +1378,7 @@ public double getMinHorizontalAngle() { * @return returns the maximum vertical angle */ public double getMaxVerticalAngle() { - return (isOnShip()) ? design.getMaxVerticalAngleOnShip() : design.getMaxVerticalAngleNormal(); + return (isOnShip()) ? design.getMaxVerticalAngleOnShip() : design.getMaxVerticalAngle(); } /** @@ -1387,7 +1387,7 @@ public double getMaxVerticalAngle() { * @return returns the minimum vertical angle */ public double getMinVerticalAngle() { - return (isOnShip()) ? design.getMinVerticalAngleOnShip() : design.getMinVerticalAngleNormal(); + return (isOnShip()) ? design.getMinVerticalAngleOnShip() : design.getMinVerticalAngle(); } public void setCannonDesign(CannonDesign design) { @@ -1522,7 +1522,7 @@ public double getTotalVerticalAngle() { * @return default horizontal home position */ public double getHomeHorizontalAngle() { - return (design.getMaxHorizontalAngleNormal() + design.getMinHorizontalAngleNormal()) / 2.0; + return (design.getMaxHorizontalAngle() + design.getMinHorizontalAngle()) / 2.0; } /** @@ -1531,7 +1531,7 @@ public double getHomeHorizontalAngle() { * @return default vertical home position */ public double getHomeVerticalAngle() { - return (design.getMaxVerticalAngleNormal() + design.getMinVerticalAngleNormal()) / 2.0; + return (design.getMaxVerticalAngle() + design.getMinVerticalAngle()) / 2.0; } /** @@ -1664,7 +1664,7 @@ private double getChance(double tempInc) { int gunpowder = ammoLoadingData.getLoadedGunpowder() - saferGunpowder; if (gunpowder < 0) gunpowder = 0; - return tempInc * design.getOverloadingChangeInc() * Math.pow(gunpowder * design.getOverloadingChanceOfExplosionPerGunpowder(), design.getOverloadingExponent()); + return tempInc * design.getOverloadingChanceInc() * Math.pow(gunpowder * design.getOverloadingChanceOfExplosionPerGunpowder(), design.getOverloadingExponent()); } /** diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index bdafa35b..77cf70ee 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -203,7 +203,7 @@ private void loadDesignYml(CannonDesign cannonDesign, String ymlFile) // ammunition cannonDesign.setGunpowderName(cannonDesignConfig.getString("ammunition.gunpowderName", "gunpowder")); cannonDesign.setGunpowderType(new ItemHolder(cannonDesignConfig.getString("ammunition.gunpowderType", "SULPHUR:0"))); - cannonDesign.setNeedsGunpowder(cannonDesignConfig.getBoolean("ammunition.needsGunpowder", true)); + cannonDesign.setGunpowderNeeded(cannonDesignConfig.getBoolean("ammunition.needsGunpowder", true)); cannonDesign.setGunpowderConsumption(cannonDesignConfig.getBoolean("ammunition.gunpowderConsumption", true)); cannonDesign.setProjectileConsumption(cannonDesignConfig.getBoolean("ammunition.projectileConsumption", true)); cannonDesign.setAmmoInfiniteForPlayer(cannonDesignConfig.getBoolean("ammunition.ammoInfiniteForPlayer", false)); @@ -230,10 +230,10 @@ private void loadDesignYml(CannonDesign cannonDesign, String ymlFile) // angles cannonDesign.setDefaultHorizontalFacing(BlockFace.valueOf(cannonDesignConfig.getString("angles.defaultHorizontalFacing", "NORTH").toUpperCase())); cannonDesign.setDefaultVerticalAngle(cannonDesignConfig.getDouble("angles.defaultVerticalAngle", 0.0)); - cannonDesign.setMaxHorizontalAngleNormal(cannonDesignConfig.getDouble("angles.maxHorizontalAngle", 45.0)); - cannonDesign.setMinHorizontalAngleNormal(cannonDesignConfig.getDouble("angles.minHorizontalAngle", -45.0)); - cannonDesign.setMaxVerticalAngleNormal(cannonDesignConfig.getDouble("angles.maxVerticalAngle", 45.0)); - cannonDesign.setMinVerticalAngleNormal(cannonDesignConfig.getDouble("angles.minVerticalAngle", -45.0)); + cannonDesign.setMaxHorizontalAngle(cannonDesignConfig.getDouble("angles.maxHorizontalAngle", 45.0)); + cannonDesign.setMinHorizontalAngle(cannonDesignConfig.getDouble("angles.minHorizontalAngle", -45.0)); + cannonDesign.setMaxVerticalAngle(cannonDesignConfig.getDouble("angles.maxVerticalAngle", 45.0)); + cannonDesign.setMinVerticalAngle(cannonDesignConfig.getDouble("angles.minVerticalAngle", -45.0)); cannonDesign.setMaxHorizontalAngleOnShip(cannonDesignConfig.getDouble("angles.maxHorizontalAngleOnShip", 20.0)); cannonDesign.setMinHorizontalAngleOnShip(cannonDesignConfig.getDouble("angles.minHorizontalAngleOnShip", -20.0)); cannonDesign.setMaxVerticalAngleOnShip(cannonDesignConfig.getDouble("angles.maxVerticalAngleOnShip", 30.0)); @@ -282,7 +282,7 @@ private void loadDesignYml(CannonDesign cannonDesign, String ymlFile) cannonDesign.setOverloadingEnabled(cannonDesignConfig.getBoolean("overloading.enabled",false)); cannonDesign.setOverloadingRealMode(cannonDesignConfig.getBoolean("overloading.realMode",false)); cannonDesign.setOverloadingExponent(cannonDesignConfig.getDouble("overloading.exponent",1)); - cannonDesign.setOverloadingChangeInc(cannonDesignConfig.getDouble("overloading.chanceInc",0.1)); + cannonDesign.setOverloadingChanceInc(cannonDesignConfig.getDouble("overloading.chanceInc",0.1)); cannonDesign.setOverloadingMaxOverloadableGunpowder(cannonDesignConfig.getInt("overloading.maxOverloadableGunpowder",3)); cannonDesign.setOverloadingChanceOfExplosionPerGunpowder(cannonDesignConfig.getDouble("overloading.chanceOfExplosionPerGunpowder",0.01)); cannonDesign.setOverloadingDependsOfTemperature(cannonDesignConfig.getBoolean("overloading.dependsOfTemperature",false)); @@ -298,7 +298,7 @@ private void loadDesignYml(CannonDesign cannonDesign, String ymlFile) cannonDesign.setProjectilePushing(cannonDesignConfig.getInt("realisticBehaviour.projectilePushing", 0)); cannonDesign.setHasRecoil(cannonDesignConfig.getBoolean("realisticBehaviour.hasRecoil", false)); cannonDesign.setFrontloader(cannonDesignConfig.getBoolean("realisticBehaviour.isFrontloader", false)); - cannonDesign.setRotatable(cannonDesignConfig.getBoolean("realisticBehaviour.isRotatable", false)); + cannonDesign.setRotable(cannonDesignConfig.getBoolean("realisticBehaviour.isRotatable", false)); cannonDesign.setMassOfCannon(cannonDesignConfig.getInt("realisticBehaviour.massOfCannon", 1000));//What means 1000? cannonDesign.setStartingSoot(cannonDesignConfig.getInt("realisticBehaviour.startingSoot",10)); cannonDesign.setExplodingLoadedCannons(cannonDesignConfig.getDouble("realisticBehaviour.explodingLoadedCannon",2.0)); From 9fb371996f9740459808b8330a6f9f73065d5b7f Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 22:04:13 +0100 Subject: [PATCH 10/97] Fix CannonDesign docs and stuff --- .../pavlov/bukkit/cannons/CannonDesign.java | 35 +------------------ 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index ab683310..db62b9a3 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -26,7 +26,7 @@ private boolean lastUserBecomesOwner; //sign - private boolean isSignRequired; + private boolean signRequired; //ammunition_consumption private String gunpowderName; @@ -193,8 +193,6 @@ /** * returns the rotation center of a cannon design - * @param cannon - * @return */ public Location getRotationCenter(CannonBukkit cannon) { @@ -211,8 +209,6 @@ public Location getRotationCenter(CannonBukkit cannon) /** * returns the muzzle location - * @param cannon - * @return */ public Location getMuzzle(CannonBukkit cannon) { @@ -260,8 +256,6 @@ public List getAllCannonBlocks(BlockFace cannonDirection) /** * returns a list of all cannonBlocks - * @param cannon - * @return */ public List getAllCannonBlocks(CannonBukkit cannon) { @@ -280,8 +274,6 @@ public List getAllCannonBlocks(CannonBukkit cannon) /** * returns a list of all destructible blocks - * @param cannon - * @return */ public List getDestructibleBlocks(CannonBukkit cannon) { @@ -300,8 +292,6 @@ public List getDestructibleBlocks(CannonBukkit cannon) /** * returns a list of all firingIndicator blocks - * @param cannon - * @return */ public List getFiringIndicator(CannonBukkit cannon) { @@ -319,8 +309,6 @@ public List getFiringIndicator(CannonBukkit cannon) /** * returns a list of all loading interface blocks - * @param cannon - * @return */ public List getLoadingInterface(CannonBukkit cannon) { @@ -338,8 +326,6 @@ public List getLoadingInterface(CannonBukkit cannon) /** * returns a list of all barrel blocks - * @param cannon - * @return */ public List getBarrelBlocks(CannonBukkit cannon) { @@ -357,8 +343,6 @@ public List getBarrelBlocks(CannonBukkit cannon) /** * returns a list of all right click trigger blocks - * @param cannon - * @return */ public List getRightClickTrigger(CannonBukkit cannon) { @@ -376,8 +360,6 @@ public List getRightClickTrigger(CannonBukkit cannon) /** * returns a list of all redstone trigger blocks - * @param cannon - * @return */ public List getRedstoneTrigger(CannonBukkit cannon) { @@ -396,8 +378,6 @@ public List getRedstoneTrigger(CannonBukkit cannon) /** * returns a list of all chest/sign blocks - * @param cannon - * @return */ public List getChestsAndSigns(CannonBukkit cannon) { @@ -415,8 +395,6 @@ public List getChestsAndSigns(CannonBukkit cannon) /** * returns a list of all redstone torch blocks - * @param cannon - * @return */ public List getRedstoneTorches(CannonBukkit cannon) { @@ -434,8 +412,6 @@ public List getRedstoneTorches(CannonBukkit cannon) /** * returns a list of all redstone wire/repeater blocks - * @param cannon - * @return */ public List getRedstoneWireAndRepeater(CannonBukkit cannon) { @@ -467,15 +443,6 @@ public boolean canLoad(Projectile projectile) return false; } - public boolean isSignRequired() - { - return isSignRequired; - } - public void setSignRequired(boolean isSignRequired) - { - this.isSignRequired = isSignRequired; - } - /** * Normal means without overloading stuff * @return maxLoadableGunpowder From 23fa7bba4c94d3fe66b75090bb0a9f2836801774 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 22:17:18 +0100 Subject: [PATCH 11/97] Update lombok --- api-bukkit/pom.xml | 2 +- api-internal/pom.xml | 2 +- cannons-bukkit/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api-bukkit/pom.xml b/api-bukkit/pom.xml index b4b28fae..70386f4d 100644 --- a/api-bukkit/pom.xml +++ b/api-bukkit/pom.xml @@ -40,7 +40,7 @@ org.projectlombok lombok - 1.18.32 + 1.18.36 provided diff --git a/api-internal/pom.xml b/api-internal/pom.xml index fd895f51..ffdb7b6d 100644 --- a/api-internal/pom.xml +++ b/api-internal/pom.xml @@ -24,7 +24,7 @@ org.projectlombok lombok - 1.18.32 + 1.18.36 provided diff --git a/cannons-bukkit/pom.xml b/cannons-bukkit/pom.xml index c47ec88d..e24ea77b 100644 --- a/cannons-bukkit/pom.xml +++ b/cannons-bukkit/pom.xml @@ -135,7 +135,7 @@ org.projectlombok lombok - 1.18.32 + 1.18.36 provided From 57f51e53245a0c5fe2333d4c2c604c35a1e60165 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 22:17:35 +0100 Subject: [PATCH 12/97] Turn Projectile into a dataclass --- .../pavlov/bukkit/projectile/Projectile.java | 558 +----------------- 1 file changed, 2 insertions(+), 556 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index 71a72113..02c54627 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -5,6 +5,7 @@ import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.bukkit.container.SpawnEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; +import lombok.Data; import lombok.Getter; import lombok.Setter; import org.bukkit.FireworkEffect; @@ -17,8 +18,7 @@ import java.util.List; - -public class Projectile implements Cloneable{ +@Data public class Projectile implements Cloneable{ private String projectileID; private String projectileName; private String description; @@ -195,558 +195,4 @@ public boolean hasPermission(Player player) //player has all permissions return true; } - - - - public String getItemName() - { - return itemName; - } - - - public void setItemName(String itemName) - { - this.itemName = itemName; - } - - - public String getProjectileName() - { - return projectileName; - } - - - public void setProjectileName(String projectileName) - { - this.projectileName = projectileName; - } - - - public double getVelocity() - { - return velocity; - } - - - public void setVelocity(double velocity) - { - this.velocity = velocity; - } - - - public double getPenetration() - { - return penetration; - } - - - public void setPenetration(double penetration) - { - this.penetration = penetration; - } - - - public double getTimefuse() - { - return timefuse; - } - - - public void setTimefuse(double timefuse) - { - this.timefuse = timefuse; - } - - - public int getNumberOfBullets() - { - return numberOfBullets; - } - - - public void setNumberOfBullets(int numberOfBullets) - { - this.numberOfBullets = numberOfBullets; - } - - - public double getSpreadMultiplier() - { - return spreadMultiplier; - } - - - public void setSpreadMultiplier(double spreadMultiplier) - { - this.spreadMultiplier = spreadMultiplier; - } - - - List getPropertyList() - { - return propertyList; - } - - - public void setPropertyList(List propertyList) - { - this.propertyList = propertyList; - } - - - public float getExplosionPower() - { - return explosionPower; - } - - - public void setExplosionPower(float explosionPower) - { - this.explosionPower = explosionPower; - } - - - public double getPotionRange() - { - return potionRange; - } - - - public void setPotionRange(double potionRange) - { - this.potionRange = potionRange; - } - - - public double getPotionDuration() - { - return potionDuration; - } - - - public void setPotionDuration(double potionDuration) - { - this.potionDuration = potionDuration; - } - - - public int getPotionAmplifier() - { - return potionAmplifier; - } - - - public void setPotionAmplifier(int potionAmplifier) - { - this.potionAmplifier = potionAmplifier; - } - - - public List getPotionsEffectList() - { - return potionsEffectList; - } - - - public void setPotionsEffectList(List potionsEffectList) - { - this.potionsEffectList = potionsEffectList; - } - - public String getProjectileId() - { - return projectileID; - } - - public void setProjectileID(String projectileID) - { - this.projectileID = projectileID; - } - - public ItemHolder getLoadingItem() - { - return loadingItem; - } - - public void setLoadingItem(ItemHolder loadingItem) - { - this.loadingItem = loadingItem; - } - - public List getAlternativeItemList() - { - return alternativeItemList; - } - - public void setAlternativeItemList(List alternativeItemList) - { - this.alternativeItemList = alternativeItemList; - } - - public boolean getExplosionDamage() - { - return explosionDamage; - } - - public void setExplosionDamage(boolean explosionDamage) - { - this.explosionDamage = explosionDamage; - } - - public boolean getPenetrationDamage() - { - return penetrationDamage; - } - - public void setPenetrationDamage(boolean penetrationDamage) - { - this.penetrationDamage = penetrationDamage; - } - - public List getPermissionLoad() - { - return permissionLoad; - } - - public void setPermissionLoad(List permissionLoad) - { - this.permissionLoad = permissionLoad; - } - - public double getDirectHitDamage() { - return directHitDamage; - } - - public void setDirectHitDamage(double directHitDamage) { - this.directHitDamage = directHitDamage; - } - - public double getPlayerDamageRange() { - return playerDamageRange; - } - - public void setPlayerDamageRange(double playerDamageRange) { - this.playerDamageRange = playerDamageRange; - } - - public double getPlayerDamage() { - return playerDamage; - } - - public void setPlayerDamage(double playerDamage) { - this.playerDamage = playerDamage; - } - - public boolean isImpactMessage() { - return impactMessage; - } - - public void setImpactMessage(boolean impactMessage) { - this.impactMessage = impactMessage; - } - - public boolean isUnderwaterDamage() { - return underwaterDamage; - } - - public void setUnderwaterDamage(boolean underwaterDamage) { - this.underwaterDamage = underwaterDamage; - } - - public boolean isFireworksFlicker() { - return fireworksFlicker; - } - - public void setFireworksFlicker(boolean fireworksFlicker) { - this.fireworksFlicker = fireworksFlicker; - } - - public FireworkEffect.Type getFireworksType() { - return fireworksType; - } - - public void setFireworksType(FireworkEffect.Type fireworksType) { - this.fireworksType = fireworksType; - } - - public List getFireworksColors() { - return fireworksColors; - } - - public void setFireworksColors(List fireworksColors) { - this.fireworksColors = fireworksColors; - } - - public List getFireworksFadeColors() { - return fireworksFadeColors; - } - - public void setFireworksFadeColors(List fireworksFadeColors) { - this.fireworksFadeColors = fireworksFadeColors; - } - - public boolean isFireworksTrail() { - return fireworksTrail; - } - - public void setFireworksTrail(boolean fireworksTrail) { - this.fireworksTrail = fireworksTrail; - } - - public double getAutomaticFiringDelay() { - return automaticFiringDelay; - } - - public void setAutomaticFiringDelay(double automaticFiringDelay) { - this.automaticFiringDelay = automaticFiringDelay; - } - - public int getAutomaticFiringMagazineSize() { - return automaticFiringMagazineSize; - } - - public void setAutomaticFiringMagazineSize(int automaticFiringMagazineSize) { - this.automaticFiringMagazineSize = automaticFiringMagazineSize; - } - - public boolean isFireworksEnabled() { - return fireworksEnabled; - } - - public void setFireworksEnabled(boolean fireworksEnabled) { - this.fireworksEnabled = fireworksEnabled; - } - - public EntityType getProjectileEntity() { - return projectileEntity; - } - - public void setProjectileEntity(EntityType projectileEntity) { - this.projectileEntity = projectileEntity; - } - - public boolean isProjectileOnFire() { - return projectileOnFire; - } - - public void setProjectileOnFire(boolean projectileOnFire) { - this.projectileOnFire = projectileOnFire; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public boolean isExplosionPowerDependsOnVelocity() - { - return explosionPowerDependsOnVelocity; - } - - - public void setExplosionPowerDependsOnVelocity(boolean explosionPowerDependsOnVelocity) - { - this.explosionPowerDependsOnVelocity = explosionPowerDependsOnVelocity; - } - - public boolean isClusterExplosionsEnabled() { - return clusterExplosionsEnabled; - } - - public void setClusterExplosionsEnabled(boolean clusterExplosionsEnabled) { - this.clusterExplosionsEnabled = clusterExplosionsEnabled; - } - - public int getClusterExplosionsAmount() { - return clusterExplosionsAmount; - } - - public void setClusterExplosionsAmount(int clusterExplosionsAmount) { - this.clusterExplosionsAmount = clusterExplosionsAmount; - } - - public double getClusterExplosionsRadius() { - return clusterExplosionsRadius; - } - - public void setClusterExplosionsRadius(double clusterExplosionsRadius) { - this.clusterExplosionsRadius = clusterExplosionsRadius; - } - - public boolean isClusterExplosionsInBlocks() { - return clusterExplosionsInBlocks; - } - - public void setClusterExplosionsInBlocks(boolean clusterExplosionsInBlocks) { - this.clusterExplosionsInBlocks = clusterExplosionsInBlocks; - } - - public double getClusterExplosionsMinDelay() { - return clusterExplosionsMinDelay; - } - - public void setClusterExplosionsMinDelay(double clusterExplosionsMinDelay) { - this.clusterExplosionsMinDelay = clusterExplosionsMinDelay; - } - - public double getClusterExplosionsMaxDelay() { - return clusterExplosionsMaxDelay; - } - - public void setClusterExplosionsMaxDelay(double clusterExplosionsMaxDelay) { - this.clusterExplosionsMaxDelay = clusterExplosionsMaxDelay; - } - - public double getClusterExplosionsPower() { - return clusterExplosionsPower; - } - - public void setClusterExplosionsPower(double clusterExplosionsPower) { - this.clusterExplosionsPower = clusterExplosionsPower; - } - - public boolean isSpawnEnabled() { - return spawnEnabled; - } - - public void setSpawnEnabled(boolean spawnEnabled) { - this.spawnEnabled = spawnEnabled; - } - - public double getSpawnVelocity() { - return spawnVelocity; - } - - public void setSpawnVelocity(double spawnVelocity) { - this.spawnVelocity = spawnVelocity; - } - - public List getSpawnBlocks() { - return spawnBlocks; - } - - public void setSpawnBlocks(List spawnBlocks) { - this.spawnBlocks = spawnBlocks; - } - - public List getSpawnEntities() { - return spawnEntities; - } - - public void setSpawnEntities(List spawnEntities) { - this.spawnEntities = spawnEntities; - } - - public List getSpawnProjectiles() { - return spawnProjectiles; - } - - public void setSpawnProjectiles(List spawnProjectiles) { - this.spawnProjectiles = spawnProjectiles; - } - - public double getSpawnEntityRadius() { - return spawnEntityRadius; - } - - public void setSpawnEntityRadius(double spawnEntityRadius) { - this.spawnEntityRadius = spawnEntityRadius; - } - - public double getSpawnBlockRadius() { - return spawnBlockRadius; - } - - public void setSpawnBlockRadius(double spawnBlockRadius) { - this.spawnBlockRadius = spawnBlockRadius; - } - - public SoundHolder getSoundLoading() { - return soundLoading; - } - - public void setSoundLoading(SoundHolder soundLoading) { - this.soundLoading = soundLoading; - } - - public SoundHolder getSoundImpact() { - return soundImpact; - } - - public void setSoundImpact(SoundHolder soundImpact) { - this.soundImpact = soundImpact; - } - - public SoundHolder getSoundImpactWater() { - return soundImpactWater; - } - - public void setSoundImpactWater(SoundHolder soundImpactWater) { - this.soundImpactWater = soundImpactWater; - } - - public SoundHolder getSoundImpactProtected() { - return soundImpactProtected; - } - - public void setSoundImpactProtected(SoundHolder soundImpactProtected) { - this.soundImpactProtected = soundImpactProtected; - } - - public boolean isImpactIndicator() { - return impactIndicator; - } - - public void setImpactIndicator(boolean impactIndicator) { - this.impactIndicator = impactIndicator; - } - - public boolean isSmokeTrailEnabled() { - return smokeTrailEnabled; - } - - public void setSmokeTrailEnabled(boolean smokeTrailEnabled) { - this.smokeTrailEnabled = smokeTrailEnabled; - } - - public BlockData getSmokeTrailMaterial() { - return smokeTrailMaterial; - } - - public void setSmokeTrailMaterial(BlockData smokeTrailMaterial) { - this.smokeTrailMaterial = smokeTrailMaterial; - } - - public double getSmokeTrailDuration() { - return smokeTrailDuration; - } - - public void setSmokeTrailDuration(double smokeTrailDuration) { - this.smokeTrailDuration = smokeTrailDuration; - } - - public int getSmokeTrailDistance() { - return smokeTrailDistance; - } - - public void setSmokeTrailDistance(int smokeTrailDistance) { - this.smokeTrailDistance = smokeTrailDistance; - } - - public void setSmokeTrailParticleEnabled(boolean smokeTrailParticleEnabled) { - this.smokeTrailParticleEnabled = smokeTrailParticleEnabled; - } - - public boolean isSmokeTrailParticleEnabled() { return smokeTrailParticleEnabled; } - - public int getSentryIgnoredBlocks() { - return sentryIgnoredBlocks; - } - - public void setSentryIgnoredBlocks(int sentryIgnoredBlocks) { - this.sentryIgnoredBlocks = sentryIgnoredBlocks; - } } From 0a312d576be57dcf5c37cf03aaea09b5c607b945 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 22:17:44 +0100 Subject: [PATCH 13/97] Apply changes --- .../at/pavlov/bukkit/cannons/CannonDesign.java | 2 +- .../java/at/pavlov/cannons/CreateExplosion.java | 16 ++++++++-------- .../at/pavlov/cannons/dao/SaveCannonTask.java | 2 +- .../cannons/projectile/ProjectileStorage.java | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index db62b9a3..5803224f 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -436,7 +436,7 @@ public boolean canLoad(Projectile projectile) { for (String p : allowedProjectiles) { - if (projectile.getProjectileId().equals(p)) + if (projectile.getProjectileID().equals(p)) return true; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 069240cc..9fea0c5d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -167,7 +167,7 @@ private Location blockBreaker(FlyingProjectile cannonball, org.bukkit.entity.Pro // has this projectile the super breaker property and makes block damage Boolean superbreaker = projectile.hasProperty(ProjectileProperties.SUPERBREAKER); - Boolean doesBlockDamage = projectile.getPenetrationDamage(); + Boolean doesBlockDamage = projectile.isPenetrationDamage(); // list of destroy blocks LinkedList blocklist = new LinkedList<>(); @@ -323,7 +323,7 @@ private void spawnEntity(FlyingProjectile cannonball, Location loc, double entit this.plugin.logDebug("reset TNT fuse ticks to: " + fuseTicks + " fusetime " + fusetime); tnt.setFuseTicks(fuseTicks); } catch (Exception e) { - logConvertingError(cannonball.getProjectile().getProjectileId(), e); + logConvertingError(cannonball.getProjectile().getProjectileID(), e); } } else if (entity instanceof AreaEffectCloud cloud) { try { @@ -355,14 +355,14 @@ private void spawnEntity(FlyingProjectile cannonball, Location loc, double entit cloud.addCustomEffect(effect, true); } } catch (Exception e) { - logConvertingError(cannonball.getProjectile().getProjectileId(), e); + logConvertingError(cannonball.getProjectile().getProjectileID(), e); } } else if (entity instanceof SpectralArrow arrow) { try { arrow.setGlowingTicks(ParseUtils.parseInt(entityData.get(EntityDataType.DURATION), arrow.getGlowingTicks())); } catch (Exception e) { - logConvertingError(cannonball.getProjectile().getProjectileId(), e); + logConvertingError(cannonball.getProjectile().getProjectileID(), e); } } else if (entity instanceof Arrow arrow) { try { @@ -374,7 +374,7 @@ private void spawnEntity(FlyingProjectile cannonball, Location loc, double entit arrow.addCustomEffect(effect, true); } } catch (Exception e) { - logConvertingError(cannonball.getProjectile().getProjectileId(), e); + logConvertingError(cannonball.getProjectile().getProjectileID(), e); } } else if (entity instanceof LivingEntity living) { try { @@ -398,7 +398,7 @@ private void spawnEntity(FlyingProjectile cannonball, Location loc, double entit equipment.getItemInOffHand()))); } } catch (Exception e) { - logConvertingError(cannonball.getProjectile().getProjectileId(), e); + logConvertingError(cannonball.getProjectile().getProjectileID(), e); } } else if (entity instanceof ThrownPotion pentity) { try { @@ -417,7 +417,7 @@ private void spawnEntity(FlyingProjectile cannonball, Location loc, double entit pentity.setItem(potion); } catch (Exception e) { - logConvertingError(cannonball.getProjectile().getProjectileId(), e); + logConvertingError(cannonball.getProjectile().getProjectileID(), e); } } } @@ -820,7 +820,7 @@ public void detonate(FlyingProjectile cannonball, org.bukkit.entity.Projectile p } boolean incendiary = projectile.hasProperty(ProjectileProperties.INCENDIARY); - boolean blockDamage = projectile.getExplosionDamage(); + boolean blockDamage = projectile.isExplosionDamage(); this.plugin.logDebug("Projectile impact event: " + impactLoc.getBlockX() + ", " + impactLoc.getBlockY() + ", " + impactLoc.getBlockZ() + " direction: " + impactLoc.getYaw() + " Pitch: " + impactLoc.getPitch()); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java index 48cf914d..782ac435 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java @@ -77,7 +77,7 @@ public void run() { // if no projectile is found, set it to air Projectile projectile = cannon.getLoadedProjectile(); if (projectile != null) { - preparedStatement.setString(11,projectile.getProjectileId()); + preparedStatement.setString(11,projectile.getProjectileID()); } else { preparedStatement.setString(11,"none"); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index e74885af..9de35f94 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -51,7 +51,7 @@ public static void initialize(Cannons plugin) { public static ArrayList getProjectileIds(){ ArrayList list = new ArrayList<>(); for (Projectile proj : projectileList){ - list.add(proj.getProjectileId()); + list.add(proj.getProjectileID()); } return list; } @@ -419,7 +419,7 @@ public Projectile getByName(String str) { for (Projectile projectile : projectileList) { - if (projectile.getProjectileId().equalsIgnoreCase(str)) + if (projectile.getProjectileID().equalsIgnoreCase(str)) return projectile; } return null; From f8691bea2ceae6d230e8e2db1984e0e894e0ff60 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 22:23:46 +0100 Subject: [PATCH 14/97] Adapt FlyingProjectile --- .../cannons/projectile/FlyingProjectile.java | 55 ++++--------------- .../cannons/projectile/ProjectileManager.java | 2 +- 2 files changed, 12 insertions(+), 45 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java index 092de660..7fe76ac9 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java @@ -4,6 +4,8 @@ import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.container.MovingObject; import io.papermc.lib.PaperLib; +import lombok.Getter; +import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; @@ -21,23 +23,28 @@ public class FlyingProjectile private final UUID entityUID; private final UUID shooterUID; private final UUID worldUID; + @Setter @Getter private UUID cannonUID; private final Projectile projectile; private final org.bukkit.projectiles.ProjectileSource source; //location of the shooterUID before firing - important for teleporting the player back - observer property private final Location playerlocation; + @Setter @Getter private Location impactLocation; //block which caused the cannonball explosion - can be null + @Setter @Getter private Location impactBlock; + @Setter @Getter private Location lastSmokeTrailLocation; //Important for visual splash effect when the cannonball hits the water surface private boolean inWater; private boolean wasInWater; //if the teleport was already performed + @Setter @Getter private boolean teleported; //was the projectile fired by a player, redstone or a sentry private final ProjectileCause projectileCause; - private boolean hasDetonated; + private boolean detonated; private final MovingObject predictor; @@ -244,22 +251,6 @@ public UUID getUID() return entityUID; } - public Location getImpactLocation() { - return impactLocation; - } - - public void setImpactLocation(Location impactLocation) { - this.impactLocation = impactLocation; - } - - public UUID getCannonUID() { - return cannonUID; - } - - public void setCannonUID(UUID cannonUID) { - this.cannonUID = cannonUID; - } - public org.bukkit.projectiles.ProjectileSource getSource() { return source; } @@ -274,22 +265,6 @@ public World getWorld() return Bukkit.getWorld(worldUID); } - public boolean isTeleported() { - return teleported; - } - - public void setTeleported(boolean teleported) { - this.teleported = teleported; - } - - public Location getLastSmokeTrailLocation() { - return lastSmokeTrailLocation; - } - - public void setLastSmokeTrailLocation(Location lastSmokeTrailLocation) { - this.lastSmokeTrailLocation = lastSmokeTrailLocation; - } - public ProjectileCause getProjectileCause() { return projectileCause; } @@ -298,19 +273,11 @@ public Vector getVelocity(){ return predictor.getVel().clone(); } - public Location getImpactBlock() { - return impactBlock; - } - - public void setImpactBlock(Location impactBlock) { - this.impactBlock = impactBlock; - } - public boolean hasDetonated() { - return this.hasDetonated; + return this.detonated; } - public void setHasDetonated(boolean detonated) { - this.hasDetonated = detonated; + public void setDetonated(boolean detonated) { + this.detonated = detonated; } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index 4b57c8d5..854b7a5b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -155,7 +155,7 @@ public void directHitProjectile(Entity cannonball, Entity target) { org.bukkit.entity.Projectile projectile_entity = fproj.getProjectileEntity(); if (!fproj.hasDetonated() && cannonball.isValid()) { - fproj.setHasDetonated(true); + fproj.setDetonated(true); CreateExplosion.getInstance().directHit(fproj, projectile_entity, target); projectile_entity.remove(); } From cc1cd9277d1c24d4fa64937e27d482a6cb67c5bc Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 8 Dec 2024 22:33:48 +0100 Subject: [PATCH 15/97] Move enum + fix --- .../src/main/java/at/pavlov/bukkit/container/ItemHolder.java | 5 +---- .../main/java/at/pavlov/bukkit/container/SimpleBlock.java | 2 +- .../main/java/at/pavlov/bukkit/projectile/Projectile.java | 1 + .../java/at/pavlov/internal/enums}/ProjectileProperties.java | 2 +- .../src/main/java/at/pavlov/cannons/CreateExplosion.java | 2 +- .../src/main/java/at/pavlov/cannons/FireCannon.java | 2 +- .../java/at/pavlov/cannons/projectile/ProjectileStorage.java | 2 +- .../java/at/pavlov/cannons/scheduler/ProjectileObserver.java | 2 +- .../src/main/java/at/pavlov/cannons/utils/CannonsUtil.java | 2 +- 9 files changed, 9 insertions(+), 11 deletions(-) rename {api-bukkit/src/main/java/at/pavlov/bukkit/projectile => api-internal/src/main/java/at/pavlov/internal/enums}/ProjectileProperties.java (94%) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java index 2415e1e9..6901a524 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java @@ -16,11 +16,9 @@ public class ItemHolder private Material material; private String displayName; private List lore; - private boolean useTypeName; - public ItemHolder(ItemStack item) + public ItemHolder(ItemStack item) { - useTypeName = false; if (item == null){ material=Material.AIR; displayName=""; @@ -38,7 +36,6 @@ public ItemHolder(ItemStack item) if (meta.hasDisplayName() && meta.getDisplayName()!=null) { displayName = meta.getDisplayName(); } else if (!meta.hasDisplayName()){ - useTypeName = true; displayName = getFriendlyName(item, true); //Cannons.getPlugin().logDebug("display name: " + displayName); } else { diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java index 5f5a27d6..85ea4bce 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java @@ -24,7 +24,7 @@ public SimpleBlock(int x, int y, int z, BlockData blockData) { locZ = z; this.blockData = blockData; - this.directional = this instanceof Directional; + this.directional = blockData instanceof Directional; } public SimpleBlock(Vector vect, BlockData blockData) { diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index 02c54627..94845bee 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -5,6 +5,7 @@ import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.bukkit.container.SpawnEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; +import at.pavlov.internal.enums.ProjectileProperties; import lombok.Data; import lombok.Getter; import lombok.Setter; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/ProjectileProperties.java b/api-internal/src/main/java/at/pavlov/internal/enums/ProjectileProperties.java similarity index 94% rename from api-bukkit/src/main/java/at/pavlov/bukkit/projectile/ProjectileProperties.java rename to api-internal/src/main/java/at/pavlov/internal/enums/ProjectileProperties.java index dfecd05e..d407e21b 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/ProjectileProperties.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/ProjectileProperties.java @@ -1,4 +1,4 @@ -package at.pavlov.bukkit.projectile; +package at.pavlov.internal.enums; public enum ProjectileProperties { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 9fea0c5d..f3e49809 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -4,7 +4,7 @@ import at.pavlov.bukkit.container.SpawnEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; import at.pavlov.bukkit.projectile.Projectile; -import at.pavlov.bukkit.projectile.ProjectileProperties; +import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.internal.enums.DamageType; import at.pavlov.internal.enums.EntityDataType; import at.pavlov.internal.enums.FakeBlockType; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index ef67942d..e1d20aff 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -1,7 +1,7 @@ package at.pavlov.cannons; import at.pavlov.bukkit.projectile.Projectile; -import at.pavlov.bukkit.projectile.ProjectileProperties; +import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.internal.enums.BreakCause; import at.pavlov.internal.enums.FakeBlockType; import at.pavlov.internal.enums.InteractAction; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index 9de35f94..ea70eabc 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -4,7 +4,7 @@ import at.pavlov.bukkit.container.ItemHolder; import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.bukkit.projectile.Projectile; -import at.pavlov.bukkit.projectile.ProjectileProperties; +import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.bukkit.utils.FileUtils; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index 996d2555..3d8dd873 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -3,7 +3,7 @@ import at.pavlov.bukkit.container.ItemHolder; import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.bukkit.projectile.Projectile; -import at.pavlov.bukkit.projectile.ProjectileProperties; +import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; import at.pavlov.internal.enums.FakeBlockType; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index 3b80e796..d25b8d86 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.utils; import at.pavlov.bukkit.projectile.Projectile; -import at.pavlov.bukkit.projectile.ProjectileProperties; +import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.TargetManager; import at.pavlov.cannons.cannon.Cannon; From f6d02e209f95cc366e57191c6a2382e0cbde7ba1 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 18:20:36 +0100 Subject: [PATCH 16/97] Unused remove constructor --- .../main/java/at/pavlov/bukkit/container/ItemHolder.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java index 6901a524..f494de3f 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java @@ -46,13 +46,6 @@ public ItemHolder(ItemStack item) lore = loreExists ? meta.getLore() : new ArrayList<>(); } - @Deprecated - public ItemHolder(int id) - { - //not working - this(Material.AIR); - } - public ItemHolder(Material material) { this(material, null, null); From 4d86604c45dd4b72525748529739d9995ba4b9ce Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 18:21:09 +0100 Subject: [PATCH 17/97] Beautify Projectile --- .../pavlov/bukkit/projectile/Projectile.java | 349 +++++++++--------- 1 file changed, 172 insertions(+), 177 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index 94845bee..3c4ba078 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -19,181 +19,176 @@ import java.util.List; -@Data public class Projectile implements Cloneable{ - private String projectileID; - private String projectileName; - private String description; - private String itemName; - private ItemHolder loadingItem; - //list of items or blocks that can represent this this (e.g. redstone dust may for wire when you click a block) - private List alternativeItemList = new ArrayList<>(); - - //properties of the cannonball - private EntityType projectileEntity; - private boolean projectileOnFire; - private double velocity; - private double penetration; - private double timefuse; - private double automaticFiringDelay; - private int automaticFiringMagazineSize; - private int numberOfBullets; - private double spreadMultiplier; - private int sentryIgnoredBlocks; - private List propertyList = new ArrayList<>(); - - //smokeTrail - private boolean smokeTrailEnabled; - private int smokeTrailDistance; - private BlockData smokeTrailMaterial; - private double smokeTrailDuration; - private boolean smokeTrailParticleEnabled; - @Getter @Setter - private ParticleBuilder smokeTrailParticle; - - //explosion - private float explosionPower; - private boolean explosionPowerDependsOnVelocity; - private boolean explosionDamage; - private boolean underwaterDamage; - private boolean penetrationDamage; - private double directHitDamage; - private double playerDamageRange; - private double playerDamage; - private double potionRange; - private double potionDuration; - private int potionAmplifier; - private List potionsEffectList = new ArrayList(); - private boolean impactIndicator; - - //cluster - private boolean clusterExplosionsEnabled; - private boolean clusterExplosionsInBlocks; - private int clusterExplosionsAmount; - private double clusterExplosionsMinDelay; - private double clusterExplosionsMaxDelay; - private double clusterExplosionsRadius; - private double clusterExplosionsPower; - - //placeBlock - private boolean spawnEnabled; - private double spawnBlockRadius; - private double spawnEntityRadius; - private double spawnVelocity; - private List spawnBlocks = new ArrayList<>(); - private List spawnEntities = new ArrayList<>(); - private List spawnProjectiles; - - //spawn Fireworks - private boolean fireworksEnabled; - private boolean fireworksFlicker; - private boolean fireworksTrail; - private FireworkEffect.Type fireworksType; - private List fireworksColors; - private List fireworksFadeColors; - - //messages - private boolean impactMessage; - - //sounds - private SoundHolder soundLoading; - private SoundHolder soundImpact; - private SoundHolder soundImpactProtected; - private SoundHolder soundImpactWater; - - //permissions - private List permissionLoad = new ArrayList(); - - public Projectile(String id) - { - this.projectileID = id; - } - - @Override - public Projectile clone(){ - try - { - // call clone in Object. - return (Projectile) super.clone(); - } - catch(CloneNotSupportedException e) - { - //Cannons.logger().info("Cloning not allowed."); - return this; - } - } - - /** - * returns true if both the id and data are equivalent of data == -1 - * @param materialHolder the material of the loaded item - * @return true if the materials match - */ - public boolean equals(ItemHolder materialHolder) - { - return loadingItem.equalsFuzzy(materialHolder); - } - - /** - * returns true if both the id and data are equivalent of data == -1 - * @param projectileID the file name id of the projectile - * @return true if the id matches - */ - public boolean equals(String projectileID) - { - return this.projectileID.equals(projectileID); - } - - - - /** - * returns ID, Data, name and lore of the projectile loading item - * @return ID, Data, name and lore of the projectile loading item - */ - public String toString() - { - return loadingItem.toString(); - } - - /** - * returns ID and data of the loadingItem - * @return ID and data of the loadingItem - */ - public String getMaterialInformation() { - return loadingItem.getType().toString(); - } - - /** - * returns true if the projectile has this property - * @param properties properties of the projectile - * @return true if the projectile has this property - */ - public boolean hasProperty(ProjectileProperties properties) - { - for (ProjectileProperties propEnum : this.getPropertyList()) - { - if (propEnum.equals(properties)) - return true; - } - return false; - } - - /** - * returns true if the player has permission to use that projectile - * @param player who tried to load this projectile - * @return true if the player can load this projectile - */ - public boolean hasPermission(Player player) - { - if (player == null) return true; - - for (String perm : permissionLoad) - { - if(!player.hasPermission(perm)) - { - //missing permission - return false; - } - } - //player has all permissions - return true; - } +@Data +public class Projectile implements Cloneable { + private String projectileID; + private String projectileName; + private String description; + private String itemName; + private ItemHolder loadingItem; + //list of items or blocks that can represent this this (e.g. redstone dust may for wire when you click a block) + private List alternativeItemList = new ArrayList<>(); + + //properties of the cannonball + private EntityType projectileEntity; + private boolean projectileOnFire; + private double velocity; + private double penetration; + private double timefuse; + private double automaticFiringDelay; + private int automaticFiringMagazineSize; + private int numberOfBullets; + private double spreadMultiplier; + private int sentryIgnoredBlocks; + private List propertyList = new ArrayList<>(); + + //smokeTrail + private boolean smokeTrailEnabled; + private int smokeTrailDistance; + private BlockData smokeTrailMaterial; + private double smokeTrailDuration; + private boolean smokeTrailParticleEnabled; + @Getter + @Setter + private ParticleBuilder smokeTrailParticle; + + //explosion + private float explosionPower; + private boolean explosionPowerDependsOnVelocity; + private boolean explosionDamage; + private boolean underwaterDamage; + private boolean penetrationDamage; + private double directHitDamage; + private double playerDamageRange; + private double playerDamage; + private double potionRange; + private double potionDuration; + private int potionAmplifier; + private List potionsEffectList = new ArrayList(); + private boolean impactIndicator; + + //cluster + private boolean clusterExplosionsEnabled; + private boolean clusterExplosionsInBlocks; + private int clusterExplosionsAmount; + private double clusterExplosionsMinDelay; + private double clusterExplosionsMaxDelay; + private double clusterExplosionsRadius; + private double clusterExplosionsPower; + + //placeBlock + private boolean spawnEnabled; + private double spawnBlockRadius; + private double spawnEntityRadius; + private double spawnVelocity; + private List spawnBlocks = new ArrayList<>(); + private List spawnEntities = new ArrayList<>(); + private List spawnProjectiles; + + //spawn Fireworks + private boolean fireworksEnabled; + private boolean fireworksFlicker; + private boolean fireworksTrail; + private FireworkEffect.Type fireworksType; + private List fireworksColors; + private List fireworksFadeColors; + + //messages + private boolean impactMessage; + + //sounds + private SoundHolder soundLoading; + private SoundHolder soundImpact; + private SoundHolder soundImpactProtected; + private SoundHolder soundImpactWater; + + //permissions + private List permissionLoad = new ArrayList(); + + public Projectile(String id) { + this.projectileID = id; + } + + @Override + public Projectile clone() { + try { + // call clone in Object. + return (Projectile) super.clone(); + } catch (CloneNotSupportedException e) { + //Cannons.logger().info("Cloning not allowed."); + return this; + } + } + + /** + * returns true if both the id and data are equivalent of data == -1 + * + * @param materialHolder the material of the loaded item + * @return true if the materials match + */ + public boolean equals(ItemHolder materialHolder) { + return loadingItem.equalsFuzzy(materialHolder); + } + + /** + * returns true if both the id and data are equivalent of data == -1 + * + * @param projectileID the file name id of the projectile + * @return true if the id matches + */ + public boolean equals(String projectileID) { + return this.projectileID.equals(projectileID); + } + + + /** + * returns ID, Data, name and lore of the projectile loading item + * + * @return ID, Data, name and lore of the projectile loading item + */ + public String toString() { + return loadingItem.toString(); + } + + /** + * returns ID and data of the loadingItem + * + * @return ID and data of the loadingItem + */ + public String getMaterialInformation() { + return loadingItem.getType().toString(); + } + + /** + * returns true if the projectile has this property + * + * @param properties properties of the projectile + * @return true if the projectile has this property + */ + public boolean hasProperty(ProjectileProperties properties) { + for (ProjectileProperties propEnum : this.getPropertyList()) { + if (propEnum.equals(properties)) + return true; + } + return false; + } + + /** + * returns true if the player has permission to use that projectile + * + * @param player who tried to load this projectile + * @return true if the player can load this projectile + */ + public boolean hasPermission(Player player) { + if (player == null) return true; + + for (String perm : permissionLoad) { + if (!player.hasPermission(perm)) { + //missing permission + return false; + } + } + //player has all permissions + return true; + } } From 906a49c8c65ddd76c0772f3c84a7dc0f2ea0f308 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 18:22:29 +0100 Subject: [PATCH 18/97] Centralize lombok dependency --- api-bukkit/pom.xml | 6 ------ api-internal/pom.xml | 6 ------ cannons-bukkit/pom.xml | 6 ------ pom.xml | 9 +++++++++ 4 files changed, 9 insertions(+), 18 deletions(-) diff --git a/api-bukkit/pom.xml b/api-bukkit/pom.xml index 70386f4d..dc16d794 100644 --- a/api-bukkit/pom.xml +++ b/api-bukkit/pom.xml @@ -37,12 +37,6 @@ 1.21.1-R0.1-SNAPSHOT provided - - org.projectlombok - lombok - 1.18.36 - provided - \ No newline at end of file diff --git a/api-internal/pom.xml b/api-internal/pom.xml index ffdb7b6d..2a56f3ea 100644 --- a/api-internal/pom.xml +++ b/api-internal/pom.xml @@ -21,12 +21,6 @@ gson 2.11.0 - - org.projectlombok - lombok - 1.18.36 - provided - org.jetbrains annotations diff --git a/cannons-bukkit/pom.xml b/cannons-bukkit/pom.xml index e24ea77b..fe42837b 100644 --- a/cannons-bukkit/pom.xml +++ b/cannons-bukkit/pom.xml @@ -132,12 +132,6 @@ 1.0.7 compile - - org.projectlombok - lombok - 1.18.36 - provided - net.countercraft movecraft diff --git a/pom.xml b/pom.xml index 9e9d3067..805169a2 100644 --- a/pom.xml +++ b/pom.xml @@ -21,4 +21,13 @@ cannons-bukkit api-bukkit + + + + org.projectlombok + lombok + 1.18.36 + provided + + \ No newline at end of file From 5336dd4bb775b8b6ef61bbaf3ebb8adb715d9bcd Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 19:16:46 +0100 Subject: [PATCH 19/97] Remove removal designated methods --- .../holders/AmmoLoadingDataHolder.java | 6 ++ .../main/java/at/pavlov/cannons/Cannons.java | 75 ------------------- .../java/at/pavlov/cannons/cannon/Cannon.java | 12 --- .../pavlov/cannons/cannon/CannonManager.java | 3 +- .../java/at/pavlov/cannons/config/Config.java | 10 --- .../cannons/listener/PlayerListener.java | 2 +- 6 files changed, 9 insertions(+), 99 deletions(-) diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/AmmoLoadingDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/AmmoLoadingDataHolder.java index 4c1cbecc..3ee31138 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/AmmoLoadingDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/AmmoLoadingDataHolder.java @@ -116,6 +116,12 @@ default double getTemperature(boolean update) { boolean barrelTooHot(); boolean isOverheatedAfterFiring(); + + /** + * removes cooling item form the chest attached to the cannon, returns true if it was enough to cool down the cannon + * + * @return - true if the cannon has been cooled down + */ boolean automaticCooling(); //endregion diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java index 334a7008..351fbd35 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java @@ -411,75 +411,16 @@ public PersistenceDatabase getPersistenceDatabase() return persistenceDatabase; } - @Deprecated(forRemoval = true) - public CannonManager getCannonManager() - { - return CannonManager.getInstance(); - } - public FireCannon getFireCannon() { return fireCannon; } - @Deprecated(forRemoval = true) - public CreateExplosion getExplosion() - { - return CreateExplosion.getInstance(); - } - - @Deprecated(forRemoval = true) - public Aiming getAiming() - { - return Aiming.getInstance(); - } - public PlayerListener getPlayerListener() { return playerListener; } - @Deprecated(forRemoval = true) - public DesignStorage getDesignStorage() { - return DesignStorage.getInstance(); - } - - @Deprecated(forRemoval = true) - public CannonDesign getCannonDesign(Cannon cannon) - { - return getDesignStorage().getDesign(cannon); - } - - @Deprecated(forRemoval = true) - public CannonDesign getCannonDesign(String designId) - { - return getDesignStorage().getDesign(designId); - } - - @Deprecated(forRemoval = true) - public ProjectileStorage getProjectileStorage() - { - return ProjectileStorage.getInstance(); - } - - @Deprecated(forRemoval = true) - public Projectile getProjectile(Cannon cannon, ItemHolder materialHolder) - { - return ProjectileStorage.getProjectile(cannon, materialHolder); - } - - @Deprecated(forRemoval = true) - public Projectile getProjectile(Cannon cannon, ItemStack item) - { - return ProjectileStorage.getProjectile(cannon, item); - } - - @Deprecated(forRemoval = true) - public Cannon getCannon(UUID id) - { - return CannonManager.getCannon(id); - } - public EntityListener getEntityListener() { return entityListener; @@ -495,30 +436,14 @@ public void sendImpactMessage(Player player, Location impact, boolean canceled) UserMessages.getInstance().sendImpactMessage(player, impact, canceled); } - @Deprecated(forRemoval = true) - public void createCannon(Cannon cannon, boolean saveToDatabase) - { - CannonManager.getInstance().createCannon(cannon, saveToDatabase); - } - public ProjectileObserver getProjectileObserver() { return observer; } - @Deprecated(forRemoval = true) - public ProjectileManager getProjectileManager(){ - return ProjectileManager.getInstance(); - } - public BlockListener getBlockListener() { return blockListener; } - @Deprecated(forRemoval = true) - public FakeBlockHandler getFakeBlockHandler() { - return FakeBlockHandler.getInstance(); - } - public Economy getEconomy(){ return vaultHook.hook(); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index c7cdc85f..e2895f21 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -256,17 +256,6 @@ private MessageEnum loadGunpowderBarrel(boolean consumesAmmo, List in @Override public boolean automaticCooling() { - return automaticCoolingFromChest(); - } - - /** - * removes cooling item form the chest attached to the cannon, returns true if it was enough to cool down the cannon - * - * @return - true if the cannon has been cooled down - */ - @Deprecated(forRemoval = true) - public boolean automaticCoolingFromChest() { - List invlist = getInventoryList(); //cooling items will be consumed from the inventory @@ -304,7 +293,6 @@ public boolean automaticCoolingFromChest() { return false; } - /** * returns the inventories of all attached chests * diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index a6d04328..ef1b409c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -5,6 +5,7 @@ import at.pavlov.bukkit.container.SimpleBlock; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; +import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.internal.enums.BreakCause; import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.config.Config; @@ -874,7 +875,7 @@ public void updateCannons() { cannon.setCannonDesign(DesignStorage.getInstance().getDesign(cannon)); if (cannon.getLoadedProjectile() != null) { ItemHolder item = cannon.getLoadedProjectile().getLoadingItem(); - cannon.setLoadedProjectile(plugin.getProjectile(cannon, item)); + cannon.setLoadedProjectile(ProjectileStorage.getProjectile(cannon, item)); } } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java index 7131949c..4105df84 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java @@ -222,16 +222,6 @@ public void loadConfig() { plugin.setDebugMode(debugMode); } - @Deprecated(forRemoval = true) - public UserMessages getUserMessages() { - return UserMessages.getInstance(); - } - - @Deprecated(forRemoval = true) - public CannonManager getCannonManager() { - return CannonManager.getInstance(); - } - public boolean isCancelItem(ItemStack item) { for (ItemHolder item2 : getCancelItems()) { if (item2.equalsFuzzy(item)) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java index 16fc63a9..3a463023 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java @@ -121,7 +121,7 @@ public void PlayerBucketEmpty(PlayerBucketEmptyEvent event) if (cannon != null) { // data =-1 means no data check, all buckets are allowed - Projectile projectile = plugin.getProjectile(cannon, event.getItemStack()); + Projectile projectile = ProjectileStorage.getProjectile(cannon, event.getItemStack()); if (projectile != null) event.setCancelled(true); } } From 9d1f7841af33231fccad765a54ebc7e67de1cc50 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 19:17:02 +0100 Subject: [PATCH 20/97] Turn SpawnMaterialHolder into data class --- .../bukkit/container/SpawnMaterialHolder.java | 39 +++---------------- 1 file changed, 6 insertions(+), 33 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java index 15d4f8e0..6c6560ea 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java @@ -1,25 +1,24 @@ package at.pavlov.bukkit.container; +import lombok.Data; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import java.util.Scanner; -import java.util.logging.Level; import java.util.regex.MatchResult; +@Data public class SpawnMaterialHolder { private BlockData material; private int minAmount; private int maxAmount; - public SpawnMaterialHolder(String str) - { + public SpawnMaterialHolder(String str) { //split string at space // id:data min-max // 10:0 1-2 - try - { + try { Scanner s = new Scanner(str); s.findInLine("(\\S+)\\s(\\d+)-(\\d+)"); MatchResult result = s.match(); @@ -27,11 +26,9 @@ public SpawnMaterialHolder(String str) setMinAmount(Integer.parseInt(result.group(2))); setMaxAmount(Integer.parseInt(result.group(3))); s.close(); - } - catch(Exception e) - { + } catch (Exception e) { //Cannons.logger().log(Level.SEVERE,"Error while converting " + str + ". Check formatting (minecraft:cobweb 1-2)"); - material = Bukkit.createBlockData(Material.AIR); + material = Bukkit.createBlockData(Material.AIR); setMinAmount(0); setMaxAmount(0); } @@ -42,28 +39,4 @@ public SpawnMaterialHolder(BlockData material, int minAmount, int maxAmount) { this.minAmount = minAmount; this.maxAmount = maxAmount; } - - public int getMinAmount() { - return minAmount; - } - - public void setMinAmount(int minAmount) { - this.minAmount = minAmount; - } - - public int getMaxAmount() { - return maxAmount; - } - - public void setMaxAmount(int maxAmount) { - this.maxAmount = maxAmount; - } - - public BlockData getMaterial(){ - return this.material; - } - - public void setMaterial(BlockData material){ - this.material = material; - } } From 67666f26b92955a7420c867af8af6b34a6d4e3ae Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 19:22:16 +0100 Subject: [PATCH 21/97] Use firework builder --- .../at/pavlov/bukkit/projectile/Projectile.java | 6 +----- .../java/at/pavlov/cannons/CreateExplosion.java | 17 ++++------------- .../cannons/projectile/ProjectileStorage.java | 13 ++++++++----- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index 3c4ba078..451a8541 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -87,11 +87,7 @@ public class Projectile implements Cloneable { //spawn Fireworks private boolean fireworksEnabled; - private boolean fireworksFlicker; - private boolean fireworksTrail; - private FireworkEffect.Type fireworksType; - private List fireworksColors; - private List fireworksFadeColors; + private FireworkEffect.Builder fireworkEffect; //messages private boolean impactMessage; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index f3e49809..e4697b5d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -1187,26 +1187,17 @@ private void spawnFireworks(FlyingProjectile cannonball, org.bukkit.entity.Proje World world = cannonball.getWorld(); Projectile projectile = cannonball.getProjectile(); + FireworkEffect.Builder fireworkBuilder = projectile.getFireworkEffect(); + FireworkEffect fireworkEffect = fireworkBuilder.build(); // a fireworks needs some colors - if (!projectile.isFireworksEnabled() || projectile.getFireworksColors().isEmpty()) + if (!projectile.isFireworksEnabled() || fireworkEffect.getColors().isEmpty()) return; - // building the fireworks effect - FireworkEffect.Builder fwb = FireworkEffect.builder().flicker(projectile.isFireworksFlicker()) - .trail(projectile.isFireworksTrail()).with(projectile.getFireworksType()); - // setting colors - for (Integer color : projectile.getFireworksColors()) { - fwb.withColor(Color.fromRGB(color)); - } - for (Integer color : projectile.getFireworksFadeColors()) { - fwb.withFade(Color.fromRGB(color)); - } - // apply to rocket final Firework fw = (Firework) world.spawnEntity(projectile_entity.getLocation(), EntityTypeResolver.getFirework()); FireworkMeta meta = fw.getFireworkMeta(); - meta.addEffect(fwb.build()); + meta.addEffect(fireworkEffect); meta.setPower(0); fw.setFireworkMeta(meta); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index ea70eabc..4931f569 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -277,11 +277,14 @@ private Projectile loadYml(String ymlFile) //spawnFireworks projectile.setFireworksEnabled(projectileConfig.getBoolean("spawnFireworks.enabled", false)); - projectile.setFireworksFlicker(projectileConfig.getBoolean("spawnFireworks.flicker",false)); - projectile.setFireworksTrail(projectileConfig.getBoolean("spawnFireworks.trail",false)); - projectile.setFireworksType(getFireworksType(projectileConfig.getString("spawnFireworks.type", "BALL"))); - projectile.setFireworksColors(toColor(projectileConfig.getStringList("spawnFireworks.colors"))); - projectile.setFireworksFadeColors(toColor(projectileConfig.getStringList("spawnFireworks.fadeColors"))); + FireworkEffect.Builder fw = FireworkEffect.builder() + .flicker(projectileConfig.getBoolean("spawnFireworks.flicker",false)) + .trail(projectileConfig.getBoolean("spawnFireworks.trail",false)) + .with(getFireworksType(projectileConfig.getString("spawnFireworks.type", "BALL"))) + .withColor(toColor(projectileConfig.getStringList("spawnFireworks.colors"))) + .withFade(toColor(projectileConfig.getStringList("spawnFireworks.fadeColors"))); + + projectile.setFireworkEffect(fw); //messages projectile.setImpactMessage(projectileConfig.getBoolean("messages.hasImpactMessage", false)); From c26616a28033b7492c8a198dada3ca632114d797 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 19:25:49 +0100 Subject: [PATCH 22/97] Beautify + turn SpawnEntityHolder into a Dataclass --- .../bukkit/container/SpawnEntityHolder.java | 56 ++++--------------- 1 file changed, 10 insertions(+), 46 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java index 052697ca..d3af6c48 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java @@ -1,24 +1,28 @@ package at.pavlov.bukkit.container; import at.pavlov.internal.enums.EntityDataType; +import lombok.Data; import org.bukkit.entity.EntityType; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class SpawnEntityHolder{ +@Data public class SpawnEntityHolder { private EntityType type; private int minAmount; private int maxAmount; private Map data; private List potionEffects; - public SpawnEntityHolder(String str) - { + public SpawnEntityHolder(String str) { //split string at space // NAME min-max // ZOMBIE 1-2 @@ -60,7 +64,7 @@ public SpawnEntityHolder(String str) Pattern p = Pattern.compile("(?<=\\{)(.+)(?=\\})"); Matcher m = p.matcher(result.group(4)); String strdata = null; - if(m.find()) + if (m.find()) strdata = m.group(1); //if there are no curly braces set the string to complete argument @@ -150,7 +154,7 @@ public SpawnEntityHolder(String str) } s.close(); //Cannons.logger().info("type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); - } catch(Exception e) { + } catch (Exception e) { //Cannons.logger().log(Level.SEVERE, "Error while converting " + str + ". Check formating (Zombie 1-2 EntityData)" + e); setType(null); setMinAmount(0); @@ -164,44 +168,4 @@ public SpawnEntityHolder(EntityType type, int minAmount, int maxAmount, Map getData() { - return data; - } - - public void setData(Map data) { - this.data = data; - } - - public List getPotionEffects() { - return potionEffects; - } - - public void setPotionEffects(List potionEffects) { - this.potionEffects = potionEffects; - } } From dd8ef8a15d928fa3682456935ebb88ca67b23b3d Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 19:33:35 +0100 Subject: [PATCH 23/97] fix wait time --- .../src/main/java/at/pavlov/internal/enums/EntityDataType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java index 883776c6..df9a645e 100644 --- a/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java @@ -13,7 +13,7 @@ public enum EntityDataType { DURATION ("Duration"), DURATION_ON_USE ("DurationOnUse"), EFFECTS ("Effects"), - WAIT_TIME ("WaitTime "), + WAIT_TIME ("WaitTime"), MAIN_HAND_ITEM ("MainHandItem"), OFF_HAND_ITEM ("OffHandItem"), HELMET_ARMOR_ITEM ("HelmetArmorItem"), From afdcba7333cd77bc13b02e13883ee05679f64dc6 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 19:34:08 +0100 Subject: [PATCH 24/97] this is impossible to use --- .../src/main/java/at/pavlov/internal/enums/EntityDataType.java | 1 - 1 file changed, 1 deletion(-) diff --git a/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java index df9a645e..28d8bdf9 100644 --- a/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java @@ -12,7 +12,6 @@ public enum EntityDataType { RADIUS_ON_USE ("RadiusOnUse"), DURATION ("Duration"), DURATION_ON_USE ("DurationOnUse"), - EFFECTS ("Effects"), WAIT_TIME ("WaitTime"), MAIN_HAND_ITEM ("MainHandItem"), OFF_HAND_ITEM ("OffHandItem"), From c50e59fd3bf0588be4bf594b4c0021ff0b0d2076 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 19:37:48 +0100 Subject: [PATCH 25/97] better item stack parsing --- .../java/at/pavlov/cannons/utils/ParseUtils.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java index b2a1d17a..b883093f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Locale; public class ParseUtils { /** @@ -116,11 +117,12 @@ public static ItemStack parseItemstack(String str, ItemStack default_value) { return default_value; } - for (Material mt : Material.values()) - if (str.equalsIgnoreCase(mt.toString())){ - return new ItemStack(mt); - } - return default_value; + try { + Material m = Material.valueOf(str.toUpperCase()); + return new ItemStack(m); + } catch (Exception e) { + return default_value; + } } /** From 2468809a266976072ad83040180dbda433ff920a Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 19:51:28 +0100 Subject: [PATCH 26/97] Remove unnecessary stuff --- .../src/main/java/at/pavlov/bukkit/projectile/Projectile.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index 451a8541..4ddfd16f 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -48,8 +48,6 @@ public class Projectile implements Cloneable { private BlockData smokeTrailMaterial; private double smokeTrailDuration; private boolean smokeTrailParticleEnabled; - @Getter - @Setter private ParticleBuilder smokeTrailParticle; //explosion @@ -64,7 +62,7 @@ public class Projectile implements Cloneable { private double potionRange; private double potionDuration; private int potionAmplifier; - private List potionsEffectList = new ArrayList(); + private List potionsEffectList = new ArrayList<>(); private boolean impactIndicator; //cluster From 2d9f8e4293ed467510a79a230222bf7c011e812e Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 20:03:08 +0100 Subject: [PATCH 27/97] Add logger holder --- .../at/pavlov/bukkit/cannons/CannonDesign.java | 5 +++-- .../at/pavlov/bukkit/container/ItemHolder.java | 2 +- .../pavlov/bukkit/container/SoundHolder.java | 8 ++++---- .../bukkit/container/SpawnEntityHolder.java | 14 +++++++------- .../bukkit/container/SpawnMaterialHolder.java | 2 +- .../pavlov/bukkit/projectile/Projectile.java | 2 +- .../java/at/pavlov/internal/CannonLogger.java | 18 ++++++++++++++++++ .../main/java/at/pavlov/cannons/Cannons.java | 2 ++ 8 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 api-internal/src/main/java/at/pavlov/internal/CannonLogger.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index 5803224f..8213ae4d 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -4,6 +4,7 @@ import at.pavlov.bukkit.container.SimpleBlock; import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.internal.CannonLogger; import lombok.Data; import org.bukkit.Location; import org.bukkit.Material; @@ -202,7 +203,7 @@ public Location getRotationCenter(CannonBukkit cannon) return cannonBlocks.getRotationCenter().clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit()); } - //Cannons.logger().info("missing rotation center for cannon design " + cannon.getCannonName()); + CannonLogger.getLogger().info("missing rotation center for cannon design " + cannon.getCannonName()); return cannon.getOffset().toLocation(cannon.getWorldBukkit()); } @@ -218,7 +219,7 @@ public Location getMuzzle(CannonBukkit cannon) return cannonBlocks.getMuzzle().clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit()); } - //Cannons.logger().info("missing muzzle location for cannon design " + cannon.getCannonName()); + CannonLogger.getLogger().info("missing muzzle location for cannon design " + cannon.getCannonName()); return cannon.getOffset().toLocation(cannon.getWorldBukkit()); } diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java index f494de3f..86938f85 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java @@ -89,7 +89,7 @@ public ItemHolder(String str) s.close(); } catch(Exception e) { - //Cannons.logger().log(Level.SEVERE,"[CANNONS] Error while converting " + str + ". Check formatting (minecraft:clock)"); + CannonLogger.getLogger().log(Level.SEVERE,"[CANNONS] Error while converting " + str + ". Check formatting (minecraft:clock)"); } } diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java index f10e4945..b443ac48 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java @@ -39,20 +39,20 @@ public SoundHolder(String str) { return; } - //Cannons.logger().log(Level.WARNING,"missing sound value in: " + str); + CannonLogger.getLogger().log(Level.WARNING,"missing sound value in: " + str); if (s.hasNextFloat()) { volume = s.nextFloat(); return; } - //Cannons.logger().log(Level.WARNING,"missing volume value in: " + str); + CannonLogger.getLogger().log(Level.WARNING,"missing volume value in: " + str); if (s.hasNextFloat()) { pitch = s.nextFloat(); } - //Cannons.logger().log(Level.WARNING,"missing pitch value in: " + str); + CannonLogger.getLogger().log(Level.WARNING,"missing pitch value in: " + str); } catch (Exception e) { - //Cannons.logger().log(Level.SEVERE, "Error while converting " + str + ". Formatting: 'IRON_GOLEM_WALK:1:0.5'" + e.toString()); + CannonLogger.getLogger().log(Level.SEVERE, "Error while converting " + str + ". Formatting: 'IRON_GOLEM_WALK:1:0.5'" + e.toString()); } } diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java index d3af6c48..b3cf157b 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java @@ -50,13 +50,13 @@ public SpawnEntityHolder(String str) { } } catch (Exception e) { s.close(); - //Cannons.logger().log(Level.SEVERE, "Error: wrong entity type or min-max values"); + CannonLogger.getLogger().log(Level.SEVERE, "Error: wrong entity type or min-max values"); return; } if (result.group(4) == null) { s.close(); - //Cannons.logger().log(Level.WARNING, "type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); + CannonLogger.getLogger().log(Level.WARNING, "type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); return; } @@ -79,7 +79,7 @@ public SpawnEntityHolder(String str) { String[] s2 = s1.split(":(?![^\\[]*\\])"); // check if there are argument and value if (s2.length <= 1) { - //Cannons.logger().log(Level.SEVERE, "" + s1 + " does not have an argument, use 'DURATION:10'"); + CannonLogger.getLogger().log(Level.SEVERE, "" + s1 + " does not have an argument, use 'DURATION:10'"); continue; } @@ -97,7 +97,7 @@ public SpawnEntityHolder(String str) { } } if (!found) { - //Cannons.logger().log(Level.SEVERE, "'" + s2[0] + "' is not supported by Cannons"); + CannonLogger.getLogger().log(Level.SEVERE, "'" + s2[0] + "' is not supported by Cannons"); } continue; } @@ -144,7 +144,7 @@ public SpawnEntityHolder(String str) { icon = Boolean.parseBoolean(val); break; default: - //Cannons.logger().log(Level.SEVERE, "'" + s3[0] + "' is not a correct potion effect argument. See Bukkit PotionType"); + CannonLogger.getLogger().log(Level.SEVERE, "'" + s3[0] + "' is not a correct potion effect argument. See Bukkit PotionType"); } } //Cannons.getPlugin().logDebug("AREA OF EFFECT CLOUD potion type: " + type + " duration " + duration + " amplifier " + amplifier + " ambient " + ambient + " particles " + particles + " icon " + icon); @@ -153,9 +153,9 @@ public SpawnEntityHolder(String str) { } } s.close(); - //Cannons.logger().info("type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); + CannonLogger.getLogger().info("type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); } catch (Exception e) { - //Cannons.logger().log(Level.SEVERE, "Error while converting " + str + ". Check formating (Zombie 1-2 EntityData)" + e); + CannonLogger.getLogger().log(Level.SEVERE, "Error while converting " + str + ". Check formating (Zombie 1-2 EntityData)" + e); setType(null); setMinAmount(0); setMaxAmount(0); diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java index 6c6560ea..135eeecd 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java @@ -27,7 +27,7 @@ public SpawnMaterialHolder(String str) { setMaxAmount(Integer.parseInt(result.group(3))); s.close(); } catch (Exception e) { - //Cannons.logger().log(Level.SEVERE,"Error while converting " + str + ". Check formatting (minecraft:cobweb 1-2)"); + CannonLogger.getLogger().log(Level.SEVERE,"Error while converting " + str + ". Check formatting (minecraft:cobweb 1-2)"); material = Bukkit.createBlockData(Material.AIR); setMinAmount(0); setMaxAmount(0); diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index 4ddfd16f..94e9f6a4 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -109,7 +109,7 @@ public Projectile clone() { // call clone in Object. return (Projectile) super.clone(); } catch (CloneNotSupportedException e) { - //Cannons.logger().info("Cloning not allowed."); + CannonLogger.getLogger().info("Cloning not allowed."); return this; } } diff --git a/api-internal/src/main/java/at/pavlov/internal/CannonLogger.java b/api-internal/src/main/java/at/pavlov/internal/CannonLogger.java new file mode 100644 index 00000000..c2d0fa42 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/CannonLogger.java @@ -0,0 +1,18 @@ +package at.pavlov.internal; + +import lombok.Getter; + +import java.util.logging.Logger; + +public class CannonLogger { + @Getter + private static Logger logger = null; + + private CannonLogger() {} + + public static void instantiate(Logger logger) { + if (CannonLogger.logger == null) { + CannonLogger.logger = logger; + } + } +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java index 351fbd35..ab934a3d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java @@ -3,6 +3,7 @@ import at.pavlov.bukkit.container.ItemHolder; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.API.CannonsAPI; +import at.pavlov.internal.CannonLogger; import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.bukkit.cannons.CannonDesign; @@ -93,6 +94,7 @@ public static Cannons getPlugin() { } public void onLoad() { + CannonLogger.instantiate(this.getLogger()); // must be done in onLoad because "movecraft" AsyncTaskManager.initialize(this); UserMessages.initialize(this); From 4c845efe295d1711a32ec0728f9db08af9f695b7 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 20:07:36 +0100 Subject: [PATCH 28/97] Rename equals to check --- .../main/java/at/pavlov/bukkit/projectile/Projectile.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index 94e9f6a4..ea13dd5a 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -5,10 +5,9 @@ import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.bukkit.container.SpawnEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; +import at.pavlov.internal.CannonLogger; import at.pavlov.internal.enums.ProjectileProperties; import lombok.Data; -import lombok.Getter; -import lombok.Setter; import org.bukkit.FireworkEffect; import org.bukkit.block.data.BlockData; import org.bukkit.entity.EntityType; @@ -120,7 +119,7 @@ public Projectile clone() { * @param materialHolder the material of the loaded item * @return true if the materials match */ - public boolean equals(ItemHolder materialHolder) { + public boolean check(ItemHolder materialHolder) { return loadingItem.equalsFuzzy(materialHolder); } @@ -130,7 +129,7 @@ public boolean equals(ItemHolder materialHolder) { * @param projectileID the file name id of the projectile * @return true if the id matches */ - public boolean equals(String projectileID) { + public boolean check(String projectileID) { return this.projectileID.equals(projectileID); } From 3acbf65c45ba0c5c7a9ddab5ba2be922f0926e02 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 20:07:51 +0100 Subject: [PATCH 29/97] Import cannon logger --- .../main/java/at/pavlov/bukkit/container/ItemHolder.java | 2 ++ .../main/java/at/pavlov/bukkit/container/SoundHolder.java | 1 + .../java/at/pavlov/bukkit/container/SpawnEntityHolder.java | 2 ++ .../at/pavlov/bukkit/container/SpawnMaterialHolder.java | 2 ++ .../at/pavlov/cannons/projectile/ProjectileStorage.java | 6 +++--- 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java index 86938f85..c9e5e552 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java @@ -1,5 +1,6 @@ package at.pavlov.bukkit.container; +import at.pavlov.internal.CannonLogger; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Block; @@ -8,6 +9,7 @@ import org.bukkit.inventory.meta.ItemMeta; import java.util.*; +import java.util.logging.Level; //small class as at.pavlov.cannons.container for item id and data diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java index b443ac48..379ce66c 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java @@ -1,5 +1,6 @@ package at.pavlov.bukkit.container; +import at.pavlov.internal.CannonLogger; import org.bukkit.Sound; import java.util.Locale; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java index b3cf157b..fe8a0c36 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java @@ -1,5 +1,6 @@ package at.pavlov.bukkit.container; +import at.pavlov.internal.CannonLogger; import at.pavlov.internal.enums.EntityDataType; import lombok.Data; import org.bukkit.entity.EntityType; @@ -11,6 +12,7 @@ import java.util.List; import java.util.Map; import java.util.Scanner; +import java.util.logging.Level; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java index 135eeecd..d34de711 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java @@ -1,11 +1,13 @@ package at.pavlov.bukkit.container; +import at.pavlov.internal.CannonLogger; import lombok.Data; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; import java.util.Scanner; +import java.util.logging.Level; import java.util.regex.MatchResult; @Data diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index 4931f569..9c9f894e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -76,7 +76,7 @@ public static Projectile getProjectile(Cannon cannon, ItemHolder materialHolder) { for (Projectile projectile : projectileList) { - if (cannon.getCannonDesign().canLoad(projectile) && !projectile.getLoadingItem().equals(Material.AIR) && projectile.equals(materialHolder)) + if (cannon.getCannonDesign().canLoad(projectile) && !projectile.getLoadingItem().equals(Material.AIR) && projectile.check(materialHolder)) return projectile; } return null; @@ -92,7 +92,7 @@ public static Projectile getProjectile(Cannon cannon, String projectileId) { for (Projectile projectile : projectileList) { - if (cannon.getCannonDesign().canLoad(projectile) && projectile.equals(projectileId)) + if (cannon.getCannonDesign().canLoad(projectile) && projectile.check(projectileId)) return projectile; } return null; @@ -107,7 +107,7 @@ public static Projectile getProjectile(String projectileId) { for (Projectile projectile : projectileList) { - if (projectile.equals(projectileId)) + if (projectile.check(projectileId)) return projectile; } return null; From 3a71dcbc79508422340bc6a17f40fba7ab0c966d Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 20:14:13 +0100 Subject: [PATCH 30/97] CannonBlocks dataclass --- .../pavlov/bukkit/cannons/CannonBlocks.java | 89 +++---------------- .../pavlov/cannons/cannon/DesignStorage.java | 2 +- 2 files changed, 12 insertions(+), 79 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java index 08026468..1d2e5719 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java @@ -1,6 +1,7 @@ package at.pavlov.bukkit.cannons; import at.pavlov.bukkit.container.SimpleBlock; +import lombok.Data; import org.bukkit.util.Vector; import java.util.ArrayList; @@ -10,7 +11,7 @@ * it is not suggested to create new instances of it but instead * use it to get the positions of the various stuff */ -public class CannonBlocks { +@Data public class CannonBlocks { private Vector rotationCenter; //center off all rotation blocks private Vector muzzle; //center off all muzzle blocks - spawing Vector for snowball @@ -50,108 +51,40 @@ public Vector getFiringTrigger() { return redstoneTrigger.get(0); return null; } - - public Vector getRotationCenter() { - return rotationCenter; - } - public void setRotationCenter(Vector rotationCenter) { - this.rotationCenter = rotationCenter; - } - - public Vector getMuzzle() { - return muzzle; - } - public void setMuzzle(Vector muzzle) { - this.muzzle = muzzle; - } - public ArrayList getAllCannonBlocks() { - return allCannonBlocks; - } - public void setAllCannonBlocks(ArrayList allCannonBlocks) { - this.allCannonBlocks = allCannonBlocks; - } - public void addAllCannonBlocks(SimpleBlock add) { + public void addAllCannonBlocks(SimpleBlock add) { this.allCannonBlocks.add(add); } - public ArrayList getBarrelBlocks() { - return barrelBlocks; - } - public void setBarrel(ArrayList barrelBlocks) { - this.barrelBlocks = barrelBlocks; - } - public void addBarrel(Vector add) { + public void addBarrelBlocks(Vector add) { this.barrelBlocks.add(add); } - public ArrayList getRedstoneTorches() { - return redstoneTorches; - } - public void setRedstoneTorches(ArrayList redstoneTorches) { - this.redstoneTorches = redstoneTorches; - } - public void addRedstoneTorch(Vector add) { + public void addRedstoneTorch(Vector add) { this.redstoneTorches.add(add); } - public ArrayList getRedstoneTrigger() { - return redstoneTrigger; - } - public void setRedstoneTrigger(ArrayList redstoneTrigger) { - this.redstoneTrigger = redstoneTrigger; - } - public void addRedstoneTrigger(Vector add) { + public void addRedstoneTrigger(Vector add) { this.redstoneTrigger.add(add); } - public ArrayList getRightClickTrigger() { - return rightClickTrigger; - } - public void setRightClickTrigger(ArrayList rightClickTrigger) { - this.rightClickTrigger = rightClickTrigger; - } - public void addRightClickTrigger(Vector add) { + public void addRightClickTrigger(Vector add) { this.rightClickTrigger.add(add); } - public ArrayList getChestsAndSigns() { - return chestsAndSigns; - } - public void setChestsAndSigns(ArrayList chestsAndSigns) { - this.chestsAndSigns = chestsAndSigns; - } - public void addChestsAndSigns(SimpleBlock add) { + public void addChestsAndSigns(SimpleBlock add) { this.chestsAndSigns.add(add); } - public ArrayList getRedstoneWiresAndRepeater() { - return redstoneWiresAndRepeater; - } - public void setRedstoneWiresAndRepeater(ArrayList redstoneWiresAndRepeater) { - this.redstoneWiresAndRepeater = redstoneWiresAndRepeater; - } - public void addRedstoneWiresAndRepeater(SimpleBlock add) { + public void addRedstoneWiresAndRepeater(SimpleBlock add) { this.redstoneWiresAndRepeater.add(add); } - public ArrayList getFiringIndicator() { - return firingIndicator; - } - public void setFiringIndicator(ArrayList firingIndicator) { - this.firingIndicator = firingIndicator; - } - public void addFiringIndicator(Vector add) { + public void addFiringIndicator(Vector add) { this.firingIndicator.add(add); } - public ArrayList getDestructibleBlocks() { - return destructibleBlocks; - } - public void setDestructibleBlocks(ArrayList destructibleBlocks) { - this.destructibleBlocks = destructibleBlocks; - } - public void addDestructibleBlocks(Vector add) { + public void addDestructibleBlocks(Vector add) { this.destructibleBlocks.add(add); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index 77cf70ee..1b60b8e0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -524,7 +524,7 @@ else if (sblock.compareMaterial(blockChestAndSign)) { // the previous blocks else { // all remaining blocks are loading interface or cannonBlocks - cannonBlocks.addBarrel(new Vector(x, y, z)); + cannonBlocks.addBarrelBlocks(new Vector(x, y, z)); cannonBlocks.addAllCannonBlocks(new SimpleBlock(x, y, z, sblock.getBlockData())); // this can be a destructible block if (!isInList(blockProtectedList, sblock.getBlockData())) From fc33b69d2555558a09505278b37ef4c77da44a7e Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 20:15:25 +0100 Subject: [PATCH 31/97] Turn SoundHolder to dataclass --- .../pavlov/bukkit/container/SoundHolder.java | 67 ++++++------------- 1 file changed, 19 insertions(+), 48 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java index 379ce66c..5644c688 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java @@ -1,15 +1,18 @@ package at.pavlov.bukkit.container; import at.pavlov.internal.CannonLogger; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; import org.bukkit.Sound; import java.util.Locale; import java.util.Scanner; import java.util.logging.Level; -public class SoundHolder { - private Sound soundenum; - private String soundstr; +@Data public class SoundHolder { + private Sound soundEnum; + private String soundString; private Float volume; private Float pitch; @@ -17,8 +20,8 @@ public SoundHolder(String str) { // data structure: // 'IRON_GOLEM_WALK:1:0.5' try(Scanner s = new Scanner(str).useDelimiter("\\s*:\\s*")) { - soundenum = null; - soundstr = null; + soundEnum = null; + soundString = null; volume = 1.0F; pitch = 1.0F; //Scanner s = new Scanner(str).useDelimiter("\\s*:\\s*"); @@ -33,9 +36,9 @@ public SoundHolder(String str) { } try { - soundenum = Sound.valueOf(scan); + soundEnum = Sound.valueOf(scan); } catch (Exception e) { - soundstr = scan; + soundString = scan; } return; } @@ -58,66 +61,34 @@ public SoundHolder(String str) { } public SoundHolder(Sound sound, float volume, float pitch) { - this.soundenum = sound; + this.soundEnum = sound; this.volume = volume; this.pitch = pitch; } public SoundHolder(String sound, float volume, float pitch) { - this.soundstr = sound; + this.soundString = sound; this.volume = volume; this.pitch = pitch; } - public Sound getSoundEnum() { - return soundenum; - } - - public void setSoundEnum(Sound sound) { - this.soundenum = sound; - } - - public String getSoundString() { - return soundstr; - } - - public void setSoundString(String sound) { - this.soundstr = sound; - } - - public Float getVolume() { - return volume; - } - - public void setVolume(Float volume) { - this.volume = volume; - } - - public Float getPitch() { - return pitch; - } - - public void setPitch(Float pitch) { - this.pitch = pitch; - } - public boolean isValid() { - return this.soundenum != null || this.soundstr != null; + return this.soundEnum != null || this.soundString != null; } public boolean isSoundString() { - return this.soundstr != null; + return this.soundString != null; } public boolean isSoundEnum() { - return this.soundenum != null; + return this.soundEnum != null; } public String toString() { - if (this.soundenum != null) - return this.soundenum + ":" + volume + ":" + pitch; - else if (this.soundstr != null) - return this.soundstr + ":" + volume + ":" + pitch; + if (this.soundEnum != null) + return this.soundEnum + ":" + volume + ":" + pitch; + else if (this.soundString != null) + return this.soundString + ":" + volume + ":" + pitch; else return "Sound not found"; } From dc8ebf67704e18fd9ccd788cd2ced8e0a85721d9 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 21:27:15 +0100 Subject: [PATCH 32/97] Relocate Hooks and create BukkitSoundHolder --- .../pavlov/bukkit/cannons/CannonDesign.java | 38 +++++++++---------- .../bukkit/container/BukkitSoundHolder.java | 17 +++++++++ .../pavlov/bukkit/projectile/Projectile.java | 10 ++--- .../internal}/container/SoundHolder.java | 12 +++--- .../at/pavlov/internal/{ => hooks}/Hook.java | 2 +- .../internal/{ => hooks}/HookManager.java | 2 +- .../main/java/at/pavlov/cannons/Cannons.java | 9 +---- .../at/pavlov/cannons/CreateExplosion.java | 4 +- .../pavlov/cannons/cannon/DesignStorage.java | 38 +++++++++---------- .../at/pavlov/cannons/hooks/BukkitHook.java | 2 +- .../at/pavlov/cannons/hooks/VaultHook.java | 2 +- .../hooks/movecraft/MovecraftHook.java | 2 +- .../movecraftcombat/MovecraftCombatHook.java | 2 +- .../hooks/papi/PlaceholderAPIHook.java | 2 +- .../cannons/projectile/ProjectileStorage.java | 10 ++--- .../cannons/scheduler/ProjectileObserver.java | 4 +- .../at/pavlov/cannons/utils/SoundUtils.java | 6 +-- 17 files changed, 87 insertions(+), 75 deletions(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSoundHolder.java rename {api-bukkit/src/main/java/at/pavlov/bukkit => api-internal/src/main/java/at/pavlov/internal}/container/SoundHolder.java (91%) rename api-internal/src/main/java/at/pavlov/internal/{ => hooks}/Hook.java (90%) rename api-internal/src/main/java/at/pavlov/internal/{ => hooks}/HookManager.java (98%) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index 8213ae4d..e821d820 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -1,8 +1,8 @@ package at.pavlov.bukkit.cannons; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.ItemHolder; import at.pavlov.bukkit.container.SimpleBlock; -import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.internal.CannonLogger; import lombok.Data; @@ -152,24 +152,24 @@ private List allowedProjectiles; //sounds - private SoundHolder soundCreate; - private SoundHolder soundDestroy; - private SoundHolder soundDismantle; - private SoundHolder soundAdjust; - private SoundHolder soundIgnite; - private SoundHolder soundFiring; - private SoundHolder soundGunpowderLoading; - private SoundHolder soundGunpowderOverloading; - private SoundHolder soundCool; - private SoundHolder soundHot; - private SoundHolder soundRamrodCleaning; - private SoundHolder soundRamrodCleaningDone; - private SoundHolder soundRamrodPushing; - private SoundHolder soundRamrodPushingDone; - private SoundHolder soundThermometer; - private SoundHolder soundEnableAimingMode; - private SoundHolder soundDisableAimingMode; - private SoundHolder soundSelected; + private BukkitSoundHolder soundCreate; + private BukkitSoundHolder soundDestroy; + private BukkitSoundHolder soundDismantle; + private BukkitSoundHolder soundAdjust; + private BukkitSoundHolder soundIgnite; + private BukkitSoundHolder soundFiring; + private BukkitSoundHolder soundGunpowderLoading; + private BukkitSoundHolder soundGunpowderOverloading; + private BukkitSoundHolder soundCool; + private BukkitSoundHolder soundHot; + private BukkitSoundHolder soundRamrodCleaning; + private BukkitSoundHolder soundRamrodCleaningDone; + private BukkitSoundHolder soundRamrodPushing; + private BukkitSoundHolder soundRamrodPushingDone; + private BukkitSoundHolder soundThermometer; + private BukkitSoundHolder soundEnableAimingMode; + private BukkitSoundHolder soundDisableAimingMode; + private BukkitSoundHolder soundSelected; //constructionblocks: diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSoundHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSoundHolder.java new file mode 100644 index 00000000..02b3b30a --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSoundHolder.java @@ -0,0 +1,17 @@ +package at.pavlov.bukkit.container; + +import at.pavlov.internal.container.SoundHolder; +import org.bukkit.Sound; + +import java.util.function.Function; + +public class BukkitSoundHolder extends SoundHolder { + public BukkitSoundHolder(String str) { + super(str); + } + + @Override + public Function converter() { + return Sound::valueOf; + } +} diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index ea13dd5a..4effba1b 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -1,8 +1,8 @@ package at.pavlov.bukkit.projectile; import at.pavlov.bukkit.builders.ParticleBuilder; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.ItemHolder; -import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.bukkit.container.SpawnEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; import at.pavlov.internal.CannonLogger; @@ -90,10 +90,10 @@ public class Projectile implements Cloneable { private boolean impactMessage; //sounds - private SoundHolder soundLoading; - private SoundHolder soundImpact; - private SoundHolder soundImpactProtected; - private SoundHolder soundImpactWater; + private BukkitSoundHolder soundLoading; + private BukkitSoundHolder soundImpact; + private BukkitSoundHolder soundImpactProtected; + private BukkitSoundHolder soundImpactWater; //permissions private List permissionLoad = new ArrayList(); diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/SoundHolder.java similarity index 91% rename from api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java rename to api-internal/src/main/java/at/pavlov/internal/container/SoundHolder.java index 5644c688..775dd010 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SoundHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/SoundHolder.java @@ -1,16 +1,14 @@ -package at.pavlov.bukkit.container; +package at.pavlov.internal.container; import at.pavlov.internal.CannonLogger; import lombok.Data; -import lombok.Getter; -import lombok.Setter; -import org.bukkit.Sound; import java.util.Locale; import java.util.Scanner; +import java.util.function.Function; import java.util.logging.Level; -@Data public class SoundHolder { +@Data public abstract class SoundHolder { private Sound soundEnum; private String soundString; private Float volume; @@ -36,7 +34,7 @@ public SoundHolder(String str) { } try { - soundEnum = Sound.valueOf(scan); + soundEnum = converter().apply(scan); } catch (Exception e) { soundString = scan; } @@ -60,6 +58,8 @@ public SoundHolder(String str) { } } + public abstract Function converter(); + public SoundHolder(Sound sound, float volume, float pitch) { this.soundEnum = sound; this.volume = volume; diff --git a/api-internal/src/main/java/at/pavlov/internal/Hook.java b/api-internal/src/main/java/at/pavlov/internal/hooks/Hook.java similarity index 90% rename from api-internal/src/main/java/at/pavlov/internal/Hook.java rename to api-internal/src/main/java/at/pavlov/internal/hooks/Hook.java index 3f59d617..bc93e521 100644 --- a/api-internal/src/main/java/at/pavlov/internal/Hook.java +++ b/api-internal/src/main/java/at/pavlov/internal/hooks/Hook.java @@ -1,4 +1,4 @@ -package at.pavlov.internal; +package at.pavlov.internal.hooks; public interface Hook { H hook(); diff --git a/api-internal/src/main/java/at/pavlov/internal/HookManager.java b/api-internal/src/main/java/at/pavlov/internal/hooks/HookManager.java similarity index 98% rename from api-internal/src/main/java/at/pavlov/internal/HookManager.java rename to api-internal/src/main/java/at/pavlov/internal/hooks/HookManager.java index 7bf3d08b..8c575787 100644 --- a/api-internal/src/main/java/at/pavlov/internal/HookManager.java +++ b/api-internal/src/main/java/at/pavlov/internal/hooks/HookManager.java @@ -1,4 +1,4 @@ -package at.pavlov.internal; +package at.pavlov.internal.hooks; import java.util.Collections; import java.util.HashMap; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java index ab934a3d..86d70de7 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java @@ -1,12 +1,9 @@ package at.pavlov.cannons; -import at.pavlov.bukkit.container.ItemHolder; -import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.API.CannonsAPI; import at.pavlov.internal.CannonLogger; import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.commands.CannonsCommandManager; @@ -26,8 +23,8 @@ import at.pavlov.cannons.scheduler.FakeBlockHandler; import at.pavlov.cannons.scheduler.ProjectileObserver; import at.pavlov.cannons.utils.CannonSelector; -import at.pavlov.internal.Hook; -import at.pavlov.internal.HookManager; +import at.pavlov.internal.hooks.Hook; +import at.pavlov.internal.hooks.HookManager; import at.pavlov.internal.ModrinthUpdateChecker; import lombok.Getter; import net.milkbowl.vault.economy.Economy; @@ -37,7 +34,6 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -49,7 +45,6 @@ import java.text.DecimalFormat; import java.util.HashMap; import java.util.Map; -import java.util.UUID; import java.util.logging.Logger; public final class Cannons extends JavaPlugin diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index e4697b5d..53037a62 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -1,6 +1,6 @@ package at.pavlov.cannons; -import at.pavlov.bukkit.container.SoundHolder; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.SpawnEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; import at.pavlov.bukkit.projectile.Projectile; @@ -1221,7 +1221,7 @@ public void run(Object object) { * @param impactLoc Location of the explosion * @param sound Which sound is broadcasted */ - public void sendExplosionToPlayers(Projectile proj, Location impactLoc, SoundHolder sound) { + public void sendExplosionToPlayers(Projectile proj, Location impactLoc, BukkitSoundHolder sound) { SoundUtils.imitateSound(impactLoc, sound, this.config.getImitatedSoundMaximumDistance(), this.config.getImitatedSoundMaximumVolume()); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index 1b60b8e0..263e78de 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -2,9 +2,9 @@ import at.pavlov.bukkit.cannons.CannonBlocks; import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.ItemHolder; import at.pavlov.bukkit.container.SimpleBlock; -import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.container.DesignFileName; import at.pavlov.cannons.utils.CannonsUtil; @@ -328,24 +328,24 @@ private void loadDesignYml(CannonDesign cannonDesign, String ymlFile) cannonDesign.setAllowedProjectiles(cannonDesignConfig.getStringList("allowedProjectiles")); // sounds - cannonDesign.setSoundCreate(new SoundHolder(cannonDesignConfig.getString("sounds.create","BLOCK_ANVIL_LAND:1:0.5"))); - cannonDesign.setSoundDestroy(new SoundHolder(cannonDesignConfig.getString("sounds.destroy","ENTITY_ZOMBIE_ATTACK_IRON_DOOR:1:0.5"))); - cannonDesign.setSoundDismantle(new SoundHolder(cannonDesignConfig.getString("sounds.dismantle", "BLOCK_ANVIL_USE:1:0.5"))); - cannonDesign.setSoundAdjust(new SoundHolder(cannonDesignConfig.getString("sounds.adjust","ENTITY_IRON_GOLEM_STEP:1:0.5"))); - cannonDesign.setSoundIgnite(new SoundHolder(cannonDesignConfig.getString("sounds.ignite","ENTITY_TNT_PRIMED:5:1"))); - cannonDesign.setSoundFiring(new SoundHolder(cannonDesignConfig.getString("sounds.firing","ENTITY_GENERIC_EXPLODE:20:1.5"))); - cannonDesign.setSoundGunpowderLoading(new SoundHolder(cannonDesignConfig.getString("sounds.gunpowderLoading","BLOCK_SAND_HIT:1:1.5"))); - cannonDesign.setSoundGunpowderOverloading(new SoundHolder(cannonDesignConfig.getString("sounds.gunpowderOverloading","BLOCK_GRASS_HIT:1:1.5"))); - cannonDesign.setSoundCool(new SoundHolder(cannonDesignConfig.getString("sounds.cool","BLOCK_FIRE_EXTINGUISH:1:1"))); - cannonDesign.setSoundHot(new SoundHolder(cannonDesignConfig.getString("sounds.hot","BLOCK_FIRE_EXTINGUISH:1:1"))); - cannonDesign.setSoundRamrodCleaning(new SoundHolder(cannonDesignConfig.getString("sounds.ramrodCleaning","BLOCK_SNOW_HIT:0.5:0"))); - cannonDesign.setSoundRamrodCleaningDone(new SoundHolder(cannonDesignConfig.getString("sounds.ramrodCleaningDone","BLOCK_SNOW_HIT:0.5:1"))); - cannonDesign.setSoundRamrodPushing(new SoundHolder(cannonDesignConfig.getString("sounds.ramrodPushing","BLOCK_STONE_HIT:0.5:0"))); - cannonDesign.setSoundRamrodPushingDone(new SoundHolder(cannonDesignConfig.getString("sounds.ramrodPushingDone","BLOCK_ANVIL_LAND:0.5:0"))); - cannonDesign.setSoundThermometer(new SoundHolder(cannonDesignConfig.getString("sounds.thermometer","BLOCK_ANVIL_LAND:1:1"))); - cannonDesign.setSoundEnableAimingMode(new SoundHolder(cannonDesignConfig.getString("sounds.enableAimingMode","NONE:1:1"))); - cannonDesign.setSoundDisableAimingMode(new SoundHolder(cannonDesignConfig.getString("sounds.disableAimingMode","NONE:1:1"))); - cannonDesign.setSoundSelected(new SoundHolder(cannonDesignConfig.getString("sounds.selected","BLOCK_ANVIL_LAND:1:2"))); + cannonDesign.setSoundCreate(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.create","BLOCK_ANVIL_LAND:1:0.5"))); + cannonDesign.setSoundDestroy(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.destroy","ENTITY_ZOMBIE_ATTACK_IRON_DOOR:1:0.5"))); + cannonDesign.setSoundDismantle(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.dismantle", "BLOCK_ANVIL_USE:1:0.5"))); + cannonDesign.setSoundAdjust(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.adjust","ENTITY_IRON_GOLEM_STEP:1:0.5"))); + cannonDesign.setSoundIgnite(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.ignite","ENTITY_TNT_PRIMED:5:1"))); + cannonDesign.setSoundFiring(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.firing","ENTITY_GENERIC_EXPLODE:20:1.5"))); + cannonDesign.setSoundGunpowderLoading(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.gunpowderLoading","BLOCK_SAND_HIT:1:1.5"))); + cannonDesign.setSoundGunpowderOverloading(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.gunpowderOverloading","BLOCK_GRASS_HIT:1:1.5"))); + cannonDesign.setSoundCool(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.cool","BLOCK_FIRE_EXTINGUISH:1:1"))); + cannonDesign.setSoundHot(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.hot","BLOCK_FIRE_EXTINGUISH:1:1"))); + cannonDesign.setSoundRamrodCleaning(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.ramrodCleaning","BLOCK_SNOW_HIT:0.5:0"))); + cannonDesign.setSoundRamrodCleaningDone(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.ramrodCleaningDone","BLOCK_SNOW_HIT:0.5:1"))); + cannonDesign.setSoundRamrodPushing(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.ramrodPushing","BLOCK_STONE_HIT:0.5:0"))); + cannonDesign.setSoundRamrodPushingDone(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.ramrodPushingDone","BLOCK_ANVIL_LAND:0.5:0"))); + cannonDesign.setSoundThermometer(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.thermometer","BLOCK_ANVIL_LAND:1:1"))); + cannonDesign.setSoundEnableAimingMode(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.enableAimingMode","NONE:1:1"))); + cannonDesign.setSoundDisableAimingMode(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.disableAimingMode","NONE:1:1"))); + cannonDesign.setSoundSelected(new BukkitSoundHolder(cannonDesignConfig.getString("sounds.selected","BLOCK_ANVIL_LAND:1:2"))); // constructionBlocks cannonDesign.setSchematicBlockTypeIgnore(CannonsUtil.createBlockData(cannonDesignConfig.getString("constructionBlocks.ignore", "minecraft:sand"))); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/BukkitHook.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/BukkitHook.java index 9ab2616c..23fb67a3 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/BukkitHook.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/BukkitHook.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.hooks; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.Hook; +import at.pavlov.internal.hooks.Hook; abstract public class BukkitHook

implements Hook

{ diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/VaultHook.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/VaultHook.java index e155698a..b5729fc8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/VaultHook.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/VaultHook.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.hooks; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.Hook; +import at.pavlov.internal.hooks.Hook; import net.milkbowl.vault.economy.Economy; import org.bukkit.ChatColor; import org.bukkit.plugin.RegisteredServiceProvider; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/MovecraftHook.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/MovecraftHook.java index 3667bcc2..fd3e451f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/MovecraftHook.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/MovecraftHook.java @@ -5,7 +5,7 @@ import at.pavlov.cannons.hooks.movecraft.listener.CraftDetectListener; import at.pavlov.cannons.hooks.movecraft.listener.RotationListener; import at.pavlov.cannons.hooks.movecraft.listener.TranslationListener; -import at.pavlov.internal.Hook; +import at.pavlov.internal.hooks.Hook; import net.countercraft.movecraft.Movecraft; import org.bukkit.ChatColor; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraftcombat/MovecraftCombatHook.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraftcombat/MovecraftCombatHook.java index 7019053c..b60812c5 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraftcombat/MovecraftCombatHook.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraftcombat/MovecraftCombatHook.java @@ -2,7 +2,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.hooks.BukkitHook; -import at.pavlov.internal.Hook; +import at.pavlov.internal.hooks.Hook; import net.countercraft.movecraft.combat.MovecraftCombat; import org.bukkit.ChatColor; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/PlaceholderAPIHook.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/PlaceholderAPIHook.java index 1a831118..36f470f5 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/PlaceholderAPIHook.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/PlaceholderAPIHook.java @@ -2,7 +2,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.hooks.BukkitHook; -import at.pavlov.internal.Hook; +import at.pavlov.internal.hooks.Hook; import org.bukkit.Bukkit; import org.bukkit.ChatColor; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index 9c9f894e..f04afbcc 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -1,8 +1,8 @@ package at.pavlov.cannons.projectile; import at.pavlov.bukkit.builders.ParticleBuilder; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.ItemHolder; -import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.bukkit.utils.FileUtils; @@ -290,10 +290,10 @@ private Projectile loadYml(String ymlFile) projectile.setImpactMessage(projectileConfig.getBoolean("messages.hasImpactMessage", false)); //sounds - projectile.setSoundLoading(new SoundHolder(projectileConfig.getString("sounds.loading", "BLOCK_STONE_PLACE:5:0.5"))); - projectile.setSoundImpact(new SoundHolder(projectileConfig.getString("sounds.impact", "ENTITY_GENERIC_EXPLODE:10:0.5"))); - projectile.setSoundImpactProtected(new SoundHolder(projectileConfig.getString("sounds.impactProtected", "ENTITY_GENERIC_EXPLODE:10:0.5"))); - projectile.setSoundImpactWater(new SoundHolder(projectileConfig.getString("sounds.impactWater", "ENTITY_GENERIC_SPLASH:10:0.3"))); + projectile.setSoundLoading(new BukkitSoundHolder(projectileConfig.getString("sounds.loading", "BLOCK_STONE_PLACE:5:0.5"))); + projectile.setSoundImpact(new BukkitSoundHolder(projectileConfig.getString("sounds.impact", "ENTITY_GENERIC_EXPLODE:10:0.5"))); + projectile.setSoundImpactProtected(new BukkitSoundHolder(projectileConfig.getString("sounds.impactProtected", "ENTITY_GENERIC_EXPLODE:10:0.5"))); + projectile.setSoundImpactWater(new BukkitSoundHolder(projectileConfig.getString("sounds.impactWater", "ENTITY_GENERIC_SPLASH:10:0.3"))); //loadPermissions projectile.setPermissionLoad(projectileConfig.getStringList("loadPermission")); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index 3d8dd873..b682cc84 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.scheduler; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.ItemHolder; -import at.pavlov.bukkit.container.SoundHolder; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.cannons.Cannons; @@ -129,7 +129,7 @@ private void checkWaterImpact(FlyingProjectile cannonball, org.bukkit.entity.Pro * @param loc - location of the impact * @param liquid - material of the fake blocks */ - public void sendSplashToPlayers(Location loc, ItemHolder liquid, SoundHolder sound) + public void sendSplashToPlayers(Location loc, ItemHolder liquid, BukkitSoundHolder sound) { int maxDist = (int) plugin.getMyConfig().getImitatedBlockMaximumDistance(); int maxSoundDist = plugin.getMyConfig().getImitatedSoundMaximumDistance(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java index c54ba516..0e2322db 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.utils; -import at.pavlov.bukkit.container.SoundHolder; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.cannons.dao.AsyncTaskManager; import org.bukkit.Location; import org.bukkit.Sound; @@ -16,7 +16,7 @@ public class SoundUtils { * @param sound sound * @param maxDist maximum distance */ - public static void imitateSound(Location loc, SoundHolder sound, int maxDist, float maxVolume) { + public static void imitateSound(Location loc, BukkitSoundHolder sound, int maxDist, float maxVolume) { //https://forums.bukkit.org/threads/playsound-parameters-volume-and-pitch.151517/ World w = loc.getWorld(); //w.playSound(loc, sound.getSound(), maxVolume*16f, sound.getPitch()); @@ -83,7 +83,7 @@ public static void playErrorSound(final Location location) { * @param loc location of the sound * @param sound type of sound (sound, volume, pitch) */ - public static void playSound(Location loc, SoundHolder sound) { + public static void playSound(Location loc, BukkitSoundHolder sound) { if (!sound.isValid()) return; From 9303561a153ca619c296df70100a173504f6a16d Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 21:36:01 +0100 Subject: [PATCH 33/97] Remove unused + beautify --- .../pavlov/bukkit/container/ItemHolder.java | 278 ++++++++---------- 1 file changed, 120 insertions(+), 158 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java index c9e5e552..669d5658 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java @@ -3,107 +3,102 @@ import at.pavlov.internal.CannonLogger; import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.data.BlockData; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Scanner; import java.util.logging.Level; - //small class as at.pavlov.cannons.container for item id and data -public class ItemHolder -{ - private Material material; - private String displayName; - private List lore; - - public ItemHolder(ItemStack item) - { - if (item == null){ - material=Material.AIR; - displayName=""; +public class ItemHolder { + private Material material; + private String displayName; + private List lore; + + public ItemHolder(ItemStack item) { + if (item == null) { + material = Material.AIR; + displayName = ""; lore = new ArrayList(); return; } - material = item.getType(); + material = item.getType(); if (!item.hasItemMeta()) { return; } ItemMeta meta = item.getItemMeta(); - if (meta.hasDisplayName() && meta.getDisplayName()!=null) { - displayName = meta.getDisplayName(); - } else if (!meta.hasDisplayName()){ + if (meta.hasDisplayName() && meta.getDisplayName() != null) { + displayName = meta.getDisplayName(); + } else if (!meta.hasDisplayName()) { displayName = getFriendlyName(item, true); //Cannons.getPlugin().logDebug("display name: " + displayName); } else { - displayName = ""; - } + displayName = ""; + } - boolean loreExists = meta.hasLore() && meta.getLore() != null; + boolean loreExists = meta.hasLore() && meta.getLore() != null; lore = loreExists ? meta.getLore() : new ArrayList<>(); } - public ItemHolder(Material material) - { + public ItemHolder(Material material) { this(material, null, null); } - public ItemHolder(Material material, String description, List lore) - { + public ItemHolder(Material material, String description, List lore) { this.material = Objects.requireNonNullElse(material, Material.AIR); - Objects.requireNonNullElse(description, ""); + Objects.requireNonNullElse(description, ""); this.displayName = description == null ? "" : ChatColor.translateAlternateColorCodes('&', description); this.lore = Objects.requireNonNullElseGet(lore, ArrayList::new); - } + } - public ItemHolder(String str) - { + public ItemHolder(String str) { // data structure: // id;DESCRIPTION;LORE1;LORE2 // HOE;COOL Item;Looks so cool;Fancy try { - material = Material.AIR; - Scanner s = new Scanner(str).useDelimiter("\\s*;\\s*"); - - if (s.hasNext()) { - String next = s.next(); - if (next != null) - this.material = Material.matchMaterial(next); - if (this.material == null) { - this.material = Material.AIR; - } - } - - displayName = s.hasNext() ? ChatColor.translateAlternateColorCodes('&', s.next()) : ""; - lore = new ArrayList<>(); - - while (s.hasNext()) { - String nextStr = s.next(); - if (!nextStr.isEmpty()) - lore.add(nextStr); - } - - s.close(); - } catch(Exception e) { - CannonLogger.getLogger().log(Level.SEVERE,"[CANNONS] Error while converting " + str + ". Check formatting (minecraft:clock)"); + material = Material.AIR; + Scanner s = new Scanner(str).useDelimiter("\\s*;\\s*"); + + if (s.hasNext()) { + String next = s.next(); + if (next != null) + this.material = Material.matchMaterial(next); + if (this.material == null) { + this.material = Material.AIR; + } + } + + displayName = s.hasNext() ? ChatColor.translateAlternateColorCodes('&', s.next()) : ""; + lore = new ArrayList<>(); + + while (s.hasNext()) { + String nextStr = s.next(); + if (!nextStr.isEmpty()) + lore.add(nextStr); + } + + s.close(); + } catch (Exception e) { + CannonLogger.getLogger().log(Level.SEVERE, "[CANNONS] Error while converting " + str + ". Check formatting (minecraft:clock)"); } - } - - public SimpleBlock toSimpleBlock() - { - return new SimpleBlock(0, 0, 0, material); - } - - public ItemStack toItemStack(int amount) - { - material = material == null ? Material.AIR : material; - ItemStack item = new ItemStack(material, amount); + } + + public SimpleBlock toSimpleBlock() { + return new SimpleBlock(0, 0, 0, material); + } + + public ItemStack toItemStack(int amount) { + material = material == null ? Material.AIR : material; + ItemStack item = new ItemStack(material, amount); ItemMeta meta = item.getItemMeta(); if (this.hasDisplayName()) meta.setDisplayName(this.displayName); @@ -111,64 +106,47 @@ public ItemStack toItemStack(int amount) meta.setLore(this.lore); item.setItemMeta(meta); return item; - } - - /** - * Creates a new BlockData instance for this Material, with all properties initialized to unspecified defaults. - * @return BlockData instance - */ - public BlockData toBlockData() - { - return this.material.createBlockData(); - } - - /** - * Creates a new BlockData instance for this Material, with all properties initialized to unspecified defaults, except for those provided in data. - * @return BlockData instance - */ - public BlockData toBlockData(String string) - { - return this.material.createBlockData(string); - } + } /** * compares the id of two Materials + * * @param material material to compare * @return true if both material are equal */ - public boolean equals(Material material) - { + public boolean equals(Material material) { return material != null && material.equals(this.material); } - - /** - * compares id and data, but skips data comparison if one is -1 - * @param item item to compare - * @return true if both items are equal in data and id or only the id if one data = -1 - */ - public boolean equalsFuzzy(ItemStack item) - { - ItemHolder itemHolder = new ItemHolder(item); - return equalsFuzzy(itemHolder); - } - - - /** - * compares id and data, but skips data comparison if one is -1 - * @param item the item to compare - * @return true if both items are equal in data and id or only the id if one data = -1 - */ - public boolean equalsFuzzy(ItemHolder item) { + + /** + * compares id and data, but skips data comparison if one is -1 + * + * @param item item to compare + * @return true if both items are equal in data and id or only the id if one data = -1 + */ + public boolean equalsFuzzy(ItemStack item) { + ItemHolder itemHolder = new ItemHolder(item); + return equalsFuzzy(itemHolder); + } + + + /** + * compares id and data, but skips data comparison if one is -1 + * + * @param item the item to compare + * @return true if both items are equal in data and id or only the id if one data = -1 + */ + public boolean equalsFuzzy(ItemHolder item) { if (item == null) { return false; } - //System.out.println("item: " + item.getDisplayName() + " cannons " + this.getDisplayName()); + //System.out.println("item: " + item.getDisplayName() + " cannons " + this.getDisplayName()); //Item does not have the required display name if ((this.hasDisplayName() && !item.hasDisplayName()) || (!this.hasDisplayName() && item.hasDisplayName())) return false; - //Display name do not match + //Display name do not match if (item.hasDisplayName() && this.hasDisplayName() && !item.getDisplayName().equals(displayName)) return false; @@ -184,57 +162,41 @@ public boolean equalsFuzzy(ItemHolder item) { int size = similar.size(); similar.retainAll(item.getLore()); - if (similar.size() < size) + if (similar.size() < size) return false; return item.getType().equals(this.material); } - - /** - * compares id and data, but skips data comparison if one is -1 - * @param block item to compare - * @return true if both items are equal in data and id or only the id if one data = -1 - */ - public boolean equalsFuzzy(Block block) { - //System.out.println("id:" + item.getId() + "-" + id + " data:" + item.getData() + "-" + data); - if (block == null) { - return false; - } - return block.getType().equals(this.material); + public String toString() { + return this.material + ":" + this.displayName + ":" + String.join(":", this.lore); } - - public String toString() - { - return this.material + ":" + this.displayName + ":" + String.join(":", this.lore); - } - - public Material getType() - { - return this.material; - } - public void setType(Material material) - { - this.material = material; - } - - public String getDisplayName() { - return displayName; - } - - public boolean hasDisplayName(){ - return this.displayName!= null && !this.displayName.equals(""); + + public Material getType() { + return this.material; + } + + public void setType(Material material) { + this.material = material; } - public List getLore() { - return lore; - } + public String getDisplayName() { + return displayName; + } - public boolean hasLore(){ - return this.lore!=null && this.lore.size()>0; + public boolean hasDisplayName() { + return this.displayName != null && !this.displayName.equals(""); } - private static String capitalizeFully(String name) { + public List getLore() { + return lore; + } + + public boolean hasLore() { + return this.lore != null && this.lore.size() > 0; + } + + private static String capitalizeFully(String name) { if (name == null) { return ""; } @@ -251,20 +213,20 @@ private static String capitalizeFully(String name) { for (String subName : name.split("_")) sbName.append(subName.substring(0, 1).toUpperCase() + subName.substring(1).toLowerCase()).append(" "); - return sbName.toString().substring(0, sbName.length() - 1); + return sbName.toString().substring(0, sbName.length() - 1); } - private static String getFriendlyName(Material material) { - return material == null ? "Air" : getFriendlyName(new ItemStack(material), false); - } + private static String getFriendlyName(Material material) { + return material == null ? "Air" : getFriendlyName(new ItemStack(material), false); + } - private static String getFriendlyName(ItemStack itemStack, boolean checkDisplayName) { - if (itemStack == null || itemStack.getType() == Material.AIR) return "Air"; + private static String getFriendlyName(ItemStack itemStack, boolean checkDisplayName) { + if (itemStack == null || itemStack.getType() == Material.AIR) return "Air"; - if (checkDisplayName && itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName()) { - return itemStack.getItemMeta().getDisplayName(); - } + if (checkDisplayName && itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName()) { + return itemStack.getItemMeta().getDisplayName(); + } - return capitalizeFully(itemStack.getType().name().replace("_", " ").toLowerCase()); - } + return capitalizeFully(itemStack.getType().name().replace("_", " ").toLowerCase()); + } } \ No newline at end of file From 44ff794f46a9dc629b0821d981d0e21b6ddcf841 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 21:37:17 +0100 Subject: [PATCH 34/97] Remove unused method call --- .../src/main/java/at/pavlov/bukkit/container/ItemHolder.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java index 669d5658..6cda0343 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java @@ -54,8 +54,6 @@ public ItemHolder(Material material) { public ItemHolder(Material material, String description, List lore) { this.material = Objects.requireNonNullElse(material, Material.AIR); - - Objects.requireNonNullElse(description, ""); this.displayName = description == null ? "" : ChatColor.translateAlternateColorCodes('&', description); this.lore = Objects.requireNonNullElseGet(lore, ArrayList::new); } From ef5d3f35dd8ac77e6a374ae7b86170170b87a1e1 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 9 Dec 2024 22:12:00 +0100 Subject: [PATCH 35/97] ItemHolder abstracted --- .../pavlov/bukkit/cannons/CannonDesign.java | 10 +- ...{ItemHolder.java => BukkitItemHolder.java} | 85 +++++------- .../pavlov/bukkit/projectile/Projectile.java | 8 +- .../pavlov/internal/container/ItemHolder.java | 122 ++++++++++++++++++ .../java/at/pavlov/cannons/cannon/Cannon.java | 4 +- .../pavlov/cannons/cannon/CannonManager.java | 4 +- .../pavlov/cannons/cannon/DesignStorage.java | 4 +- .../java/at/pavlov/cannons/config/Config.java | 31 +++-- .../hooks/papi/CannonsPAPIExpansion.java | 4 +- .../cannons/projectile/ProjectileStorage.java | 10 +- .../cannons/scheduler/ProjectileObserver.java | 6 +- .../at/pavlov/cannons/utils/ParseUtils.java | 9 +- 12 files changed, 195 insertions(+), 102 deletions(-) rename api-bukkit/src/main/java/at/pavlov/bukkit/container/{ItemHolder.java => BukkitItemHolder.java} (73%) create mode 100644 api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index e821d820..9b048a43 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -1,7 +1,7 @@ package at.pavlov.bukkit.cannons; import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.SimpleBlock; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.internal.CannonLogger; @@ -31,7 +31,7 @@ //ammunition_consumption private String gunpowderName; - private ItemHolder gunpowderType; + private BukkitItemHolder gunpowderType; private boolean gunpowderNeeded; private boolean gunpowderConsumption; private boolean projectileConsumption; @@ -100,8 +100,8 @@ private double warningTemperature; private double criticalTemperature; private double maximumTemperature; - private List itemCooling = new ArrayList<>(); - private List itemCoolingUsed = new ArrayList<>(); + private List itemCooling = new ArrayList<>(); + private List itemCoolingUsed = new ArrayList<>(); //Overloading stuff private boolean overloadingEnabled; @@ -490,7 +490,7 @@ public String toString() public boolean isCoolingTool(ItemStack item) { //todo rework tool properties - for (ItemHolder mat : itemCooling) + for (BukkitItemHolder mat : itemCooling) { if (mat.equalsFuzzy(item)) return true; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitItemHolder.java similarity index 73% rename from api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitItemHolder.java index 6cda0343..0ed8f3cf 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/ItemHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitItemHolder.java @@ -1,6 +1,7 @@ package at.pavlov.bukkit.container; import at.pavlov.internal.CannonLogger; +import at.pavlov.internal.container.ItemHolder; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -10,28 +11,26 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; -import java.util.Objects; import java.util.Scanner; import java.util.logging.Level; //small class as at.pavlov.cannons.container for item id and data -public class ItemHolder { +public class BukkitItemHolder extends ItemHolder { private Material material; private String displayName; private List lore; - public ItemHolder(ItemStack item) { + public static BukkitItemHolder from(ItemStack item) { if (item == null) { - material = Material.AIR; - displayName = ""; - lore = new ArrayList(); - return; + return new BukkitItemHolder(Material.AIR); } - material = item.getType(); + Material material = item.getType(); + String displayName; + List lore; if (!item.hasItemMeta()) { - return; + return new BukkitItemHolder(Material.AIR); } ItemMeta meta = item.getItemMeta(); @@ -46,37 +45,41 @@ public ItemHolder(ItemStack item) { boolean loreExists = meta.hasLore() && meta.getLore() != null; lore = loreExists ? meta.getLore() : new ArrayList<>(); + return new BukkitItemHolder(material, displayName, lore); } - public ItemHolder(Material material) { + public BukkitItemHolder(Material material) { this(material, null, null); } - public ItemHolder(Material material, String description, List lore) { - this.material = Objects.requireNonNullElse(material, Material.AIR); - this.displayName = description == null ? "" : ChatColor.translateAlternateColorCodes('&', description); - this.lore = Objects.requireNonNullElseGet(lore, ArrayList::new); + public BukkitItemHolder(Material material, String description, List lore) { + super(material, description, lore); + } + + @Override + public Material defaultType() { + return Material.AIR; } - public ItemHolder(String str) { + public static BukkitItemHolder from(String str) { // data structure: // id;DESCRIPTION;LORE1;LORE2 // HOE;COOL Item;Looks so cool;Fancy try { - material = Material.AIR; + Material material = Material.AIR; Scanner s = new Scanner(str).useDelimiter("\\s*;\\s*"); if (s.hasNext()) { String next = s.next(); if (next != null) - this.material = Material.matchMaterial(next); - if (this.material == null) { - this.material = Material.AIR; + material = Material.matchMaterial(next); + if (material == null) { + material = Material.AIR; } } - displayName = s.hasNext() ? ChatColor.translateAlternateColorCodes('&', s.next()) : ""; - lore = new ArrayList<>(); + String displayName = s.hasNext() ? ChatColor.translateAlternateColorCodes('&', s.next()) : ""; + List lore = new ArrayList<>(); while (s.hasNext()) { String nextStr = s.next(); @@ -85,15 +88,13 @@ public ItemHolder(String str) { } s.close(); + return new BukkitItemHolder(material, displayName, lore); } catch (Exception e) { CannonLogger.getLogger().log(Level.SEVERE, "[CANNONS] Error while converting " + str + ". Check formatting (minecraft:clock)"); + return new BukkitItemHolder(Material.AIR); } } - public SimpleBlock toSimpleBlock() { - return new SimpleBlock(0, 0, 0, material); - } - public ItemStack toItemStack(int amount) { material = material == null ? Material.AIR : material; ItemStack item = new ItemStack(material, amount); @@ -112,7 +113,7 @@ public ItemStack toItemStack(int amount) { * @param material material to compare * @return true if both material are equal */ - public boolean equals(Material material) { + public boolean check(Material material) { return material != null && material.equals(this.material); } @@ -123,7 +124,7 @@ public boolean equals(Material material) { * @return true if both items are equal in data and id or only the id if one data = -1 */ public boolean equalsFuzzy(ItemStack item) { - ItemHolder itemHolder = new ItemHolder(item); + BukkitItemHolder itemHolder = BukkitItemHolder.from(item); return equalsFuzzy(itemHolder); } @@ -134,7 +135,7 @@ public boolean equalsFuzzy(ItemStack item) { * @param item the item to compare * @return true if both items are equal in data and id or only the id if one data = -1 */ - public boolean equalsFuzzy(ItemHolder item) { + public boolean equalsFuzzy(BukkitItemHolder item) { if (item == null) { return false; } @@ -166,34 +167,6 @@ public boolean equalsFuzzy(ItemHolder item) { return item.getType().equals(this.material); } - public String toString() { - return this.material + ":" + this.displayName + ":" + String.join(":", this.lore); - } - - public Material getType() { - return this.material; - } - - public void setType(Material material) { - this.material = material; - } - - public String getDisplayName() { - return displayName; - } - - public boolean hasDisplayName() { - return this.displayName != null && !this.displayName.equals(""); - } - - public List getLore() { - return lore; - } - - public boolean hasLore() { - return this.lore != null && this.lore.size() > 0; - } - private static String capitalizeFully(String name) { if (name == null) { return ""; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index 4effba1b..023c2f49 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -2,7 +2,7 @@ import at.pavlov.bukkit.builders.ParticleBuilder; import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.SpawnEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; import at.pavlov.internal.CannonLogger; @@ -24,9 +24,9 @@ public class Projectile implements Cloneable { private String projectileName; private String description; private String itemName; - private ItemHolder loadingItem; + private BukkitItemHolder loadingItem; //list of items or blocks that can represent this this (e.g. redstone dust may for wire when you click a block) - private List alternativeItemList = new ArrayList<>(); + private List alternativeItemList = new ArrayList<>(); //properties of the cannonball private EntityType projectileEntity; @@ -119,7 +119,7 @@ public Projectile clone() { * @param materialHolder the material of the loaded item * @return true if the materials match */ - public boolean check(ItemHolder materialHolder) { + public boolean check(BukkitItemHolder materialHolder) { return loadingItem.equalsFuzzy(materialHolder); } diff --git a/api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java new file mode 100644 index 00000000..210ababb --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java @@ -0,0 +1,122 @@ +package at.pavlov.internal.container; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; + +//small class as at.pavlov.cannons.container for item id and data +@Getter +abstract public class ItemHolder { + protected Type type; + protected String displayName; + protected List lore; + + public ItemHolder(Type material) { + this(material, null, null); + } + + public ItemHolder(Type material, String description, List lore) { + this.type = Objects.requireNonNullElseGet(material, this::defaultType); + this.displayName = Objects.requireNonNullElse(description, ""); + this.lore = Objects.requireNonNullElseGet(lore, ArrayList::new); + } + + abstract public Type defaultType(); + + /** + * compares the id of two Materials + * + * @param material material to compare + * @return true if both material are equal + */ + public boolean check(Type material) { + return material != null && material.equals(this.type); + } + + + /** + * compares id and data, but skips data comparison if one is -1 + * + * @param item the item to compare + * @return true if both items are equal in data and id or only the id if one data = -1 + */ + public boolean equalsFuzzy(ItemHolder item) { + if (item == null) { + return false; + } + + //System.out.println("item: " + item.getDisplayName() + " cannons " + this.getDisplayName()); + //Item does not have the required display name + if (!this.hasDisplayName() && item.hasDisplayName()) { + return false; + } + + if (this.hasDisplayName() && !item.hasDisplayName()) { + return false; + } + + //Display name do not match + if (item.hasDisplayName() && this.hasDisplayName() && !item.getDisplayName().equals(displayName)) + return false; + + if (!this.hasLore()) { + return item.getType().equals(this.type); + } + //does Item have a Lore + if (!item.hasLore()) { + return false; + } + + Collection similar = new HashSet<>(this.lore); + + int size = similar.size(); + similar.retainAll(item.getLore()); + + if (similar.size() < size) + return false; + + return item.getType().equals(this.type); + } + + public String toString() { + return this.type + ":" + this.displayName + ":" + String.join(":", this.lore); + } + + public void setType(Type material) { + this.type = material; + } + + public boolean hasDisplayName() { + return this.displayName != null && !this.displayName.isEmpty(); + } + + public boolean hasLore() { + return this.lore != null && !this.lore.isEmpty(); + } + + private static String capitalizeFully(String name) { + if (name == null) { + return ""; + } + + if (name.length() <= 1) { + return name.toUpperCase(); + } + + if (!name.contains("_")) { + return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); + } + + StringBuilder sbName = new StringBuilder(); + for (String subName : name.split("_")) + sbName.append(subName.substring(0, 1).toUpperCase()) + .append(subName.substring(1).toLowerCase()) + .append(" "); + + return sbName.substring(0, sbName.length() - 1); + } +} \ No newline at end of file diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index e2895f21..c6388ce9 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -4,7 +4,7 @@ import at.pavlov.bukkit.cannons.CannonBukkit; import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.cannons.CannonDesignHolder; -import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.SimpleBlock; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.Cannons; @@ -266,7 +266,7 @@ public boolean automaticCooling() { return true; //do this for every cooling item - for (ItemHolder mat : design.getItemCooling()) { + for (BukkitItemHolder mat : design.getItemCooling()) { if (mat == null) continue; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index ef1b409c..4ce504cd 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.cannon; import at.pavlov.bukkit.cannons.CannonDesign; -import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.SimpleBlock; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; @@ -874,7 +874,7 @@ public void updateCannons() { for (Cannon cannon : cannonList.values()) { cannon.setCannonDesign(DesignStorage.getInstance().getDesign(cannon)); if (cannon.getLoadedProjectile() != null) { - ItemHolder item = cannon.getLoadedProjectile().getLoadingItem(); + BukkitItemHolder item = cannon.getLoadedProjectile().getLoadingItem(); cannon.setLoadedProjectile(ProjectileStorage.getProjectile(cannon, item)); } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index 263e78de..fe1bf61e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -3,7 +3,7 @@ import at.pavlov.bukkit.cannons.CannonBlocks; import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.SimpleBlock; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.container.DesignFileName; @@ -202,7 +202,7 @@ private void loadDesignYml(CannonDesign cannonDesign, String ymlFile) // ammunition cannonDesign.setGunpowderName(cannonDesignConfig.getString("ammunition.gunpowderName", "gunpowder")); - cannonDesign.setGunpowderType(new ItemHolder(cannonDesignConfig.getString("ammunition.gunpowderType", "SULPHUR:0"))); + cannonDesign.setGunpowderType(BukkitItemHolder.from(cannonDesignConfig.getString("ammunition.gunpowderType", "SULPHUR:0"))); cannonDesign.setGunpowderNeeded(cannonDesignConfig.getBoolean("ammunition.needsGunpowder", true)); cannonDesign.setGunpowderConsumption(cannonDesignConfig.getBoolean("ammunition.gunpowderConsumption", true)); cannonDesign.setProjectileConsumption(cannonDesignConfig.getBoolean("ammunition.projectileConsumption", true)); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java index 4105df84..8db30352 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java @@ -2,10 +2,9 @@ import at.pavlov.bukkit.builders.ParticleBuilder; -import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.utils.FileUtils; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.multiversion.ParticleResolver; import at.pavlov.cannons.utils.ArmorCalculationUtil; import at.pavlov.cannons.utils.CannonsUtil; @@ -49,13 +48,13 @@ private boolean keepAliveEnabled; private double keepAliveTeleportDistance; //tools - private ItemHolder toolAdjust = new ItemHolder("minecraft:air"); - private ItemHolder toolAutoaim = new ItemHolder("minecraft:clock"); + private BukkitItemHolder toolAdjust = BukkitItemHolder.from("minecraft:air"); + private BukkitItemHolder toolAutoaim = BukkitItemHolder.from("minecraft:clock"); private double toolAutoaimRange; - private ItemHolder toolFiring = new ItemHolder("minecraft:flint_and_steel"); - private ItemHolder toolRamrod = new ItemHolder("minecraft:stick"); - private ItemHolder toolRotating = new ItemHolder("minecraft:rail"); - private ItemHolder toolThermometer = new ItemHolder("minecraft:gold_nugget"); + private BukkitItemHolder toolFiring = BukkitItemHolder.from("minecraft:flint_and_steel"); + private BukkitItemHolder toolRamrod = BukkitItemHolder.from("minecraft:stick"); + private BukkitItemHolder toolRotating = BukkitItemHolder.from("minecraft:rail"); + private BukkitItemHolder toolThermometer = BukkitItemHolder.from("minecraft:gold_nugget"); private int imitatedBlockMinimumDistance; private int imitatedBlockMaximumDistance; @@ -99,7 +98,7 @@ private List unbreakableBlocks = new ArrayList<>(); //cancelEventForLoadingItem - private List cancelItems = new ArrayList<>(); + private List cancelItems = new ArrayList<>(); private final Cannons plugin; @Getter @@ -147,13 +146,13 @@ public void loadConfig() { setKeepAliveTeleportDistance(config.getDouble("keepProjectileAlive.teleportProjectile", 5.0)); //tools - setToolAdjust(new ItemHolder(config.getString("tools.adjust", "minecraft:air"))); - setToolAutoaim(new ItemHolder(config.getString("tools.autoaim", "minecraft:clock"))); + setToolAdjust(BukkitItemHolder.from(config.getString("tools.adjust", "minecraft:air"))); + setToolAutoaim(BukkitItemHolder.from(config.getString("tools.autoaim", "minecraft:clock"))); setToolAutoaimRange(config.getDouble("tools.autoaimRange", 4.0)); - setToolFiring(new ItemHolder(config.getString("tools.firing", "minecraft:flint_and_steel"))); - setToolRamrod(new ItemHolder(config.getString("tools.ramrod", "minecraft:stick"))); - setToolRotating(new ItemHolder(config.getString("tools.adjust", "minecraft:rail"))); - setToolThermometer(new ItemHolder(config.getString("tools.thermometer", "minecraft:gold_nugget"))); + setToolFiring(BukkitItemHolder.from(config.getString("tools.firing", "minecraft:flint_and_steel"))); + setToolRamrod(BukkitItemHolder.from(config.getString("tools.ramrod", "minecraft:stick"))); + setToolRotating(BukkitItemHolder.from(config.getString("tools.adjust", "minecraft:rail"))); + setToolThermometer(BukkitItemHolder.from(config.getString("tools.thermometer", "minecraft:gold_nugget"))); //imitated effects setImitatedBlockMinimumDistance(config.getInt("imitatedEffects.minimumBlockDistance", 40)); @@ -223,7 +222,7 @@ public void loadConfig() { } public boolean isCancelItem(ItemStack item) { - for (ItemHolder item2 : getCancelItems()) { + for (BukkitItemHolder item2 : getCancelItems()) { if (item2.equalsFuzzy(item)) return true; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java index 2b6a6425..868b5f2a 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.hooks.papi; -import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; @@ -52,7 +52,7 @@ public String onRequest(OfflinePlayer player, @NotNull String params) { case "temperature" -> "" + operated.getAmbientTemperature(); case "loaded_gunpowder" -> "" + operated.getLoadedGunpowder(); case "loaded_projectile" -> { - ItemHolder stack; + BukkitItemHolder stack; try { stack = operated.getLoadedProjectile().getLoadingItem(); } catch (Exception e) { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index f04afbcc..8169283a 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -2,7 +2,7 @@ import at.pavlov.bukkit.builders.ParticleBuilder; import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.bukkit.utils.FileUtils; @@ -63,7 +63,7 @@ public static ArrayList getProjectileIds(){ */ public static Projectile getProjectile(Cannon cannon, ItemStack item) { - ItemHolder materialHolder = new ItemHolder(item); + BukkitItemHolder materialHolder = BukkitItemHolder.from(item); return getProjectile(cannon, materialHolder); } @@ -72,11 +72,11 @@ public static Projectile getProjectile(Cannon cannon, ItemStack item) * @param materialHolder material of the projectile * @return true if there is a projectile with this material */ - public static Projectile getProjectile(Cannon cannon, ItemHolder materialHolder) + public static Projectile getProjectile(Cannon cannon, BukkitItemHolder materialHolder) { for (Projectile projectile : projectileList) { - if (cannon.getCannonDesign().canLoad(projectile) && !projectile.getLoadingItem().equals(Material.AIR) && projectile.check(materialHolder)) + if (cannon.getCannonDesign().canLoad(projectile) && !projectile.getLoadingItem().check(Material.AIR) && projectile.check(materialHolder)) return projectile; } return null; @@ -209,7 +209,7 @@ private Projectile loadYml(String ymlFile) projectile.setProjectileName(projectileConfig.getString("general.projectileName", "noProjectileName")); projectile.setDescription(projectileConfig.getString("general.description", "no description for this projectile")); projectile.setItemName(projectileConfig.getString("general.itemName", "noItemName")); - projectile.setLoadingItem(new ItemHolder(projectileConfig.getString("general.loadingItem", "minecraft:cobblestone"))); + projectile.setLoadingItem(BukkitItemHolder.from(projectileConfig.getString("general.loadingItem", "minecraft:cobblestone"))); projectile.setAlternativeItemList(ParseUtils.toItemHolderList(projectileConfig.getStringList("general.alternativeId"))); //cannonball diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index b682cc84..b3bde5f4 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.scheduler; import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.cannons.Cannons; @@ -111,7 +111,7 @@ private void checkWaterImpact(FlyingProjectile cannonball, org.bukkit.entity.Pro //go up until there is air and place the same liquid Location startLoc = projectile_entity.getLocation().clone(); Vector vel = projectile_entity.getVelocity().clone(); - ItemHolder liquid = new ItemHolder(startLoc.getBlock().getType()); + BukkitItemHolder liquid = new BukkitItemHolder(startLoc.getBlock().getType()); for (int i = 0; i<5; i++) { Block block = startLoc.subtract(vel.clone().multiply(i)).getBlock(); @@ -129,7 +129,7 @@ private void checkWaterImpact(FlyingProjectile cannonball, org.bukkit.entity.Pro * @param loc - location of the impact * @param liquid - material of the fake blocks */ - public void sendSplashToPlayers(Location loc, ItemHolder liquid, BukkitSoundHolder sound) + public void sendSplashToPlayers(Location loc, BukkitItemHolder liquid, BukkitSoundHolder sound) { int maxDist = (int) plugin.getMyConfig().getImitatedBlockMaximumDistance(); int maxSoundDist = plugin.getMyConfig().getImitatedSoundMaximumDistance(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java index b883093f..01a68a39 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.utils; -import at.pavlov.bukkit.container.ItemHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.SpawnEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; import at.pavlov.cannons.Cannons; @@ -15,7 +15,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Locale; public class ParseUtils { /** @@ -146,11 +145,11 @@ public static List toBlockDataList(List stringList) { * @param stringList list of Materials as strings * @return list of ItemHolders */ - public static List toItemHolderList(List stringList) { - List materialList = new ArrayList<>(); + public static List toItemHolderList(List stringList) { + List materialList = new ArrayList<>(); for (String str : stringList) { - ItemHolder material = new ItemHolder(str); + BukkitItemHolder material = BukkitItemHolder.from(str); //if id == -1 the str was invalid materialList.add(material); } From 0941bd5d4c7f646b4cd00d6d30275f7fea862fc4 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 10 Dec 2024 22:16:34 +0100 Subject: [PATCH 36/97] Abstract SimpleBlock and make BukkitBlock --- .../pavlov/bukkit/cannons/CannonBlocks.java | 14 +- .../pavlov/bukkit/cannons/CannonDesign.java | 10 +- .../pavlov/bukkit/container/BukkitBlock.java | 214 ++++++++++++++ .../pavlov/bukkit/container/SimpleBlock.java | 267 ------------------ .../internal/container/SimpleBlock.java | 44 +++ .../java/at/pavlov/cannons/cannon/Cannon.java | 14 +- .../pavlov/cannons/cannon/CannonManager.java | 8 +- .../pavlov/cannons/cannon/DesignStorage.java | 36 +-- 8 files changed, 299 insertions(+), 308 deletions(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java delete mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java create mode 100644 api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java index 1d2e5719..581f6281 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java @@ -1,6 +1,6 @@ package at.pavlov.bukkit.cannons; -import at.pavlov.bukkit.container.SimpleBlock; +import at.pavlov.bukkit.container.BukkitBlock; import lombok.Data; import org.bukkit.util.Vector; @@ -15,11 +15,11 @@ private Vector rotationCenter; //center off all rotation blocks private Vector muzzle; //center off all muzzle blocks - spawing Vector for snowball - private ArrayList allCannonBlocks = new ArrayList<>(); + private ArrayList allCannonBlocks = new ArrayList<>(); private ArrayList barrelBlocks = new ArrayList<>(); - private ArrayList chestsAndSigns = new ArrayList<>(); + private ArrayList chestsAndSigns = new ArrayList<>(); private ArrayList redstoneTorches = new ArrayList<>(); - private ArrayList redstoneWiresAndRepeater = new ArrayList<>(); + private ArrayList redstoneWiresAndRepeater = new ArrayList<>(); private ArrayList redstoneTrigger = new ArrayList<>(); private ArrayList rightClickTrigger = new ArrayList<>(); private ArrayList firingIndicator = new ArrayList<>(); @@ -52,7 +52,7 @@ public Vector getFiringTrigger() { return null; } - public void addAllCannonBlocks(SimpleBlock add) { + public void addAllCannonBlocks(BukkitBlock add) { this.allCannonBlocks.add(add); } @@ -72,11 +72,11 @@ public void addRightClickTrigger(Vector add) { this.rightClickTrigger.add(add); } - public void addChestsAndSigns(SimpleBlock add) { + public void addChestsAndSigns(BukkitBlock add) { this.chestsAndSigns.add(add); } - public void addRedstoneWiresAndRepeater(SimpleBlock add) { + public void addRedstoneWiresAndRepeater(BukkitBlock add) { this.redstoneWiresAndRepeater.add(add); } diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index 9b048a43..f98a8107 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -2,7 +2,7 @@ import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.SimpleBlock; +import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.internal.CannonLogger; import lombok.Data; @@ -243,7 +243,7 @@ public Location getFiringTrigger(CannonBukkit cannon) * @param cannonDirection - the direction the cannon is facing * @return List of cannon blocks */ - public List getAllCannonBlocks(BlockFace cannonDirection) + public List getAllCannonBlocks(BlockFace cannonDirection) { CannonBlocks cannonBlocks = cannonBlockMap.get(cannonDirection); if (cannonBlocks != null) @@ -264,7 +264,7 @@ public List getAllCannonBlocks(CannonBukkit cannon) List locList = new ArrayList<>(); if (cannonBlocks != null) { - for (SimpleBlock block : cannonBlocks.getAllCannonBlocks()) + for (BukkitBlock block : cannonBlocks.getAllCannonBlocks()) { Vector vect = block.toVector(); locList.add(vect.clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit())); @@ -386,7 +386,7 @@ public List getChestsAndSigns(CannonBukkit cannon) List locList = new ArrayList<>(); if (cannonBlocks != null) { - for (SimpleBlock block : cannonBlocks.getChestsAndSigns()) + for (BukkitBlock block : cannonBlocks.getChestsAndSigns()) { locList.add(block.toLocation(cannon.getWorldBukkit(), cannon.getOffset())); } @@ -420,7 +420,7 @@ public List getRedstoneWireAndRepeater(CannonBukkit cannon) List locList = new ArrayList<>(); if (cannonBlocks != null) { - for (SimpleBlock block : cannonBlocks.getRedstoneWiresAndRepeater()) + for (BukkitBlock block : cannonBlocks.getRedstoneWiresAndRepeater()) { locList.add(block.toLocation(cannon.getWorldBukkit(),cannon.getOffset())); } diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java new file mode 100644 index 00000000..f6e8ca39 --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java @@ -0,0 +1,214 @@ +package at.pavlov.bukkit.container; + + +import at.pavlov.internal.container.SimpleBlock; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.data.BlockData; +import org.bukkit.material.Directional; +import org.bukkit.util.Vector; + +import java.util.function.Function; + +public class BukkitBlock extends SimpleBlock { + + public BukkitBlock(int x, int y, int z, BlockData blockData) { + super(x, y, z, blockData); + } + + @Override + public Function directionalCheck() { + return Directional.class::isInstance; + } + + public BukkitBlock(Vector vect, BlockData blockData) { + this(vect.getBlockX(), vect.getBlockY(), vect.getBlockZ(), blockData); + } + + public BukkitBlock(int x, int y, int z, Material material) { + this(x, y, z, material.createBlockData()); + } + + private BukkitBlock(Vector vect, Material material) { + this(vect, material.createBlockData()); + } + + public BukkitBlock(Location loc, Material material) { + this(loc.toVector(), material.createBlockData()); + } + + + /** + * to location with offset + * + * @param world bukkit world + * @return location of the block + */ + public Location toLocation(World world, Vector offset) { + return new Location(world, locX + offset.getBlockX(), locY + offset.getBlockY(), locZ + offset.getBlockZ()); + } + + + /** + * compare the location of the block and the id and data or data = -1 + * + * @param block block to compare to + * @param offset the offset of the cannon + * @return true if both block match + */ + public boolean compareMaterialAndLoc(Block block, Vector offset) { + if (!toVector().add(offset).equals(block.getLocation().toVector())) { + return false; + } + + return compareMaterial(block.getBlockData()); + } + + /** + * return true if Materials match + * + * @param block block to compare to + * @return true if both block match + */ + public boolean compareMaterial(BlockData block) { + return block.getMaterial().equals(this.blockData.getMaterial()); + } + + /** + * compares material and facing + * + * @param blockData block to compare to + * @return true if both block match + */ + public boolean compareMaterialAndFacing(BlockData blockData) { + // different materials + if (!compareMaterial(blockData)) { + return false; + } + // compare facing and face + if (directional && blockData instanceof Directional) { + return ((Directional) this).getFacing().equals(((Directional) blockData).getFacing()); + } + return true; + } + + /** + * compares the real world block by material and facing + * + * @param world the world of the block + * @param offset the locations in x,y,z + * @return true if both block are equal in data and facing + */ + public boolean compareMaterialAndFacing(World world, Vector offset) { + Block block = toLocation(world, offset).getBlock(); + return compareMaterialAndFacing(block.getBlockData()); + } + + /** + * matches all entries in this SimpleBlock to the given block + * + * @param blockData block to compare to + * @return true if both block match + */ + public boolean compareBlockData(BlockData blockData) { + return this.blockData.matches(blockData); + } + + /** + * shifts the location of the block without comparing the id + * + * @param loc location to add + * @return new Simpleblock + */ + public BukkitBlock add(Location loc) { + return new BukkitBlock(locX + loc.getBlockX(), locY + loc.getBlockY(), locZ + loc.getBlockZ(), this.blockData); + } + + /** + * shifts the location of the block without comparing the id + * + * @param vect offset vector + * @return a new block with a shifted location + */ + public BukkitBlock add(Vector vect) { + return new BukkitBlock(toVector().add(vect), this.blockData); + } + + /** + * shifts the location of the block without comparing the id + * + * @param vect vector to subtract + * @return new block with new subtracted location + */ + public BukkitBlock subtract(Vector vect) { + return new BukkitBlock(vect.getBlockX() - locX, vect.getBlockY() - locY, vect.getBlockZ() - locZ, this.blockData); + } + + /** + * shifts the location of the block without comparing the id + * + * @param vect vector to subtract + */ + public void subtract_noCopy(Vector vect) { + locX -= vect.getBlockX(); + locY -= vect.getBlockY(); + locZ -= vect.getBlockZ(); + } + + /** + * shifts the location of the block without comparing the id + * + * @param loc + */ + public BukkitBlock subtractInverted(Location loc) { + return new BukkitBlock(loc.getBlockX() - locX, loc.getBlockY() - locY, loc.getBlockZ() - locZ, this.blockData); + } + + + /** + * shifts the location of the block without comparing the id + * + * @param loc + */ + public BukkitBlock subtract(Location loc) { + return new BukkitBlock(locX - loc.getBlockX(), locY - loc.getBlockY(), locZ - loc.getBlockZ(), this.blockData); + } + + /** + * rotate the block 90° degree clockwise) + * + * @return + */ + public void rotate90() { + this.blockData = rotateBlockFacingClockwise(this.blockData); + int newx = -this.locZ; + this.locZ = this.locX; + this.locX = newx; + } + + /** + * SimpleBlock to Vector + */ + public Vector toVector() { + return new Vector(locX, locY, locZ); + } + + public static BlockData rotateBlockFacingClockwise(BlockData blockData) { + if (blockData instanceof org.bukkit.block.data.Directional directional) { + directional.setFacing(rotateFace(directional.getFacing())); + } + return blockData; + } + + public static BlockFace rotateFace(BlockFace face) { + if (face.equals(BlockFace.NORTH)) return BlockFace.EAST; + if (face.equals(BlockFace.EAST)) return BlockFace.SOUTH; + if (face.equals(BlockFace.SOUTH)) return BlockFace.WEST; + if (face.equals(BlockFace.WEST)) return BlockFace.NORTH; + return BlockFace.UP; + } + +} diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java deleted file mode 100644 index 85ea4bce..00000000 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SimpleBlock.java +++ /dev/null @@ -1,267 +0,0 @@ -package at.pavlov.bukkit.container; - - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.BlockData; -import org.bukkit.material.Directional; -import org.bukkit.util.Vector; - -public class SimpleBlock { - private int locX; - private int locY; - private int locZ; - private final boolean directional; - - private BlockData blockData; - - public SimpleBlock(int x, int y, int z, BlockData blockData) { - locX = x; - locY = y; - locZ = z; - - this.blockData = blockData; - this.directional = blockData instanceof Directional; - } - - public SimpleBlock(Vector vect, BlockData blockData) { - this(vect.getBlockX(), vect.getBlockY(), vect.getBlockZ(), blockData); - } - - public SimpleBlock(int x, int y, int z, Material material) - { - this(x, y, z, material.createBlockData()); - } - - private SimpleBlock(Vector vect, Material material) - { - this(vect, material.createBlockData()); - } - - public SimpleBlock(Location loc, Material material) { - locX = loc.getBlockX(); - locY = loc.getBlockY(); - locZ = loc.getBlockZ(); - - this.blockData = material.createBlockData(); - this.directional = blockData instanceof Directional; - } - - - /** - * to location with offset - * @param world bukkit world - * @return location of the block - */ - public Location toLocation(World world, Vector offset) { - return new Location(world, locX + offset.getBlockX(), locY + offset.getBlockY(), locZ + offset.getBlockZ()); - } - - - /** - * compare the location of the block and the id and data or data = -1 - * @param block block to compare to - * @param offset the offset of the cannon - * @return true if both block match - */ - public boolean compareMaterialAndLoc(Block block, Vector offset) - { - if (!toVector().add(offset).equals(block.getLocation().toVector())) { - return false; - } - - return compareMaterial(block.getBlockData()); - } - - /** - * return true if Materials match - * @param block block to compare to - * @return true if both block match - */ - public boolean compareMaterial(BlockData block) { - return block.getMaterial().equals(this.blockData.getMaterial()); - } - - /** - * compares material and facing - * @param blockData block to compare to - * @return true if both block match - */ - public boolean compareMaterialAndFacing(BlockData blockData) { - // different materials - if (!compareMaterial(blockData)) { - return false; - } - // compare facing and face - if (directional && blockData instanceof Directional){ - return ((Directional) this).getFacing().equals(((Directional) blockData).getFacing()); - } - return true; - } - - /** - * compares the real world block by material and facing - * @param world the world of the block - * @param offset the locations in x,y,z - * @return true if both block are equal in data and facing - */ - public boolean compareMaterialAndFacing(World world, Vector offset) - { - Block block = toLocation(world, offset).getBlock(); - return compareMaterialAndFacing(block.getBlockData()); - } - - /** - * matches all entries in this SimpleBlock to the given block - * @param blockData block to compare to - * @return true if both block match - */ - public boolean compareBlockData(BlockData blockData) - { - return this.blockData.matches(blockData); - } - - /** - * shifts the location of the block without comparing the id - * @param loc location to add - * @return new Simpleblock - */ - public SimpleBlock add(Location loc) - { - return new SimpleBlock(locX + loc.getBlockX(), locY + loc.getBlockY(), locZ + loc.getBlockZ(), this.blockData); - } - - /** - * shifts the location of the block without comparing the id - * @param vect offset vector - * @return a new block with a shifted location - */ - public SimpleBlock add(Vector vect) - { - return new SimpleBlock(toVector().add(vect), this.blockData); - } - - /** - * shifts the location of the block without comparing the id - * @param vect vector to subtract - * @return new block with new subtracted location - */ - public SimpleBlock subtract(Vector vect) - { - return new SimpleBlock(vect.getBlockX() - locX, vect.getBlockY() - locY, vect.getBlockZ() - locZ, this.blockData); - } - - /** - * shifts the location of the block without comparing the id - * @param vect vector to subtract - */ - public void subtract_noCopy(Vector vect) - { - locX -= vect.getBlockX(); - locY -= vect.getBlockY(); - locZ -= vect.getBlockZ(); - } - - /** - * shifts the location of the block without comparing the id - * @param loc - */ - public SimpleBlock subtractInverted(Location loc) - { - return new SimpleBlock(loc.getBlockX() - locX, loc.getBlockY() - locY, loc.getBlockZ() - locZ, this.blockData); - } - - - - /** - * shifts the location of the block without comparing the id - * @param loc - */ - public SimpleBlock subtract(Location loc) - { - return new SimpleBlock(locX - loc.getBlockX() , locY - loc.getBlockY(), locZ - loc.getBlockZ(), this.blockData); - } - - /** - * rotate the block 90° degree clockwise) - * @return - */ - public void rotate90(){ - this.blockData = rotateBlockFacingClockwise(this.blockData); - int newx = -this.locZ; - this.locZ = this.locX; - this.locX = newx; - } - - /** - * SimpleBlock to Vector - */ - public Vector toVector() - { - return new Vector(locX, locY, locZ); - } - - public int getLocX() - { - return locX; - } - - public void setLocX(int locX) - { - this.locX = locX; - } - - public int getLocY() - { - return locY; - } - - public void setLocY(int locY) - { - this.locY = locY; - } - - public int getLocZ() - { - return locZ; - } - - public void setLocZ(int locZ) - { - this.locZ = locZ; - } - - public void setBlockData(BlockData blockData) - { - this.blockData = blockData; - } - - public BlockData getBlockData() - { - return this.blockData; - } - - public String toString() - { - return "x:" + locX + " y:" + locY + " z:" + locZ +" blockdata:" + this.getBlockData().toString(); - } - - public static BlockData rotateBlockFacingClockwise(BlockData blockData){ - if (blockData instanceof org.bukkit.block.data.Directional directional){ - directional.setFacing(rotateFace(directional.getFacing())); - } - return blockData; - } - - public static BlockFace rotateFace(BlockFace face) { - if (face.equals(BlockFace.NORTH)) return BlockFace.EAST; - if (face.equals(BlockFace.EAST)) return BlockFace.SOUTH; - if (face.equals(BlockFace.SOUTH)) return BlockFace.WEST; - if (face.equals(BlockFace.WEST)) return BlockFace.NORTH; - return BlockFace.UP; - } - -} diff --git a/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java b/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java new file mode 100644 index 00000000..772fb95d --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java @@ -0,0 +1,44 @@ +package at.pavlov.internal.container; + + +import lombok.Data; +import java.util.function.Function; + +@Data abstract public class SimpleBlock { + protected int locX; + protected int locY; + protected int locZ; + protected boolean directional; + + protected Block blockData; + + public SimpleBlock(int x, int y, int z, Block blockData) { + locX = x; + locY = y; + locZ = z; + + this.blockData = blockData; + this.directional = directionalCheck().apply(blockData); + } + + public abstract Function directionalCheck(); + + /** + * return true if Materials match + * @param block block to compare to + * @return true if both block match + */ + public abstract boolean compareMaterial(Block block); + + + /** + * compares material and facing + * @param blockData block to compare to + * @return true if both block match + */ + public abstract boolean compareMaterialAndFacing(Block blockData); + + public String toString() { + return "x:" + locX + " y:" + locY + " z:" + locZ +" blockdata:" + this.getBlockData().toString(); + } +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index c6388ce9..bf9ebdfd 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -5,7 +5,7 @@ import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.cannons.CannonDesignHolder; import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.SimpleBlock; +import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.Cannons; import at.pavlov.internal.enums.BreakCause; @@ -716,7 +716,7 @@ public MessageEnum destroyCannon(boolean breakBlocks, boolean canExplode, BreakC * this will force the cannon to show up at this location - all blocks will be overwritten */ public void show() { - for (SimpleBlock cBlock : design.getAllCannonBlocks(this.getCannonDirection())) { + for (BukkitBlock cBlock : design.getAllCannonBlocks(this.getCannonDirection())) { Block wBlock = cBlock.toLocation(getWorldBukkit(), getOffset()).getBlock(); //todo check show wBlock.setBlockData(cBlock.getBlockData()); @@ -729,7 +729,7 @@ public void show() { */ public void hide() { //remove only attachable block - for (SimpleBlock cBlock : design.getAllCannonBlocks(this.getCannonDirection())) { + for (BukkitBlock cBlock : design.getAllCannonBlocks(this.getCannonDirection())) { Block wBlock = cBlock.toLocation(getWorldBukkit(), getOffset()).getBlock(); //if that block is not loaded @@ -741,7 +741,7 @@ public void hide() { } //remove all - for (SimpleBlock cBlock : design.getAllCannonBlocks(this.getCannonDirection())) { + for (BukkitBlock cBlock : design.getAllCannonBlocks(this.getCannonDirection())) { Block wBlock = cBlock.toLocation(getWorldBukkit(), getOffset()).getBlock(); if (wBlock.getType() != Material.AIR) { @@ -774,7 +774,7 @@ public boolean isCannonBlock(Block block) { return false; } - for (SimpleBlock designBlock : design.getAllCannonBlocks(getCannonDirection())) { + for (BukkitBlock designBlock : design.getAllCannonBlocks(getCannonDirection())) { if (designBlock.compareMaterialAndLoc(block, getOffset())) { return true; } @@ -847,7 +847,7 @@ public boolean isCannonSign(Location loc) { return false; } - for (SimpleBlock cannonblock : cannonBlocks.getChestsAndSigns()) { + for (BukkitBlock cannonblock : cannonBlocks.getChestsAndSigns()) { // compare location if (cannonblock.toLocation(this.getWorldBukkit(), this.getOffset()).equals(loc)) { //Block block = loc.getBlock(); @@ -923,7 +923,7 @@ public boolean isRedstoneRepeaterInterface(Location loc) { return false; } - for (SimpleBlock cannonblock : cannonBlocks.getRedstoneWiresAndRepeater()) { + for (BukkitBlock cannonblock : cannonBlocks.getRedstoneWiresAndRepeater()) { // compare location if (cannonblock.toLocation(this.getWorldBukkit(), this.getOffset()).equals(loc)) { //Block block = loc.getBlock(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 4ce504cd..8edc9555 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -2,7 +2,7 @@ import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.SimpleBlock; +import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.projectile.ProjectileStorage; @@ -653,14 +653,14 @@ private Cannon checkCannon(Location cannonBlock, UUID owner) { // check of all directions for (BlockFace cannonDirection : blockFaces) { // for all blocks for the design - List designBlockList = cannonDesign.getAllCannonBlocks(cannonDirection); + List designBlockList = cannonDesign.getAllCannonBlocks(cannonDirection); //check for empty entries if (designBlockList.isEmpty()) { plugin.logSevere("There are empty cannon design schematics in your design folder. Please check it."); return null; } - for (SimpleBlock designBlock : designBlockList) { + for (BukkitBlock designBlock : designBlockList) { // compare blocks if (!designBlock.compareMaterialAndFacing(blockData)) { continue; @@ -672,7 +672,7 @@ private Cannon checkCannon(Location cannonBlock, UUID owner) { // check all other blocks of the cannon boolean isCannon = true; - for (SimpleBlock checkBlocks : designBlockList) { + for (BukkitBlock checkBlocks : designBlockList) { if (!checkBlocks.compareMaterialAndFacing(world, offset)) { // if the block does not match this is not the // right one diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index fe1bf61e..f77fcc40 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -4,7 +4,7 @@ import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.SimpleBlock; +import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.container.DesignFileName; import at.pavlov.cannons.utils.CannonsUtil; @@ -113,7 +113,7 @@ public void loadCannonDesigns() cannonDesignList.sort(comparator); for (CannonDesign cannonDesign : getCannonDesignList()) { - for (SimpleBlock sBlock : cannonDesign.getAllCannonBlocks(BlockFace.NORTH)){ + for (BukkitBlock sBlock : cannonDesign.getAllCannonBlocks(BlockFace.NORTH)){ Material material = sBlock.getBlockData().getMaterial(); if (material != Material.AIR && !cannonBlockMaterials.contains(material)) { cannonBlockMaterials.add(sBlock.getBlockData().getMaterial()); @@ -432,7 +432,7 @@ private boolean loadDesignSchematic(CannonDesign cannonDesign, String schematicF cc.setOrigin(BlockVector3.ZERO); //plugin.logDebug("design: " + schematicFile); - ArrayList schematicList = getSchematic(width, height, length, cc, blockIgnore); + ArrayList schematicList = getSchematic(width, height, length, cc, blockIgnore); for (int i = 0; i < 4; i++) { // create CannonBlocks entry @@ -452,7 +452,7 @@ private boolean loadDesignSchematic(CannonDesign cannonDesign, String schematicF Vector maxRotation = new Vector(width, height, length); boolean firstEntryRotation = true; - for (SimpleBlock sblock : schematicList) { + for (BukkitBlock sblock : schematicList) { int x = sblock.getLocX(); int y = sblock.getLocY(); int z = sblock.getLocZ(); @@ -471,7 +471,7 @@ private boolean loadDesignSchematic(CannonDesign cannonDesign, String schematicF setMaximum(x, y, z, maxMuzzle); } //muzzle blocks need to be air - else the projectile would spawn in a block - cannonBlocks.addAllCannonBlocks(new SimpleBlock(x, y, z, Material.AIR)); + cannonBlocks.addAllCannonBlocks(new BukkitBlock(x, y, z, Material.AIR)); } // ############# find the min and max for rotation blocks else if (sblock.compareMaterial(blockRotationCenter)) { @@ -490,12 +490,12 @@ else if (sblock.compareMaterial(blockRedstoneTorch)) cannonBlocks.addRedstoneTorch(new Vector(x, y, z)); // ############# redstoneWire and Repeater else if (sblock.compareMaterial(blockRedstoneWireAndRepeater)) - cannonBlocks.addRedstoneWiresAndRepeater(new SimpleBlock(x, y, z, Material.REPEATER)); + cannonBlocks.addRedstoneWiresAndRepeater(new BukkitBlock(x, y, z, Material.REPEATER)); // ############# redstoneTrigger else if (sblock.compareMaterialAndFacing(blockRedstoneTrigger)) { cannonBlocks.addRedstoneTrigger(new Vector(x, y, z)); // buttons or levers are part of the cannon - cannonBlocks.addAllCannonBlocks(new SimpleBlock(x, y, z, replaceRedstoneTrigger)); + cannonBlocks.addAllCannonBlocks(new BukkitBlock(x, y, z, replaceRedstoneTrigger)); // this can be a destructible block if (!isInList(blockProtectedList, sblock.getBlockData())) cannonBlocks.addDestructibleBlocks(new Vector(x, y, z)); @@ -507,10 +507,10 @@ else if (sblock.compareMaterialAndFacing(blockRightClickTrigger)) //can be also a sign if (sblock.compareMaterialAndFacing(blockChestAndSign)) // the id does not matter, but the data is important for signs - cannonBlocks.addChestsAndSigns(new SimpleBlock(x, y, z, sblock.getBlockData())); //Material.WALL_SIGN + cannonBlocks.addChestsAndSigns(new BukkitBlock(x, y, z, sblock.getBlockData())); //Material.WALL_SIGN // firing blocks are also part of the cannon are // part of the cannon - cannonBlocks.addAllCannonBlocks(new SimpleBlock(x, y, z, replaceRightClickTrigger)); + cannonBlocks.addAllCannonBlocks(new BukkitBlock(x, y, z, replaceRightClickTrigger)); // this can be a destructible block if (!isInList(blockProtectedList, sblock.getBlockData())) cannonBlocks.addDestructibleBlocks(new Vector(x, y, z)); @@ -518,14 +518,14 @@ else if (sblock.compareMaterialAndFacing(blockRightClickTrigger)) // ############# chests and signs else if (sblock.compareMaterial(blockChestAndSign)) { // the id does not matter, but the data is important for signs - cannonBlocks.addChestsAndSigns(new SimpleBlock(x, y, z, sblock.getBlockData())); //Material.WALL_SIGN + cannonBlocks.addChestsAndSigns(new BukkitBlock(x, y, z, sblock.getBlockData())); //Material.WALL_SIGN } // ############# loading Interface is a cannonblock that is non of // the previous blocks else { // all remaining blocks are loading interface or cannonBlocks cannonBlocks.addBarrelBlocks(new Vector(x, y, z)); - cannonBlocks.addAllCannonBlocks(new SimpleBlock(x, y, z, sblock.getBlockData())); + cannonBlocks.addAllCannonBlocks(new BukkitBlock(x, y, z, sblock.getBlockData())); // this can be a destructible block if (!isInList(blockProtectedList, sblock.getBlockData())) cannonBlocks.addDestructibleBlocks(new Vector(x, y, z)); @@ -548,15 +548,15 @@ else if (sblock.compareMaterial(blockChestAndSign)) { //set the muzzle location Vector compensation = new Vector(cannonBlocks.getMuzzle().getBlockX(), cannonBlocks.getMuzzle().getBlockY(), cannonBlocks.getMuzzle().getBlockZ()); - for (SimpleBlock block : cannonBlocks.getAllCannonBlocks()) + for (BukkitBlock block : cannonBlocks.getAllCannonBlocks()) block.subtract_noCopy(compensation); for (Vector block : cannonBlocks.getBarrelBlocks()) block.subtract(compensation); - for (SimpleBlock block : cannonBlocks.getChestsAndSigns()) + for (BukkitBlock block : cannonBlocks.getChestsAndSigns()) block.subtract_noCopy(compensation); for (Vector block : cannonBlocks.getRedstoneTorches()) block.subtract(compensation); - for (SimpleBlock block : cannonBlocks.getRedstoneWiresAndRepeater()) + for (BukkitBlock block : cannonBlocks.getRedstoneWiresAndRepeater()) block.subtract_noCopy(compensation); for (Vector block : cannonBlocks.getRedstoneTrigger()) block.subtract(compensation); @@ -590,7 +590,7 @@ else if (sblock.compareMaterial(blockChestAndSign)) { } //rotate schematic blocks - for (SimpleBlock simpleBlock : schematicList){ + for (BukkitBlock simpleBlock : schematicList){ simpleBlock.rotate90(); } @@ -717,8 +717,8 @@ public boolean isCannonBlockMaterial(Material material) { return material != Material.AIR && cannonBlockMaterials.contains(material); } - private ArrayList getSchematic(int width, int height, int length, Clipboard cc, BlockData blockIgnore) { - ArrayList schematiclist = new ArrayList<>(); + private ArrayList getSchematic(int width, int height, int length, Clipboard cc, BlockData blockIgnore) { + ArrayList schematiclist = new ArrayList<>(); for (int x = 0; x < width; ++x) { for (int y = 0; y < height; ++y) { for (int z = 0; z < length; ++z) { @@ -732,7 +732,7 @@ private ArrayList getSchematic(int width, int height, int length, C // ignore if block is AIR or the IgnoreBlock type if (!block.getMaterial().equals(Material.AIR) && !block.matches(blockIgnore)) { - schematiclist.add(new SimpleBlock(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ(), block)); + schematiclist.add(new BukkitBlock(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ(), block)); } } } From e7f50a844f929790dec517f6d95bd89e76676448 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 10 Dec 2024 22:37:04 +0100 Subject: [PATCH 37/97] Small fixes + documentation --- .../src/main/java/at/pavlov/cannons/TargetManager.java | 6 +++++- .../main/java/at/pavlov/cannons/utils/CannonsUtil.java | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java index 9f1f51e8..17f7760b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java @@ -6,8 +6,12 @@ import java.util.HashMap; import java.util.HashSet; +import java.util.Objects; import java.util.UUID; +/** + * Class used by other plugins in order to add targets + */ public class TargetManager { private static HashMap targets = new HashMap<>(); @@ -36,7 +40,7 @@ public static HashSet getTargetsInBox(Location center, double lengthX, d Location newLoc = target.centerLocation(); Vector box = newLoc.subtract(center).toVector(); - if (newLoc.getWorld().equals(center.getWorld().getUID()) && Math.abs(box.getX()) getNearbyEntities(Location l, int minRadius, } /** + * This method searches in the nearby chunks in a square and * returns all targets (entity and cannons) in a given radius * @param l center location * @param minRadius minimum radius for search @@ -421,8 +422,13 @@ public static HashMap getNearbyTargets(Location l, int minRadius, continue; } + + if (!(e instanceof LivingEntity) || e.isDead() || e.getLocation().getBlock() == l.getBlock()) { + continue; + } + double dist = e.getLocation().distanceSquared(l); - if (!(e instanceof LivingEntity) || e.isDead() || !(minRadius*minRadius <= dist) || !(dist <= maxRadius*maxRadius) || e.getLocation().getBlock() == l.getBlock()) { + if (maxRadius * maxRadius < dist || dist < minRadius * minRadius) { continue; } From 2e319e3cfa9c900d1c541646f95874ff86d9db9f Mon Sep 17 00:00:00 2001 From: Intybyte Date: Wed, 11 Dec 2024 16:02:41 +0100 Subject: [PATCH 38/97] Abstract SpawnEntityHolder and make BukkitEntityHolder --- ...nEntityHolder.java => BukkitEntityHolder.java} | 15 ++++----------- .../at/pavlov/bukkit/projectile/Projectile.java | 4 ++-- .../bukkit/container/BukkitEntityHolderTest.java | 4 ++++ .../internal/container/SpawnEntityHolder.java | 15 +++++++++++++++ .../java/at/pavlov/cannons/CreateExplosion.java | 6 +++--- .../java/at/pavlov/cannons/utils/ParseUtils.java | 8 ++++---- 6 files changed, 32 insertions(+), 20 deletions(-) rename api-bukkit/src/main/java/at/pavlov/bukkit/container/{SpawnEntityHolder.java => BukkitEntityHolder.java} (95%) create mode 100644 api-bukkit/src/test/java/at/pavlov/bukkit/container/BukkitEntityHolderTest.java create mode 100644 api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitEntityHolder.java similarity index 95% rename from api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitEntityHolder.java index fe8a0c36..e73eb6d7 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnEntityHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitEntityHolder.java @@ -1,15 +1,14 @@ package at.pavlov.bukkit.container; import at.pavlov.internal.CannonLogger; +import at.pavlov.internal.container.SpawnEntityHolder; import at.pavlov.internal.enums.EntityDataType; -import lombok.Data; import org.bukkit.entity.EntityType; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Scanner; import java.util.logging.Level; @@ -17,14 +16,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -@Data public class SpawnEntityHolder { - private EntityType type; - private int minAmount; - private int maxAmount; - private Map data; - private List potionEffects; - - public SpawnEntityHolder(String str) { +public class BukkitEntityHolder extends SpawnEntityHolder { + public BukkitEntityHolder(String str) { //split string at space // NAME min-max // ZOMBIE 1-2 @@ -164,7 +157,7 @@ public SpawnEntityHolder(String str) { } } - public SpawnEntityHolder(EntityType type, int minAmount, int maxAmount, Map data) { + public BukkitEntityHolder(EntityType type, int minAmount, int maxAmount, Map data) { this.type = type; this.minAmount = minAmount; this.maxAmount = maxAmount; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index 023c2f49..ab77f959 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -3,7 +3,7 @@ import at.pavlov.bukkit.builders.ParticleBuilder; import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.SpawnEntityHolder; +import at.pavlov.bukkit.container.BukkitEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; import at.pavlov.internal.CannonLogger; import at.pavlov.internal.enums.ProjectileProperties; @@ -79,7 +79,7 @@ public class Projectile implements Cloneable { private double spawnEntityRadius; private double spawnVelocity; private List spawnBlocks = new ArrayList<>(); - private List spawnEntities = new ArrayList<>(); + private List spawnEntities = new ArrayList<>(); private List spawnProjectiles; //spawn Fireworks diff --git a/api-bukkit/src/test/java/at/pavlov/bukkit/container/BukkitEntityHolderTest.java b/api-bukkit/src/test/java/at/pavlov/bukkit/container/BukkitEntityHolderTest.java new file mode 100644 index 00000000..80da077a --- /dev/null +++ b/api-bukkit/src/test/java/at/pavlov/bukkit/container/BukkitEntityHolderTest.java @@ -0,0 +1,4 @@ +package at.pavlov.bukkit.container; + +public class BukkitEntityHolderTest { +} diff --git a/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java new file mode 100644 index 00000000..c3a34594 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java @@ -0,0 +1,15 @@ +package at.pavlov.internal.container; + +import at.pavlov.internal.enums.EntityDataType; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data abstract public class SpawnEntityHolder { + protected Entity type; + protected int minAmount; + protected int maxAmount; + protected Map data; + protected List potionEffects; +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 53037a62..9f957ae4 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -1,7 +1,7 @@ package at.pavlov.cannons; import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.SpawnEntityHolder; +import at.pavlov.bukkit.container.BukkitEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.internal.enums.ProjectileProperties; @@ -289,7 +289,7 @@ private void BreakBreakNaturally(Block block, float yield) { * @param entityHolder type of entity to spawn */ private void spawnEntity(FlyingProjectile cannonball, Location loc, double entityVelocity, - SpawnEntityHolder entityHolder) { + BukkitEntityHolder entityHolder) { Location impactLoc = cannonball.getImpactLocation(); World world = impactLoc.getWorld(); @@ -462,7 +462,7 @@ private void spreadEntities(FlyingProjectile cannonball) { double spread = projectile.getSpawnEntityRadius(); - for (SpawnEntityHolder spawn : projectile.getSpawnEntities()) { + for (BukkitEntityHolder spawn : projectile.getSpawnEntities()) { // add some randomness to the amount of spawned blocks int maxPlacement = CannonsUtil.getRandomInt(spawn.getMinAmount(), spawn.getMaxAmount()); plugin.logDebug("spawn Entity: " + spawn.getType() + " min: " + spawn.getMinAmount() + " max: " + spawn.getMaxAmount()); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java index 01a68a39..acf50f1e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.utils; import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.SpawnEntityHolder; +import at.pavlov.bukkit.container.BukkitEntityHolder; import at.pavlov.bukkit.container.SpawnMaterialHolder; import at.pavlov.cannons.Cannons; import org.bukkit.Bukkit; @@ -177,11 +177,11 @@ public static List toSpawnMaterialHolderList(List s * @param stringList list of strings to convert * @return list of converted SpawnMaterialHolder */ - public static List toSpawnEntityHolderList(List stringList) { - List entityList = new ArrayList<>(); + public static List toSpawnEntityHolderList(List stringList) { + List entityList = new ArrayList<>(); for (String str : stringList) { - SpawnEntityHolder entity = new SpawnEntityHolder(str); + BukkitEntityHolder entity = new BukkitEntityHolder(str); //if id == -1 the str was invalid if (entity.getType() != null) entityList.add(entity); From 2616c1dfbb81d8b3520d3ff5a89f3c1d6d9478cd Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 17:46:32 +0100 Subject: [PATCH 39/97] Add lookup table --- .../pavlov/internal/enums/EntityDataType.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java index 28d8bdf9..11328079 100644 --- a/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java @@ -1,6 +1,12 @@ package at.pavlov.internal.enums; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + public enum EntityDataType { FUSE_TIME ("Fuse"), POTION_EFFECT ("Potion"), @@ -31,4 +37,18 @@ public String getString() { return str; } + + private static final Map LOOKUP_MAP; + + static { + LOOKUP_MAP = new HashMap<>(); + for (EntityDataType dataType : values()) { + LOOKUP_MAP.put(dataType.getString().toLowerCase(), dataType); + } + } + + public static EntityDataType lookup(String str) { + String lookup = str.toLowerCase(); + return LOOKUP_MAP.get(lookup); + } } From a46fea7c7ffce8f87f59caca48f0df22c6e1aa18 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 17:58:01 +0100 Subject: [PATCH 40/97] Move some methods to SpawnEntityHolder --- .../bukkit/container/BukkitEntityHolder.java | 197 ++++++------------ .../internal/container/SpawnEntityHolder.java | 112 ++++++++++ 2 files changed, 173 insertions(+), 136 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitEntityHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitEntityHolder.java index e73eb6d7..b36e7c12 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitEntityHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitEntityHolder.java @@ -3,164 +3,89 @@ import at.pavlov.internal.CannonLogger; import at.pavlov.internal.container.SpawnEntityHolder; import at.pavlov.internal.enums.EntityDataType; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; import org.bukkit.entity.EntityType; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import java.util.ArrayList; -import java.util.HashMap; import java.util.Map; -import java.util.Scanner; -import java.util.logging.Level; -import java.util.regex.MatchResult; -import java.util.regex.Matcher; -import java.util.regex.Pattern; public class BukkitEntityHolder extends SpawnEntityHolder { + public BukkitEntityHolder(String str) { - //split string at space - // NAME min-max - // ZOMBIE 1-2 - // EntityData string + super(str); + } - data = new HashMap<>(); - potionEffects = new ArrayList<>(); - Scanner s = new Scanner(str); - s.findInLine("(\\w+)\\s+(\\d+)-(\\d+)\\s*(.+)?"); - MatchResult result = s.match(); + public BukkitEntityHolder(EntityType type, int minAmount, int maxAmount, Map data) { + super(type, minAmount, maxAmount, data); + } + @Override + public void parseEntityType(String entityTypeStr) { try { - // 'AREA_EFFECT_CLOUD 1-1 {Particle:"entity_effect",Radius:5f,Duration:300,Color:16711680,Effects:[{Id:2b,Amplifier:3b,Duration:300,ShowParticles:0b},{Id:7b,Amplifier:1b,Duration:20,ShowParticles:0b},{Id:9b,Amplifier:2b,Duration:300,ShowParticles:0b},{Id:19b,Amplifier:2b,Duration:300,ShowParticles:0b}]}' + setType(EntityType.valueOf(entityTypeStr)); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("Invalid entity type: " + entityTypeStr, e); + } + } - setType(EntityType.valueOf(result.group(1))); - setMinAmount(Integer.parseInt(result.group(2))); - if (getMinAmount() < 0) { - //Cannons.getPlugin().logSevere("Min amount for spawned entity: " + getType() + " is <0"); - setMinAmount(0); - } - setMaxAmount(Integer.parseInt(result.group(3))); - if (getMaxAmount() > 100) { - //Cannons.getPlugin().logSevere("Max amount for spawned entity: " + getType() + " is >1000 and was reset to 10"); - setMaxAmount(10); + @Override + public void createPotionEffect(JsonObject attributes) { + try { + PotionEffectType type = getPotionType(attributes.get("Id")); + int duration = getNumber(attributes.get("Duration")); + int amplifier = getNumber(attributes.get("Amplifier")); + boolean ambient = getBoolean(attributes, "Ambient", false); + boolean particles = getBoolean(attributes, "ShowParticles", false); + boolean icon = getBoolean(attributes, "Icon", true); + + if (type != null && duration > 0 && amplifier > 0) { + potionEffects.add(new PotionEffect(type, duration, amplifier, ambient, particles, icon)); } } catch (Exception e) { - s.close(); - CannonLogger.getLogger().log(Level.SEVERE, "Error: wrong entity type or min-max values"); - return; - } - - if (result.group(4) == null) { - s.close(); - CannonLogger.getLogger().log(Level.WARNING, "type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); - return; + logError("Invalid potion effect attributes", e, attributes.toString()); } + } - // search for curly braces in as parameter - Pattern p = Pattern.compile("(?<=\\{)(.+)(?=\\})"); - Matcher m = p.matcher(result.group(4)); - String strdata = null; - if (m.find()) - strdata = m.group(1); - - //if there are no curly braces set the string to complete argument - if (strdata == null) - strdata = result.group(4).trim(); - - // convert entity data to map. Split the arguments by comma, but don't split inside parentheses [] - // {Particle:"entity_effect",Radius:5f,Duration:300,Color:16711680,Effects:[{Id:2b,Amplifier:3b,Duration:300,ShowParticles:0b},{Id:7b,Amplifier:1b,Duration:20,ShowParticles:0b},{Id:9b,Amplifier:2b,Duration:300,ShowParticles:0b},{Id:19b,Amplifier:2b,Duration:300,ShowParticles:0b}]} + // TODO make a json utils + public static PotionEffectType getPotionType(JsonElement element) { try { - for (String s1 : strdata.split("(?![^)(]*\\([^)(]*?\\)\\)),(?![^\\[]*\\])")) { - // separate in type and argument EFFECTS:1b - String[] s2 = s1.split(":(?![^\\[]*\\])"); - // check if there are argument and value - if (s2.length <= 1) { - CannonLogger.getLogger().log(Level.SEVERE, "" + s1 + " does not have an argument, use 'DURATION:10'"); - continue; - } - - boolean found = false; - String com1 = s2[0].trim(); - // if the type is an effect it can have multiple effects in parentheses - // effects:[{Id:2b,Amplifier:3b,Duration:300,ShowParticles:0b},{Id:7b,Amplifier:1b,Duration:20,ShowParticles:0b},{Id:9b,Amplifier:2b,Duration:300,ShowParticles:0b},{Id:19b,Amplifier:2b,Duration:300,ShowParticles:0b}] - if (!com1.equalsIgnoreCase("effects")) { - for (EntityDataType dt : EntityDataType.values()) { - // add new entries - if (com1.equalsIgnoreCase(dt.getString())) { - data.put(dt, s2[1].trim()); - found = true; - break; - } - } - if (!found) { - CannonLogger.getLogger().log(Level.SEVERE, "'" + s2[0] + "' is not supported by Cannons"); - } - continue; - } + int id = getNumber(element); + return PotionEffectType.getById(id); + } catch (NumberFormatException e) { + String str = element.getAsString(); + if (str == null) { + CannonLogger.getLogger().severe("Effect type string cannot be null"); + return null; + } - String effects = s2[1].replaceAll("[\\[\\]]", ""); + NamespacedKey potionKey = NamespacedKey.fromString(str); + if (potionKey == null) { + CannonLogger.getLogger().severe("Effect type key not found, format should be something like: minecraft:strength"); + return null; + } - // isolate every effect inside the parentheses for every potion effect - // {Id:2b,Amplifier:3b,Duration:300,ShowParticles:0b},{Id:7b,Amplifier:1b,Duration:20,ShowParticles:0b},{Id:9b,Amplifier:2b,Duration:300,ShowParticles:0b},{Id:19b,Amplifier:2b,Duration:300,ShowParticles:0b} - for (String effect : effects.split(",(?![^\\{]*\\})")) { - PotionEffectType type = null; - int duration = 0; - int amplifier = 0; - boolean ambient = false; - boolean particles = false; - boolean icon = true; - // remove the curly braces and split bei comma - // {Id:2b,Amplifier:3b,Duration:300,ShowParticles:0b} - for (String arg : effect.replaceAll("[\\{\\}]", "").split(",")) { - // split between argument and value - String[] s3 = arg.split(":"); - if (s3.length <= 1) { - continue; - } + return Registry.EFFECT.get(potionKey); + } + } - // check arguments type, duration, amplifier, ambient, particles, icon - String val = s3[1].replaceAll("b", ""); - switch (s3[0].toLowerCase()) { - case "id": - type = PotionEffectType.getById(Integer.parseInt(val)); - break; - case "duration": - duration = Integer.parseInt(val); - break; - case "amplifier": - amplifier = Integer.parseInt(val); - break; - case "ambient": - ambient = Boolean.parseBoolean(val); - break; - case "showparticles": - particles = Boolean.parseBoolean(val); - break; - case "icon": - icon = Boolean.parseBoolean(val); - break; - default: - CannonLogger.getLogger().log(Level.SEVERE, "'" + s3[0] + "' is not a correct potion effect argument. See Bukkit PotionType"); - } - } - //Cannons.getPlugin().logDebug("AREA OF EFFECT CLOUD potion type: " + type + " duration " + duration + " amplifier " + amplifier + " ambient " + ambient + " particles " + particles + " icon " + icon); - if (type != null && duration > 0 && amplifier > 0) - potionEffects.add(new PotionEffect(type, duration, amplifier, ambient, particles, icon)); - } - } - s.close(); - CannonLogger.getLogger().info("type: " + getType() + " data: " + getData() + " min: " + minAmount + " max: " + maxAmount + " from str: " + str); - } catch (Exception e) { - CannonLogger.getLogger().log(Level.SEVERE, "Error while converting " + str + ". Check formating (Zombie 1-2 EntityData)" + e); - setType(null); - setMinAmount(0); - setMaxAmount(0); + public static int getNumber(JsonElement element) throws NumberFormatException { + var str = element.getAsString(); + if (str.endsWith("b")) { + return Integer.parseInt(str.substring(0, str.length() - 1)); } + + return Integer.parseInt(str); } - public BukkitEntityHolder(EntityType type, int minAmount, int maxAmount, Map data) { - this.type = type; - this.minAmount = minAmount; - this.maxAmount = maxAmount; - this.data = data; + public static boolean getBoolean(JsonObject obj, String key, boolean default_value) { + if (!obj.has(key)) { + return default_value; + } + + return getNumber(obj.get(key)) == 1; } } diff --git a/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java index c3a34594..568055f0 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java @@ -1,10 +1,17 @@ package at.pavlov.internal.container; +import at.pavlov.internal.CannonLogger; import at.pavlov.internal.enums.EntityDataType; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import lombok.Data; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.logging.Level; @Data abstract public class SpawnEntityHolder { protected Entity type; @@ -12,4 +19,109 @@ protected int maxAmount; protected Map data; protected List potionEffects; + + public SpawnEntityHolder(Entity type, int minAmount, int maxAmount, Map data) { + this.type = type; + this.minAmount = minAmount; + this.maxAmount = maxAmount; + this.data = data; + } + + public SpawnEntityHolder(String str) { + data = new HashMap<>(); + potionEffects = new ArrayList<>(); + + try { + // Split the input string into parts + String[] parts = str.split(" ", 3); + if (parts.length < 2) { + throw new IllegalArgumentException("Input string must contain at least entity type and min-max values."); + } + + // Parse entity type and min-max values + parseEntityType(parts[0]); + parseMinMax(parts[1]); + + // Parse additional entity data if present + if (parts.length > 2) { + parseEntityData(parts[2]); + } else { + logWarning("No additional data provided: ", str); + } + + } catch (Exception e) { + logError("Error parsing input", e, str); + resetEntityData(); + } + } + + public void resetEntityData() { + setType(null); + setMinAmount(0); + setMaxAmount(0); + } + + public void parseEntityData(String dataStr) { + try { + // Parse the data string as JSON + JsonObject jsonObject = JsonParser.parseString(dataStr).getAsJsonObject(); + + for (Map.Entry entry : jsonObject.entrySet()) { + String key = entry.getKey(); + JsonElement value = entry.getValue(); + + if (key.equalsIgnoreCase("effects")) { + parsePotionEffects(value); + } else { + addEntityData(key, value.getAsString()); + } + } + } catch (Exception e) { + throw new IllegalArgumentException("Invalid entity data format: " + dataStr, e); + } + } + + public void parseMinMax(String minMaxStr) { + String[] range = minMaxStr.split("-"); + if (range.length != 2) { + throw new IllegalArgumentException("Invalid min-max format: " + minMaxStr); + } + setMinAmount(Math.max(0, Integer.parseInt(range[0]))); + setMaxAmount(Math.min(100, Integer.parseInt(range[1]))); + } + + public void addEntityData(String key, String value) { + EntityDataType dataType = EntityDataType.lookup(key); + if (dataType == null) { + throw new IllegalArgumentException("Unsupported entity data key: " + key); + } + + data.put(dataType, value); + } + + public void parsePotionEffects(JsonElement effectsElement) { + if (!effectsElement.isJsonArray()) { + throw new IllegalArgumentException("Effects must be a JSON array."); + } + + effectsElement.getAsJsonArray().forEach(effectElement -> { + if (!effectElement.isJsonObject()) { + throw new IllegalArgumentException("Each effect must be a JSON object."); + } + + JsonObject effectObject = effectElement.getAsJsonObject(); + createPotionEffect(effectObject); + }); + } + + public abstract void createPotionEffect(JsonObject attributes); + public abstract void parseEntityType(String entityTypeStr); + + protected void logError(String message, Exception e, String context) { + CannonLogger.getLogger().log(Level.SEVERE, message + (context != null ? ": " + context : ""), e); + } + + protected void logWarning(String message, String context) { + CannonLogger.getLogger().log(Level.WARNING, message + (context != null ? ": " + context : "")); + } } From af8a7ef8a6d06ff9f11ac3266b80d2e3edc70e63 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 18:05:20 +0100 Subject: [PATCH 41/97] Abstract SpawnMaterialHolder and make BukkitSpawnMaterialHolder --- .../container/BukkitSpawnMaterialHolder.java | 26 +++++++++++++++++++ .../pavlov/bukkit/projectile/Projectile.java | 4 +-- .../container/SpawnMaterialHolder.java | 24 ++++++++--------- .../at/pavlov/cannons/CreateExplosion.java | 4 +-- .../at/pavlov/cannons/utils/ParseUtils.java | 8 +++--- 5 files changed, 46 insertions(+), 20 deletions(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSpawnMaterialHolder.java rename {api-bukkit/src/main/java/at/pavlov/bukkit => api-internal/src/main/java/at/pavlov/internal}/container/SpawnMaterialHolder.java (64%) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSpawnMaterialHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSpawnMaterialHolder.java new file mode 100644 index 00000000..f4a434b3 --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSpawnMaterialHolder.java @@ -0,0 +1,26 @@ +package at.pavlov.bukkit.container; + +import at.pavlov.internal.container.SpawnMaterialHolder; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.block.data.BlockData; + +public class BukkitSpawnMaterialHolder extends SpawnMaterialHolder { + public BukkitSpawnMaterialHolder(String str) { + super(str); + } + + public BukkitSpawnMaterialHolder(BlockData material, int minAmount, int maxAmount) { + super(material, minAmount, maxAmount); + } + + @Override + public void setBlockString(String str) { + material = Bukkit.createBlockData(str); + } + + @Override + public BlockData getDefaultBlock() { + return Bukkit.createBlockData(Material.AIR); + } +} diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java index ab77f959..c4acbeaa 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java @@ -4,7 +4,7 @@ import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitEntityHolder; -import at.pavlov.bukkit.container.SpawnMaterialHolder; +import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; import at.pavlov.internal.CannonLogger; import at.pavlov.internal.enums.ProjectileProperties; import lombok.Data; @@ -78,7 +78,7 @@ public class Projectile implements Cloneable { private double spawnBlockRadius; private double spawnEntityRadius; private double spawnVelocity; - private List spawnBlocks = new ArrayList<>(); + private List spawnBlocks = new ArrayList<>(); private List spawnEntities = new ArrayList<>(); private List spawnProjectiles; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/SpawnMaterialHolder.java similarity index 64% rename from api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java rename to api-internal/src/main/java/at/pavlov/internal/container/SpawnMaterialHolder.java index d34de711..c7ab3a42 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/SpawnMaterialHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/SpawnMaterialHolder.java @@ -1,44 +1,44 @@ -package at.pavlov.bukkit.container; +package at.pavlov.internal.container; import at.pavlov.internal.CannonLogger; import lombok.Data; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.block.data.BlockData; import java.util.Scanner; import java.util.logging.Level; import java.util.regex.MatchResult; @Data -public class SpawnMaterialHolder { - private BlockData material; - private int minAmount; - private int maxAmount; +public abstract class SpawnMaterialHolder { + protected Block material; + protected int minAmount; + protected int maxAmount; public SpawnMaterialHolder(String str) { - //split string at space + // split string at space // id:data min-max // 10:0 1-2 try { Scanner s = new Scanner(str); s.findInLine("(\\S+)\\s(\\d+)-(\\d+)"); MatchResult result = s.match(); - material = Bukkit.createBlockData(result.group(1)); + setBlockString(result.group(1)); setMinAmount(Integer.parseInt(result.group(2))); setMaxAmount(Integer.parseInt(result.group(3))); s.close(); } catch (Exception e) { CannonLogger.getLogger().log(Level.SEVERE,"Error while converting " + str + ". Check formatting (minecraft:cobweb 1-2)"); - material = Bukkit.createBlockData(Material.AIR); + material = getDefaultBlock(); setMinAmount(0); setMaxAmount(0); } } - public SpawnMaterialHolder(BlockData material, int minAmount, int maxAmount) { + public SpawnMaterialHolder(Block material, int minAmount, int maxAmount) { this.material = material; this.minAmount = minAmount; this.maxAmount = maxAmount; } + + public abstract void setBlockString(String str); + public abstract Block getDefaultBlock(); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 9f957ae4..82ee1192 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -2,7 +2,7 @@ import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitEntityHolder; -import at.pavlov.bukkit.container.SpawnMaterialHolder; +import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.internal.enums.DamageType; @@ -531,7 +531,7 @@ private void spreadBlocks(FlyingProjectile cannonball) { double spread = projectile.getSpawnBlockRadius(); - for (SpawnMaterialHolder spawn : projectile.getSpawnBlocks()) { + for (BukkitSpawnMaterialHolder spawn : projectile.getSpawnBlocks()) { // add some randomness to the amount of spawned blocks int maxPlacement = CannonsUtil.getRandomInt(spawn.getMinAmount(), spawn.getMaxAmount()); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java index acf50f1e..becaaa61 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java @@ -2,7 +2,7 @@ import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitEntityHolder; -import at.pavlov.bukkit.container.SpawnMaterialHolder; +import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; import at.pavlov.cannons.Cannons; import org.bukkit.Bukkit; import org.bukkit.Color; @@ -162,10 +162,10 @@ public static List toItemHolderList(List stringList) { * @param stringList list of strings to convert * @return list of converted SpawnItemHolder */ - public static List toSpawnMaterialHolderList(List stringList) { - List materialList = new ArrayList(); + public static List toSpawnMaterialHolderList(List stringList) { + List materialList = new ArrayList(); for (String str : stringList) { - SpawnMaterialHolder material = new SpawnMaterialHolder(str); + BukkitSpawnMaterialHolder material = new BukkitSpawnMaterialHolder(str); materialList.add(material); } From 78d048c8edea8b066b3326b1a2bb0d1d4078564e Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 18:42:53 +0100 Subject: [PATCH 42/97] Fix java 17 warning --- api-bukkit/pom.xml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/api-bukkit/pom.xml b/api-bukkit/pom.xml index dc16d794..44dd3c76 100644 --- a/api-bukkit/pom.xml +++ b/api-bukkit/pom.xml @@ -12,8 +12,6 @@ api-bukkit - 17 - 17 UTF-8 @@ -39,4 +37,18 @@ + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + ${java.source} + ${java.target} + + + + + \ No newline at end of file From b765ecae1e3229ffa843cdef79885abbcffc88e9 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 18:43:13 +0100 Subject: [PATCH 43/97] Abstract CannonBlocks and make BukkitCannonBlocks --- .../pavlov/bukkit/cannons/CannonDesign.java | 33 ++++++++++--------- .../bukkit/container/BukkitCannonBlocks.java | 12 +++++++ .../internal/container}/CannonBlocks.java | 20 +++++------ .../java/at/pavlov/cannons/cannon/Cannon.java | 6 ++-- .../pavlov/cannons/cannon/DesignStorage.java | 4 +-- 5 files changed, 42 insertions(+), 33 deletions(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java rename {api-bukkit/src/main/java/at/pavlov/bukkit/cannons => api-internal/src/main/java/at/pavlov/internal/container}/CannonBlocks.java (79%) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index f98a8107..8c2a4e16 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -1,5 +1,6 @@ package at.pavlov.bukkit.cannons; +import at.pavlov.bukkit.container.BukkitCannonBlocks; import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitBlock; @@ -187,7 +188,7 @@ private List schematicBlockTypeProtected; //list of blocks that are protected from explosions (e.g. buttons) //cannon design block lists for every direction (NORTH, EAST, SOUTH, WEST) - private final HashMap cannonBlockMap = new HashMap<>(); + private final HashMap cannonBlockMap = new HashMap<>(); private final EnumSet allowedMaterials = EnumSet.noneOf(Material.class); @@ -197,7 +198,7 @@ */ public Location getRotationCenter(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); if (cannonBlocks != null) { return cannonBlocks.getRotationCenter().clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit()); @@ -213,7 +214,7 @@ public Location getRotationCenter(CannonBukkit cannon) */ public Location getMuzzle(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); if (cannonBlocks != null) { return cannonBlocks.getMuzzle().clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit()); @@ -230,7 +231,7 @@ public Location getMuzzle(CannonBukkit cannon) */ public Location getFiringTrigger(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); if (cannonBlocks != null && cannonBlocks.getFiringTrigger() != null) { return cannonBlocks.getFiringTrigger().clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit()); @@ -245,7 +246,7 @@ public Location getFiringTrigger(CannonBukkit cannon) */ public List getAllCannonBlocks(BlockFace cannonDirection) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannonDirection); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannonDirection); if (cannonBlocks != null) { return cannonBlocks.getAllCannonBlocks(); @@ -260,7 +261,7 @@ public List getAllCannonBlocks(BlockFace cannonDirection) */ public List getAllCannonBlocks(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); if (cannonBlocks != null) { @@ -278,7 +279,7 @@ public List getAllCannonBlocks(CannonBukkit cannon) */ public List getDestructibleBlocks(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); if (cannonBlocks != null) { @@ -296,7 +297,7 @@ public List getDestructibleBlocks(CannonBukkit cannon) */ public List getFiringIndicator(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); if (cannonBlocks != null) { @@ -313,7 +314,7 @@ public List getFiringIndicator(CannonBukkit cannon) */ public List getLoadingInterface(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); if (cannonBlocks != null) { @@ -330,7 +331,7 @@ public List getLoadingInterface(CannonBukkit cannon) */ public List getBarrelBlocks(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); if (cannonBlocks != null) { @@ -347,7 +348,7 @@ public List getBarrelBlocks(CannonBukkit cannon) */ public List getRightClickTrigger(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); if (cannonBlocks != null) { @@ -364,7 +365,7 @@ public List getRightClickTrigger(CannonBukkit cannon) */ public List getRedstoneTrigger(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); if (cannonBlocks != null) { @@ -382,7 +383,7 @@ public List getRedstoneTrigger(CannonBukkit cannon) */ public List getChestsAndSigns(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); if (cannonBlocks != null) { @@ -399,7 +400,7 @@ public List getChestsAndSigns(CannonBukkit cannon) */ public List getRedstoneTorches(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); if (cannonBlocks != null) { @@ -416,7 +417,7 @@ public List getRedstoneTorches(CannonBukkit cannon) */ public List getRedstoneWireAndRepeater(CannonBukkit cannon) { - CannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); List locList = new ArrayList<>(); if (cannonBlocks != null) { @@ -464,7 +465,7 @@ public int getMaxLoadableGunpowderOverloaded() return getMaxLoadableGunpowderNormal(); } - public void putCannonBlockMap(BlockFace cannonDirection, CannonBlocks blocks) { + public void putCannonBlockMap(BlockFace cannonDirection, BukkitCannonBlocks blocks) { for (var block : blocks.getAllCannonBlocks()) { allowedMaterials.add(block.getBlockData().getMaterial()); } diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java new file mode 100644 index 00000000..49ecd3fe --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java @@ -0,0 +1,12 @@ +package at.pavlov.bukkit.container; + +import at.pavlov.internal.container.CannonBlocks; +import org.bukkit.util.Vector; + +/** + * This class is used internally to keep track of some blocks, + * it is not suggested to create new instances of it but instead + * use it to get the positions of the various stuff + */ +public class BukkitCannonBlocks extends CannonBlocks { +} \ No newline at end of file diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java b/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java similarity index 79% rename from api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java rename to api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java index 581f6281..58931022 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonBlocks.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java @@ -1,8 +1,6 @@ -package at.pavlov.bukkit.cannons; +package at.pavlov.internal.container; -import at.pavlov.bukkit.container.BukkitBlock; import lombok.Data; -import org.bukkit.util.Vector; import java.util.ArrayList; @@ -11,15 +9,15 @@ * it is not suggested to create new instances of it but instead * use it to get the positions of the various stuff */ -@Data public class CannonBlocks { +@Data public class CannonBlocks> { private Vector rotationCenter; //center off all rotation blocks private Vector muzzle; //center off all muzzle blocks - spawing Vector for snowball - private ArrayList allCannonBlocks = new ArrayList<>(); + private ArrayList allCannonBlocks = new ArrayList<>(); private ArrayList barrelBlocks = new ArrayList<>(); - private ArrayList chestsAndSigns = new ArrayList<>(); + private ArrayList chestsAndSigns = new ArrayList<>(); private ArrayList redstoneTorches = new ArrayList<>(); - private ArrayList redstoneWiresAndRepeater = new ArrayList<>(); + private ArrayList redstoneWiresAndRepeater = new ArrayList<>(); private ArrayList redstoneTrigger = new ArrayList<>(); private ArrayList rightClickTrigger = new ArrayList<>(); private ArrayList firingIndicator = new ArrayList<>(); @@ -27,8 +25,6 @@ /** * returns true if this block is part of the loading interface - * @param loc - * @return */ public boolean isLoadingInterface(Vector loc) { for (Vector loadingBlock : barrelBlocks) { @@ -52,7 +48,7 @@ public Vector getFiringTrigger() { return null; } - public void addAllCannonBlocks(BukkitBlock add) { + public void addAllCannonBlocks(Block add) { this.allCannonBlocks.add(add); } @@ -72,11 +68,11 @@ public void addRightClickTrigger(Vector add) { this.rightClickTrigger.add(add); } - public void addChestsAndSigns(BukkitBlock add) { + public void addChestsAndSigns(Block add) { this.chestsAndSigns.add(add); } - public void addRedstoneWiresAndRepeater(BukkitBlock add) { + public void addRedstoneWiresAndRepeater(Block add) { this.redstoneWiresAndRepeater.add(add); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index bf9ebdfd..6809a27c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.cannon; -import at.pavlov.bukkit.cannons.CannonBlocks; +import at.pavlov.bukkit.container.BukkitCannonBlocks; import at.pavlov.bukkit.cannons.CannonBukkit; import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.cannons.CannonDesignHolder; @@ -841,7 +841,7 @@ public boolean isCannonSign(Location loc) { return false; } - CannonBlocks cannonBlocks = this.getCannonDesign().getCannonBlockMap().get(this.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = this.getCannonDesign().getCannonBlockMap().get(this.getCannonDirection()); if (cannonBlocks == null) { return false; @@ -917,7 +917,7 @@ public boolean isRedstoneWireInterface(Location block) { * @return true if this location where the repeater interacts with the cannon */ public boolean isRedstoneRepeaterInterface(Location loc) { - CannonBlocks cannonBlocks = this.getCannonDesign().getCannonBlockMap().get(this.getCannonDirection()); + BukkitCannonBlocks cannonBlocks = this.getCannonDesign().getCannonBlockMap().get(this.getCannonDirection()); if (cannonBlocks == null) { return false; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index f77fcc40..960579b4 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.cannon; -import at.pavlov.bukkit.cannons.CannonBlocks; +import at.pavlov.bukkit.container.BukkitCannonBlocks; import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; @@ -436,7 +436,7 @@ private boolean loadDesignSchematic(CannonDesign cannonDesign, String schematicF for (int i = 0; i < 4; i++) { // create CannonBlocks entry - CannonBlocks cannonBlocks = new CannonBlocks(); + BukkitCannonBlocks cannonBlocks = new BukkitCannonBlocks(); // to set the muzzle location the maximum and mininum x, y, z values // of all muzzle blocks have to be found From 72ba4481b2b504adb9b1218805482c7b6025f2ba Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 18:43:37 +0100 Subject: [PATCH 44/97] Abstract CannonBlocks --- .../main/java/at/pavlov/internal/container/CannonBlocks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java b/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java index 58931022..358b0211 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java @@ -9,7 +9,7 @@ * it is not suggested to create new instances of it but instead * use it to get the positions of the various stuff */ -@Data public class CannonBlocks> { +@Data public abstract class CannonBlocks> { private Vector rotationCenter; //center off all rotation blocks private Vector muzzle; //center off all muzzle blocks - spawing Vector for snowball From 570f19ada6c77d17aa164239f4c7e7f559a85c7b Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 19:33:21 +0100 Subject: [PATCH 45/97] Add custom implementation of location and vector --- .../container/location/CannonVector.java | 20 +++++++++++++++++++ .../container/location/Coordinate.java | 17 ++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java create mode 100644 api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java diff --git a/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java b/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java new file mode 100644 index 00000000..7e5714b0 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java @@ -0,0 +1,20 @@ +package at.pavlov.internal.container.location; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data public class CannonVector implements Cloneable { + private double x = 0.0, y = 0.0, z = 0.0; + + @Override + public CannonVector clone() { + try { + return (CannonVector) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } +} diff --git a/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java b/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java new file mode 100644 index 00000000..f39b3497 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java @@ -0,0 +1,17 @@ +package at.pavlov.internal.container.location; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.UUID; + +@AllArgsConstructor +@Data public class Coordinate { + private CannonVector vector; + private UUID world; + + public Coordinate(double x, double y, double z, UUID world) { + this.vector = new CannonVector(x, y, z); + this.world = world; + } +} From 8c2bdc1c5361d230ee13ef37dddb07509a2035fa Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 19:34:01 +0100 Subject: [PATCH 46/97] Add documentation --- .../at/pavlov/internal/container/location/CannonVector.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java b/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java index 7e5714b0..381936b3 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java @@ -4,6 +4,9 @@ import lombok.Data; import lombok.NoArgsConstructor; +/** + * Class used to specify a location without needing the specific world + */ @AllArgsConstructor @NoArgsConstructor @Data public class CannonVector implements Cloneable { From 6e53976a9fb1680b8b535f39000335a5c511cfb5 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 20:43:08 +0100 Subject: [PATCH 47/97] Make CannonVector similar to bukkit vector + remove Coordinate.java --- .../at/pavlov/bukkit/factory/VectorUtils.java | 20 ++ .../java/at/pavlov/internal/NumberTricks.java | 32 +++ .../container/location/CannonVector.java | 261 ++++++++++++++++++ .../container/location/Coordinate.java | 17 -- 4 files changed, 313 insertions(+), 17 deletions(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java create mode 100644 api-internal/src/main/java/at/pavlov/internal/NumberTricks.java delete mode 100644 api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java b/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java new file mode 100644 index 00000000..1657aca4 --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java @@ -0,0 +1,20 @@ +package at.pavlov.bukkit.factory; + +import at.pavlov.internal.container.location.CannonVector; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.util.Vector; + +public class VectorUtils { + public static Location toLoc(World world, CannonVector vector) { + return new Location(world, vector.getX(), vector.getY(), vector.getZ()); + } + + public static Vector toBaseVector(CannonVector vector) { + return new Vector(vector.getX(), vector.getY(), vector.getZ()); + } + + public static CannonVector fromBaseVector(Vector vector) { + return new CannonVector(vector.getX(), vector.getY(), vector.getZ()); + } +} diff --git a/api-internal/src/main/java/at/pavlov/internal/NumberTricks.java b/api-internal/src/main/java/at/pavlov/internal/NumberTricks.java new file mode 100644 index 00000000..90a4b2b4 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/NumberTricks.java @@ -0,0 +1,32 @@ +package at.pavlov.internal; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class NumberTricks { + public static int floor(double num) { + int floor = (int)num; + return (double)floor == num ? floor : floor - (int)(Double.doubleToRawLongBits(num) >>> 63); + } + + public static int ceil(double num) { + int floor = (int)num; + return (double)floor == num ? floor : floor + (int)(~Double.doubleToRawLongBits(num) >>> 63); + } + + public static int round(double num) { + return floor(num + 0.5); + } + + public static double square(double num) { + return num * num; + } + + public static double constrainToRange(double value, double min, double max) { + if (min <= max) { + return Math.min(Math.max(value, min), max); + } else { + throw new IllegalArgumentException(String.format("min (%s) must be less than or equal to max (%s)", min, max)); + } + } +} diff --git a/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java b/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java index 381936b3..3da0a48f 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java @@ -1,14 +1,19 @@ package at.pavlov.internal.container.location; +import at.pavlov.internal.NumberTricks; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import org.jetbrains.annotations.NotNull; /** * Class used to specify a location without needing the specific world + * It is a very close copy to bukkit.util.Vector */ @AllArgsConstructor @NoArgsConstructor +@Accessors(chain = true) @Data public class CannonVector implements Cloneable { private double x = 0.0, y = 0.0, z = 0.0; @@ -20,4 +25,260 @@ public CannonVector clone() { throw new AssertionError(); } } + + + @NotNull + public CannonVector add(@NotNull CannonVector vec) { + this.x += vec.x; + this.y += vec.y; + this.z += vec.z; + return this; + } + + @NotNull + public CannonVector subtract(@NotNull CannonVector vec) { + this.x -= vec.x; + this.y -= vec.y; + this.z -= vec.z; + return this; + } + + @NotNull + public CannonVector multiply(@NotNull CannonVector vec) { + this.x *= vec.x; + this.y *= vec.y; + this.z *= vec.z; + return this; + } + + @NotNull + public CannonVector divide(@NotNull CannonVector vec) { + this.x /= vec.x; + this.y /= vec.y; + this.z /= vec.z; + return this; + } + + @NotNull + public CannonVector copy(@NotNull CannonVector vec) { + this.x = vec.x; + this.y = vec.y; + this.z = vec.z; + return this; + } + + public double length() { + return Math.sqrt(NumberTricks.square(this.x) + NumberTricks.square(this.y) + NumberTricks.square(this.z)); + } + + public double lengthSquared() { + return NumberTricks.square(this.x) + NumberTricks.square(this.y) + NumberTricks.square(this.z); + } + + public double distance(@NotNull CannonVector o) { + return Math.sqrt(NumberTricks.square(this.x - o.x) + NumberTricks.square(this.y - o.y) + NumberTricks.square(this.z - o.z)); + } + + public double distanceSquared(@NotNull CannonVector o) { + return NumberTricks.square(this.x - o.x) + NumberTricks.square(this.y - o.y) + NumberTricks.square(this.z - o.z); + } + + public float angle(@NotNull CannonVector other) { + double dot = NumberTricks.constrainToRange(this.dot(other) / (this.length() * other.length()), -1.0, 1.0); + return (float)Math.acos(dot); + } + + @NotNull + public CannonVector midpoint(@NotNull CannonVector other) { + this.x = (this.x + other.x) / 2.0; + this.y = (this.y + other.y) / 2.0; + this.z = (this.z + other.z) / 2.0; + return this; + } + + @NotNull + public CannonVector getMidpoint(@NotNull CannonVector other) { + double x = (this.x + other.x) / 2.0; + double y = (this.y + other.y) / 2.0; + double z = (this.z + other.z) / 2.0; + return new CannonVector(x, y, z); + } + + @NotNull + public CannonVector multiply(int m) { + this.x *= (double)m; + this.y *= (double)m; + this.z *= (double)m; + return this; + } + + @NotNull + public CannonVector multiply(double m) { + this.x *= m; + this.y *= m; + this.z *= m; + return this; + } + + @NotNull + public CannonVector multiply(float m) { + this.x *= (double)m; + this.y *= (double)m; + this.z *= (double)m; + return this; + } + + public double dot(@NotNull CannonVector other) { + return this.x * other.x + this.y * other.y + this.z * other.z; + } + + @NotNull + public CannonVector crossProduct(@NotNull CannonVector o) { + double newX = this.y * o.z - o.y * this.z; + double newY = this.z * o.x - o.z * this.x; + double newZ = this.x * o.y - o.x * this.y; + this.x = newX; + this.y = newY; + this.z = newZ; + return this; + } + + @NotNull + public CannonVector getCrossProduct(@NotNull CannonVector o) { + double x = this.y * o.z - o.y * this.z; + double y = this.z * o.x - o.z * this.x; + double z = this.x * o.y - o.x * this.y; + return new CannonVector(x, y, z); + } + + @NotNull + public CannonVector normalize() { + double length = this.length(); + this.x /= length; + this.y /= length; + this.z /= length; + return this; + } + + @NotNull + public CannonVector zero() { + this.x = 0.0; + this.y = 0.0; + this.z = 0.0; + return this; + } + + public boolean isZero() { + return this.x == 0.0 && this.y == 0.0 && this.z == 0.0; + } + + @NotNull + CannonVector normalizeZeros() { + if (this.x == -0.0) { + this.x = 0.0; + } + + if (this.y == -0.0) { + this.y = 0.0; + } + + if (this.z == -0.0) { + this.z = 0.0; + } + + return this; + } + + public boolean isInAABB(@NotNull CannonVector min, @NotNull CannonVector max) { + return this.x >= min.x && this.x <= max.x && this.y >= min.y && this.y <= max.y && this.z >= min.z && this.z <= max.z; + } + + public boolean isInSphere(@NotNull CannonVector origin, double radius) { + return NumberTricks.square(origin.x - this.x) + NumberTricks.square(origin.y - this.y) + NumberTricks.square(origin.z - this.z) <= NumberTricks.square(radius); + } + + public boolean isNormalized() { + return Math.abs(this.lengthSquared() - 1.0) < getEpsilon(); + } + + public static double getEpsilon() { + return 1.0E-6; + } + + @NotNull + public CannonVector rotateAroundX(double angle) { + double angleCos = Math.cos(angle); + double angleSin = Math.sin(angle); + double y = angleCos * this.getY() - angleSin * this.getZ(); + double z = angleSin * this.getY() + angleCos * this.getZ(); + return this.setY(y).setZ(z); + } + + @NotNull + public CannonVector rotateAroundY(double angle) { + double angleCos = Math.cos(angle); + double angleSin = Math.sin(angle); + double x = angleCos * this.getX() + angleSin * this.getZ(); + double z = -angleSin * this.getX() + angleCos * this.getZ(); + return this.setX(x).setZ(z); + } + + @NotNull + public CannonVector rotateAroundZ(double angle) { + double angleCos = Math.cos(angle); + double angleSin = Math.sin(angle); + double x = angleCos * this.getX() - angleSin * this.getY(); + double y = angleSin * this.getX() + angleCos * this.getY(); + return this.setX(x).setY(y); + } + + @NotNull + public CannonVector rotateAroundAxis(@NotNull CannonVector axis, double angle) throws IllegalArgumentException { + return this.rotateAroundNonUnitAxis(axis.isNormalized() ? axis : axis.clone().normalize(), angle); + } + + @NotNull + public CannonVector rotateAroundNonUnitAxis(@NotNull CannonVector axis, double angle) throws IllegalArgumentException { + double x = this.getX(); + double y = this.getY(); + double z = this.getZ(); + double x2 = axis.getX(); + double y2 = axis.getY(); + double z2 = axis.getZ(); + double cosTheta = Math.cos(angle); + double sinTheta = Math.sin(angle); + double dotProduct = this.dot(axis); + double xPrime = x2 * dotProduct * (1.0 - cosTheta) + x * cosTheta + (-z2 * y + y2 * z) * sinTheta; + double yPrime = y2 * dotProduct * (1.0 - cosTheta) + y * cosTheta + (z2 * x - x2 * z) * sinTheta; + double zPrime = z2 * dotProduct * (1.0 - cosTheta) + z * cosTheta + (-y2 * x + x2 * y) * sinTheta; + return this.setX(xPrime).setY(yPrime).setZ(zPrime); + } + + public int getBlockX() { + return NumberTricks.floor(this.x); + } + + public int getBlockY() { + return NumberTricks.floor(this.y); + } + + public int getBlockZ() { + return NumberTricks.floor(this.z); + } + + public boolean equals(Object obj) { + if (!(obj instanceof CannonVector other)) { + return false; + } else { + return Math.abs(this.x - other.x) < 1.0E-6 && Math.abs(this.y - other.y) < 1.0E-6 && Math.abs(this.z - other.z) < 1.0E-6 && this.getClass().equals(obj.getClass()); + } + } + + public int hashCode() { + int hash = 7; + hash = 79 * hash + Long.hashCode(Double.doubleToLongBits(this.x)); + hash = 79 * hash + Long.hashCode(Double.doubleToLongBits(this.y)); + hash = 79 * hash + Long.hashCode(Double.doubleToLongBits(this.z)); + return hash; + } } diff --git a/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java b/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java deleted file mode 100644 index f39b3497..00000000 --- a/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java +++ /dev/null @@ -1,17 +0,0 @@ -package at.pavlov.internal.container.location; - -import lombok.AllArgsConstructor; -import lombok.Data; - -import java.util.UUID; - -@AllArgsConstructor -@Data public class Coordinate { - private CannonVector vector; - private UUID world; - - public Coordinate(double x, double y, double z, UUID world) { - this.vector = new CannonVector(x, y, z); - this.world = world; - } -} From a9cc75107f7f20c3f6ff68ea4a0ed11902aab202 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 20:43:16 +0100 Subject: [PATCH 48/97] Apply changes --- .../pavlov/bukkit/cannons/CannonDesign.java | 55 ++++++++++++------- .../holders/CannonPositionHBukkit.java | 5 +- .../pavlov/bukkit/container/BukkitBlock.java | 21 ++++--- .../bukkit/container/BukkitCannonBlocks.java | 3 +- .../internal/cannons/data/CannonPosition.java | 7 ++- .../functionalities/CannonDataHolder.java | 4 +- .../cannons/functionalities/Rotational.java | 11 ++-- .../cannons/holders/CannonPositionHolder.java | 17 +++--- .../internal/container/CannonBlocks.java | 37 +++++++------ .../main/java/at/pavlov/cannons/Aiming.java | 32 +++++------ .../java/at/pavlov/cannons/FireCannon.java | 6 +- .../java/at/pavlov/cannons/cannon/Cannon.java | 27 ++++----- .../pavlov/cannons/cannon/CannonManager.java | 6 +- .../pavlov/cannons/cannon/DesignStorage.java | 55 ++++++++++--------- .../at/pavlov/cannons/commands/Commands.java | 5 +- .../cannons/container/MovingObject.java | 11 ++++ .../at/pavlov/cannons/container/Target.java | 3 +- .../at/pavlov/cannons/dao/LoadCannonTask.java | 3 +- .../movecraft/listener/RotationListener.java | 4 +- .../listener/TranslationListener.java | 3 +- .../at/pavlov/cannons/utils/CannonsUtil.java | 5 +- 21 files changed, 184 insertions(+), 136 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index 8c2a4e16..95bf5527 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -4,8 +4,10 @@ import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitBlock; +import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.internal.CannonLogger; +import at.pavlov.internal.container.location.CannonVector; import lombok.Data; import org.bukkit.Location; import org.bukkit.Material; @@ -201,11 +203,12 @@ public Location getRotationCenter(CannonBukkit cannon) BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); if (cannonBlocks != null) { - return cannonBlocks.getRotationCenter().clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit()); + CannonVector vector = cannonBlocks.getRotationCenter().clone().add(cannon.getOffset()); + return VectorUtils.toLoc(cannon.getWorldBukkit(), vector); } CannonLogger.getLogger().info("missing rotation center for cannon design " + cannon.getCannonName()); - return cannon.getOffset().toLocation(cannon.getWorldBukkit()); + return VectorUtils.toLoc(cannon.getWorldBukkit(), cannon.getOffset()); } @@ -217,11 +220,12 @@ public Location getMuzzle(CannonBukkit cannon) BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); if (cannonBlocks != null) { - return cannonBlocks.getMuzzle().clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit()); + CannonVector vector = cannonBlocks.getMuzzle().clone().add(cannon.getOffset()); + return VectorUtils.toLoc(cannon.getWorldBukkit(), vector); } CannonLogger.getLogger().info("missing muzzle location for cannon design " + cannon.getCannonName()); - return cannon.getOffset().toLocation(cannon.getWorldBukkit()); + return VectorUtils.toLoc(cannon.getWorldBukkit(), cannon.getOffset()); } /** @@ -234,7 +238,8 @@ public Location getFiringTrigger(CannonBukkit cannon) BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); if (cannonBlocks != null && cannonBlocks.getFiringTrigger() != null) { - return cannonBlocks.getFiringTrigger().clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit()); + CannonVector vector = cannonBlocks.getFiringTrigger().clone().add(cannon.getOffset()); + return VectorUtils.toLoc(cannon.getWorldBukkit(), vector); } return null; } @@ -267,8 +272,9 @@ public List getAllCannonBlocks(CannonBukkit cannon) { for (BukkitBlock block : cannonBlocks.getAllCannonBlocks()) { - Vector vect = block.toVector(); - locList.add(vect.clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit())); + CannonVector vect = block.toVector(); + CannonVector calc = vect.clone().add(cannon.getOffset()); + locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), calc)); } } return locList; @@ -283,9 +289,10 @@ public List getDestructibleBlocks(CannonBukkit cannon) List locList = new ArrayList<>(); if (cannonBlocks != null) { - for (Vector vect : cannonBlocks.getDestructibleBlocks()) + for (CannonVector vect : cannonBlocks.getDestructibleBlocks()) { - locList.add(vect.clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit())); + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); } } return locList; @@ -301,9 +308,10 @@ public List getFiringIndicator(CannonBukkit cannon) List locList = new ArrayList<>(); if (cannonBlocks != null) { - for (Vector vect : cannonBlocks.getFiringIndicator()) + for (CannonVector vect : cannonBlocks.getFiringIndicator()) { - locList.add(vect.clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit())); + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); } } return locList; @@ -318,9 +326,10 @@ public List getLoadingInterface(CannonBukkit cannon) List locList = new ArrayList<>(); if (cannonBlocks != null) { - for (Vector vect : cannonBlocks.getBarrelBlocks()) + for (CannonVector vect : cannonBlocks.getBarrelBlocks()) { - locList.add(vect.clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit())); + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); } } return locList; @@ -335,9 +344,10 @@ public List getBarrelBlocks(CannonBukkit cannon) List locList = new ArrayList<>(); if (cannonBlocks != null) { - for (Vector vect : cannonBlocks.getBarrelBlocks()) + for (CannonVector vect : cannonBlocks.getBarrelBlocks()) { - locList.add(vect.clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit())); + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); } } return locList; @@ -352,9 +362,10 @@ public List getRightClickTrigger(CannonBukkit cannon) List locList = new ArrayList<>(); if (cannonBlocks != null) { - for (Vector vect : cannonBlocks.getRightClickTrigger()) + for (CannonVector vect : cannonBlocks.getRightClickTrigger()) { - locList.add(vect.clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit())); + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); } } return locList; @@ -369,9 +380,10 @@ public List getRedstoneTrigger(CannonBukkit cannon) List locList = new ArrayList<>(); if (cannonBlocks != null) { - for (Vector vect : cannonBlocks.getRedstoneTrigger()) + for (CannonVector vect : cannonBlocks.getRedstoneTrigger()) { - locList.add(vect.clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit())); + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); } } return locList; @@ -404,9 +416,10 @@ public List getRedstoneTorches(CannonBukkit cannon) List locList = new ArrayList<>(); if (cannonBlocks != null) { - for (Vector vect : cannonBlocks.getRedstoneTorches()) + for (CannonVector vect : cannonBlocks.getRedstoneTorches()) { - locList.add(vect.clone().add(cannon.getOffset()).toLocation(cannon.getWorldBukkit())); + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); } } return locList; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java index 6e99879b..4b41dc09 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java @@ -1,13 +1,14 @@ package at.pavlov.bukkit.cannons.holders; import at.pavlov.internal.cannons.holders.CannonPositionHolder; +import at.pavlov.internal.container.location.CannonVector; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.BlockFace; import org.bukkit.util.Vector; -public interface CannonPositionHBukkit extends CannonPositionHolder { +public interface CannonPositionHBukkit extends CannonPositionHolder { /** * @return bukkit world from saved UUID @@ -23,7 +24,7 @@ default World getWorldBukkit() { // return new Location(bukkitWorld, ) } - default void move(Vector moved) { + default void move(CannonVector moved) { getOffset().add(moved); this.hasUpdated(); } diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java index f6e8ca39..eb24ccc6 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java @@ -2,6 +2,7 @@ import at.pavlov.internal.container.SimpleBlock; +import at.pavlov.internal.container.location.CannonVector; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; @@ -24,6 +25,10 @@ public Function directionalCheck() { return Directional.class::isInstance; } + public BukkitBlock(CannonVector vect, BlockData blockData) { + this(vect.getBlockX(), vect.getBlockY(), vect.getBlockZ(), blockData); + } + public BukkitBlock(Vector vect, BlockData blockData) { this(vect.getBlockX(), vect.getBlockY(), vect.getBlockZ(), blockData); } @@ -32,7 +37,7 @@ public BukkitBlock(int x, int y, int z, Material material) { this(x, y, z, material.createBlockData()); } - private BukkitBlock(Vector vect, Material material) { + private BukkitBlock(CannonVector vect, Material material) { this(vect, material.createBlockData()); } @@ -47,7 +52,7 @@ public BukkitBlock(Location loc, Material material) { * @param world bukkit world * @return location of the block */ - public Location toLocation(World world, Vector offset) { + public Location toLocation(World world, CannonVector offset) { return new Location(world, locX + offset.getBlockX(), locY + offset.getBlockY(), locZ + offset.getBlockZ()); } @@ -59,7 +64,7 @@ public Location toLocation(World world, Vector offset) { * @param offset the offset of the cannon * @return true if both block match */ - public boolean compareMaterialAndLoc(Block block, Vector offset) { + public boolean compareMaterialAndLoc(Block block, CannonVector offset) { if (!toVector().add(offset).equals(block.getLocation().toVector())) { return false; } @@ -102,7 +107,7 @@ public boolean compareMaterialAndFacing(BlockData blockData) { * @param offset the locations in x,y,z * @return true if both block are equal in data and facing */ - public boolean compareMaterialAndFacing(World world, Vector offset) { + public boolean compareMaterialAndFacing(World world, CannonVector offset) { Block block = toLocation(world, offset).getBlock(); return compareMaterialAndFacing(block.getBlockData()); } @@ -133,7 +138,7 @@ public BukkitBlock add(Location loc) { * @param vect offset vector * @return a new block with a shifted location */ - public BukkitBlock add(Vector vect) { + public BukkitBlock add(CannonVector vect) { return new BukkitBlock(toVector().add(vect), this.blockData); } @@ -152,7 +157,7 @@ public BukkitBlock subtract(Vector vect) { * * @param vect vector to subtract */ - public void subtract_noCopy(Vector vect) { + public void subtract_noCopy(CannonVector vect) { locX -= vect.getBlockX(); locY -= vect.getBlockY(); locZ -= vect.getBlockZ(); @@ -192,8 +197,8 @@ public void rotate90() { /** * SimpleBlock to Vector */ - public Vector toVector() { - return new Vector(locX, locY, locZ); + public CannonVector toVector() { + return new CannonVector(locX, locY, locZ); } public static BlockData rotateBlockFacingClockwise(BlockData blockData) { diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java index 49ecd3fe..4dc055a5 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java @@ -1,12 +1,11 @@ package at.pavlov.bukkit.container; import at.pavlov.internal.container.CannonBlocks; -import org.bukkit.util.Vector; /** * This class is used internally to keep track of some blocks, * it is not suggested to create new instances of it but instead * use it to get the positions of the various stuff */ -public class BukkitCannonBlocks extends CannonBlocks { +public class BukkitCannonBlocks extends CannonBlocks { } \ No newline at end of file diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonPosition.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonPosition.java index d806b541..c7423d58 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonPosition.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonPosition.java @@ -1,5 +1,6 @@ package at.pavlov.internal.cannons.data; +import at.pavlov.internal.container.location.CannonVector; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -8,15 +9,15 @@ @NoArgsConstructor @AllArgsConstructor -@Data public class CannonPosition { +@Data public class CannonPosition { // direction the cannon is facing private Direction cannonDirection; // the location is described by the offset of the cannon and the design - private Vector offset; + private CannonVector offset; // world of the cannon private UUID world; // if the cannon is on a ship, the operation might be limited (e.g smaller angles to adjust the cannon) private boolean onShip; // with which velocity the canno is moving (set by other plugins) - private Vector velocity; + private CannonVector velocity; } diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java index 9243845a..ff58cd35 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java @@ -11,11 +11,11 @@ import at.pavlov.internal.cannons.holders.SentryDataHolder; import at.pavlov.internal.cannons.holders.WhitelistDataHolder; -public interface CannonDataHolder extends +public interface CannonDataHolder extends FiringDataHolder, AimingDataHolder, SentryDataHolder, - CannonPositionHolder, + CannonPositionHolder

, AmmoLoadingDataHolder, WhitelistDataHolder, CannonMainDataHolder, diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/Rotational.java b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/Rotational.java index 120783cc..9270ae84 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/Rotational.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/Rotational.java @@ -1,16 +1,17 @@ package at.pavlov.internal.cannons.functionalities; +import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.CannonRotation; -public interface Rotational { +public interface Rotational { - void rotate(Vector center, CannonRotation rotation); + void rotate(CannonVector center, CannonRotation rotation); /** * updates the rotation of the cannon by rotating it 90 to the right * * @param center - center of the rotation */ - default void rotateRight(Vector center) { + default void rotateRight(CannonVector center) { this.rotate(center, CannonRotation.RIGHT); } @@ -19,7 +20,7 @@ default void rotateRight(Vector center) { * * @param center - center of the rotation */ - default void rotateLeft(Vector center) { + default void rotateLeft(CannonVector center) { this.rotate(center, CannonRotation.LEFT); } @@ -28,7 +29,7 @@ default void rotateLeft(Vector center) { * * @param center - center of the rotation */ - default void rotateFlip(Vector center) { + default void rotateFlip(CannonVector center) { this.rotate(center, CannonRotation.FLIP); } } diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java index 4555652f..dac7682f 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java @@ -2,19 +2,20 @@ import at.pavlov.internal.cannons.data.CannonPosition; import at.pavlov.internal.cannons.functionalities.Updatable; +import at.pavlov.internal.container.location.CannonVector; import java.util.UUID; -public interface CannonPositionHolder extends Updatable { +public interface CannonPositionHolder extends Updatable { - CannonPosition getCannonPosition(); - void setCannonPosition(CannonPosition position); + CannonPosition getCannonPosition(); + void setCannonPosition(CannonPosition position); - default Vector getVelocity() { + default CannonVector getVelocity() { return getCannonPosition().getVelocity(); } - default void setVelocity(Vector velocity) { + default void setVelocity(CannonVector velocity) { getCannonPosition().setVelocity(velocity); } @@ -27,11 +28,11 @@ default void setOnShip(boolean onShip) { this.hasUpdated(); } - default Vector getOffset() { + default CannonVector getOffset() { return getCannonPosition().getOffset(); } - default void setOffset(Vector offset) { + default void setOffset(CannonVector offset) { getCannonPosition().setOffset(offset); this.hasUpdated(); } @@ -59,5 +60,5 @@ default void setWorld(UUID world) { * * @param moved - how far the cannon has been moved */ - void move(Vector moved); + void move(CannonVector moved); } diff --git a/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java b/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java index 358b0211..7f999295 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java @@ -1,5 +1,6 @@ package at.pavlov.internal.container; +import at.pavlov.internal.container.location.CannonVector; import lombok.Data; import java.util.ArrayList; @@ -9,25 +10,25 @@ * it is not suggested to create new instances of it but instead * use it to get the positions of the various stuff */ -@Data public abstract class CannonBlocks> { - private Vector rotationCenter; //center off all rotation blocks - private Vector muzzle; //center off all muzzle blocks - spawing Vector for snowball +@Data public abstract class CannonBlocks> { + private CannonVector rotationCenter; //center off all rotation blocks + private CannonVector muzzle; //center off all muzzle blocks - spawing CannonVector for snowball private ArrayList allCannonBlocks = new ArrayList<>(); - private ArrayList barrelBlocks = new ArrayList<>(); + private ArrayList barrelBlocks = new ArrayList<>(); private ArrayList chestsAndSigns = new ArrayList<>(); - private ArrayList redstoneTorches = new ArrayList<>(); + private ArrayList redstoneTorches = new ArrayList<>(); private ArrayList redstoneWiresAndRepeater = new ArrayList<>(); - private ArrayList redstoneTrigger = new ArrayList<>(); - private ArrayList rightClickTrigger = new ArrayList<>(); - private ArrayList firingIndicator = new ArrayList<>(); - private ArrayList destructibleBlocks = new ArrayList<>(); + private ArrayList redstoneTrigger = new ArrayList<>(); + private ArrayList rightClickTrigger = new ArrayList<>(); + private ArrayList firingIndicator = new ArrayList<>(); + private ArrayList destructibleBlocks = new ArrayList<>(); /** * returns true if this block is part of the loading interface */ - public boolean isLoadingInterface(Vector loc) { - for (Vector loadingBlock : barrelBlocks) { + public boolean isLoadingInterface(CannonVector loc) { + for (CannonVector loadingBlock : barrelBlocks) { if (loc.equals(loadingBlock)) { return true; } @@ -39,7 +40,7 @@ public boolean isLoadingInterface(Vector loc) { * returns the location off one firing Trigger * @return the firing trigger. (can be null if there is no trigger on the cannon) */ - public Vector getFiringTrigger() { + public CannonVector getFiringTrigger() { //return one tigger if (rightClickTrigger!= null && !rightClickTrigger.isEmpty()) return rightClickTrigger.get(0); @@ -52,19 +53,19 @@ public void addAllCannonBlocks(Block add) { this.allCannonBlocks.add(add); } - public void addBarrelBlocks(Vector add) { + public void addBarrelBlocks(CannonVector add) { this.barrelBlocks.add(add); } - public void addRedstoneTorch(Vector add) { + public void addRedstoneTorch(CannonVector add) { this.redstoneTorches.add(add); } - public void addRedstoneTrigger(Vector add) { + public void addRedstoneTrigger(CannonVector add) { this.redstoneTrigger.add(add); } - public void addRightClickTrigger(Vector add) { + public void addRightClickTrigger(CannonVector add) { this.rightClickTrigger.add(add); } @@ -76,11 +77,11 @@ public void addRedstoneWiresAndRepeater(Block add) { this.redstoneWiresAndRepeater.add(add); } - public void addFiringIndicator(Vector add) { + public void addFiringIndicator(CannonVector add) { this.firingIndicator.add(add); } - public void addDestructibleBlocks(Vector add) { + public void addDestructibleBlocks(CannonVector add) { this.destructibleBlocks.add(add); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index 5a407a97..2c69ac64 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -1,5 +1,7 @@ package at.pavlov.cannons; +import at.pavlov.bukkit.factory.VectorUtils; +import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.FakeBlockType; import at.pavlov.internal.enums.InteractAction; import at.pavlov.internal.enums.MessageEnum; @@ -603,13 +605,13 @@ private boolean isOldTargetValid(Cannon cannon, HashMap targets) { if (System.currentTimeMillis() > cannon.getSentryTargetingTime() + design.getSentrySwapTime() || !targets.containsKey(cannon.getSentryEntity())) { cannon.setSentryEntity(null); - } else if (!canFindTargetSolution(cannon, target, target.centerLocation(), target.velocity())) { //is the previous target still valid + } else if (!canFindTargetSolution(cannon, target, target.centerLocation())) { //is the previous target still valid cannon.setSentryEntity(null); } //find target solution // find exact solution for the cannon - if (!calculateTargetSolution(cannon, target, target.velocity(), true)) {//no exact solution found for this target. So skip it and try it again in the next run + if (!calculateTargetSolution(cannon, target, true)) {//no exact solution found for this target. So skip it and try it again in the next run cannon.setSentryEntity(null); return true; } @@ -649,7 +651,7 @@ private void calculateFiringSolution(Cannon cannon) { for (Target t : targets.values()) { switch (t.targetType()) { case MONSTER -> { - if (cannon.isTargetMob() && canFindTargetSolution(cannon, t, t.centerLocation(), t.velocity())) { + if (cannon.isTargetMob() && canFindTargetSolution(cannon, t, t.centerLocation())) { possibleTargets.add(t); } } @@ -664,7 +666,7 @@ private void calculateFiringSolution(Cannon cannon) { continue; // get solution - if (canFindTargetSolution(cannon, t, t.centerLocation(), t.velocity())) { + if (canFindTargetSolution(cannon, t, t.centerLocation())) { possibleTargets.add(t); } } @@ -684,7 +686,7 @@ private void calculateFiringSolution(Cannon cannon) { if (scoreboardCheck(p, cannon)) continue; - if (canFindTargetSolution(cannon, t, t.centerLocation(), t.velocity())) { + if (canFindTargetSolution(cannon, t, t.centerLocation())) { possibleTargets.add(t); } } @@ -704,7 +706,7 @@ private void calculateFiringSolution(Cannon cannon) { if (scoreboardCheck(p, cannon)) continue; - if (canFindTargetSolution(cannon, t, t.centerLocation(), t.velocity())) { + if (canFindTargetSolution(cannon, t, t.centerLocation())) { possibleTargets.add(t); } } @@ -739,10 +741,9 @@ private void calculateFiringSolution(Cannon cannon) { * * @param cannon the cannon which is operated * @param loctarget lcoation of the target - * @param targetVelocity how fast the target is moving * @return true if the cannon can fire on this target */ - private boolean canFindTargetSolution(Cannon cannon, Target target, Location loctarget, Vector targetVelocity) { + private boolean canFindTargetSolution(Cannon cannon, Target target, Location loctarget) { if (!cannon.getWorld().equals(loctarget.getWorld().getUID())) return false; @@ -786,16 +787,15 @@ private boolean canFindTargetSolution(Cannon cannon, Target target, Location loc * * @param cannon the cannon which is operated * @param target lcoation of the target - * @param targetVelocity how fast the target is moving * @return true if a solution was found */ - private boolean calculateTargetSolution(Cannon cannon, Target target, Vector targetVelocity, boolean addSpread) { + private boolean calculateTargetSolution(Cannon cannon, Target target, boolean addSpread) { Location targetLoc = target.centerLocation(); //aim for the center of the target if there is an area effect of the projectile if (cannon.getLoadedProjectile() != null && (cannon.getLoadedProjectile().getExplosionPower() > 2. || (cannon.getLoadedProjectile().getPlayerDamage() > 1. && cannon.getLoadedProjectile().getPlayerDamageRange() > 2.))) targetLoc = target.groundLocation(); - if (!canFindTargetSolution(cannon, target, target.centerLocation(), targetVelocity)) + if (!canFindTargetSolution(cannon, target, target.centerLocation())) return false; if (cannon.getCannonballVelocity() < 0.01) @@ -817,7 +817,7 @@ private boolean calculateTargetSolution(Cannon cannon, Target target, Vector tar cannon.setAimingPitch(cannon.getAimingPitch() - sign * step); for (int i = 0; i < 100; i++) { - Vector fvector = CannonsUtil.directionToVector(cannon.getAimingYaw(), cannon.getAimingPitch(), cannon.getCannonballVelocity()); + CannonVector fvector = CannonsUtil.directionToVector(cannon.getAimingYaw(), cannon.getAimingPitch(), cannon.getCannonballVelocity()); double diffY = simulateShot(fvector, cannon.getMuzzle(), targetLoc, cannon.getProjectileEntityType(), maxInterations); if (!cannon.getCannonDesign().isSentryIndirectFire() && Math.abs(diffY) > 1000.0) { @@ -867,7 +867,7 @@ private boolean calculateTargetSolution(Cannon cannon, Target target, Vector tar */ private boolean verifyTargetSolution(Cannon cannon, Target target, double maxdistance) { Location muzzle = cannon.getMuzzle(); - Vector vel = cannon.getTargetVector(); + CannonVector vel = cannon.getTargetVector(); MovingObject predictor = new MovingObject(muzzle, vel, cannon.getProjectileEntityType()); Vector start = muzzle.toVector(); @@ -905,7 +905,7 @@ private boolean verifyTargetSolution(Cannon cannon, Target target, double maxdis * @param target target for the cannonball * @return distance how much above/below the projectile will hit */ - private double simulateShot(Vector vector, Location muzzle, Location target, EntityType projectileType, int maxInterations) { + private double simulateShot(CannonVector vector, Location muzzle, Location target, EntityType projectileType, int maxInterations) { MovingObject cannonball = new MovingObject(muzzle, vector, projectileType); double target_distance_squared = Math.pow(target.getX() - muzzle.getX(), 2) + Math.pow(target.getZ() - muzzle.getZ(), 2); @@ -1170,7 +1170,7 @@ public void showAimingVector(Cannon cannon, Player player) { // Imitation of angle if (config.isImitatedAimingEnabled() && isImitatingEnabled(player.getUniqueId())) { - FakeBlockHandler.getInstance().imitateLine(player, cannon.getMuzzle(), cannon.getAimingVector(), 0, + FakeBlockHandler.getInstance().imitateLine(player, cannon.getMuzzle(), VectorUtils.toBaseVector(cannon.getAimingVector()), 0, config.getImitatedAimingLineLength(), config.getImitatedAimingMaterial(), FakeBlockType.AIMING, config.getImitatedAimingTime()); } } @@ -1251,7 +1251,7 @@ public Location impactPredictor(Cannon cannon) { return null; Location muzzle = cannon.getMuzzle(); - Vector vel = cannon.getFiringVector(false, false); + CannonVector vel = cannon.getFiringVector(false, false); MovingObject predictor = new MovingObject(muzzle, vel, cannon.getProjectileEntityType()); Vector start = muzzle.toVector(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index e1d20aff..3efb3c1f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -1,6 +1,8 @@ package at.pavlov.cannons; +import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.internal.enums.BreakCause; import at.pavlov.internal.enums.FakeBlockType; @@ -359,7 +361,7 @@ private void fireTask(Cannon cannon, UUID shooter, boolean removeCharge, Project playerLoc = onlinePlayer.getLocation(); } - Vector vect = cannon.getFiringVector(true, true); + Vector vect = VectorUtils.toBaseVector(cannon.getFiringVector(true, true)); org.bukkit.entity.Projectile projectileEntity = ProjectileManager.getInstance().spawnProjectile(projectile, shooter, source, playerLoc, firingLoc, vect, cannon.getUID(), projectileCause); @@ -440,7 +442,7 @@ public void imitateSmoke(Cannon cannon, List players) { if (!config.isImitatedFiringEffectEnabled()) return; - Vector aimingVector = cannon.getAimingVector().clone(); + Vector aimingVector = VectorUtils.toBaseVector(cannon.getAimingVector().clone()); Location loc = cannon.getMuzzle(); double duration = config.getImitatedFiringTime(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index 6809a27c..83d7ee47 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -8,6 +8,7 @@ import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.projectile.Projectile; import at.pavlov.cannons.Cannons; +import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.BreakCause; import at.pavlov.internal.enums.CannonRotation; import at.pavlov.internal.enums.InteractAction; @@ -56,10 +57,10 @@ import java.util.Random; import java.util.UUID; -public class Cannon implements CannonBukkit, CannonDesignHolder, Rotational { +public class Cannon implements CannonBukkit, CannonDesignHolder, Rotational { private CannonMainData mainData; - private CannonPosition cannonPosition; + private CannonPosition cannonPosition; private AmmoLoadingData ammoLoadingData = new AmmoLoadingData<>(); private FiringData firingData = new FiringData<>(); @@ -84,13 +85,13 @@ public class Cannon implements CannonBukkit, CannonDesignHolder, Rotational(cannonDirection, cannonOffset, world, false, noVelocity.clone()); boolean feePresent = design.getEconomyBuildingCost() <= 0; this.mainData = new CannonMainData( UUID.randomUUID(),null, feePresent, owner, true); @@ -1034,18 +1035,18 @@ private void removeRedstone() { * @param rotation - how far the cannon is rotated in degree (90, 180, 270, -90) */ @Override - public void rotate(Vector center, CannonRotation rotation) { + public void rotate(CannonVector center, CannonRotation rotation) { int angle = rotation.getAngle(); double dAngle = angle * Math.PI / 180; - center = new Vector(center.getBlockX(), center.getBlockY(), center.getBlockZ()); + center = new CannonVector(center.getBlockX(), center.getBlockY(), center.getBlockZ()); - Vector diffToCenter = getOffset().clone().subtract(center); + CannonVector diffToCenter = getOffset().clone().subtract(center); double newX = diffToCenter.getX() * Math.cos(dAngle) - diffToCenter.getZ() * Math.sin(dAngle); double newZ = diffToCenter.getX() * Math.sin(dAngle) + diffToCenter.getZ() * Math.cos(dAngle); - setOffset(new Vector(Math.round(center.getX() + newX), getOffset().getBlockY(), Math.round(center.getZ() + newZ))); + setOffset(new CannonVector(Math.round(center.getX() + newX), getOffset().getBlockY(), Math.round(center.getZ() + newZ))); //rotate blockface if (angle > 0) { @@ -1177,7 +1178,7 @@ public boolean coolCannon(Player player, Location effectLoc) { * @param usePlayerSpread if additional spread of the player will be added * @return firing vector */ - public Vector getFiringVector(boolean addSpread, boolean usePlayerSpread) { + public CannonVector getFiringVector(boolean addSpread, boolean usePlayerSpread) { if (firingData.getLastFiredProjectile() == null && ammoLoadingData.getLoadedProjectile() == null) return noVelocity.clone(); Projectile projectile = ammoLoadingData.getLoadedProjectile(); @@ -1213,7 +1214,7 @@ public Vector getFiringVector(boolean addSpread, boolean usePlayerSpread) { * * @return vector the cannon is aiming */ - public Vector getAimingVector() { + public CannonVector getAimingVector() { double multi = Math.max(getCannonballVelocity(), 0.1); return CannonsUtil.directionToVector(getTotalHorizontalAngle() + CannonsUtil.directionToYaw(getCannonDirection()), -getTotalVerticalAngle(), multi); } @@ -1223,7 +1224,7 @@ public Vector getAimingVector() { * * @return targeting vector */ - public Vector getTargetVector() { + public CannonVector getTargetVector() { double multi = Math.max(getCannonballVelocity(), 0.1); return CannonsUtil.directionToVector(getAimingYaw(), getAimingPitch(), multi); } @@ -1801,7 +1802,7 @@ public CannonPosition getCannonPosition() { } @Override - public void setCannonPosition(CannonPosition position) { + public void setCannonPosition(CannonPosition position) { this.hasUpdated(); this.cannonPosition = position; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 8edc9555..498fece7 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -3,9 +3,11 @@ import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitBlock; +import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.projectile.ProjectileStorage; +import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.BreakCause; import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.config.Config; @@ -488,7 +490,7 @@ public static Cannon getCannon(String cannonName) { private Cannon getCannonFromStorage(Location loc) { for (Cannon cannon : cannonList.values()) { //To make code faster on servers with a lot of cannons we check the distance squared - if (loc.toVector().distanceSquared(cannon.getOffset()) <= 1024 && cannon.isCannonBlock(loc.getBlock())) { + if (loc.toVector().distanceSquared(VectorUtils.toBaseVector(cannon.getOffset())) <= 1024 && cannon.isCannonBlock(loc.getBlock())) { return cannon; } } @@ -667,7 +669,7 @@ private Cannon checkCannon(Location cannonBlock, UUID owner) { } // this block is same as in the design, get the offset - Vector offset = designBlock.subtractInverted(cannonBlock).toVector(); + CannonVector offset = designBlock.subtractInverted(cannonBlock).toVector(); // check all other blocks of the cannon boolean isCannon = true; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index 960579b4..d91f7853 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -10,6 +10,7 @@ import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.DesignComparator; import at.pavlov.cannons.utils.ParseUtils; +import at.pavlov.internal.container.location.CannonVector; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; @@ -440,16 +441,16 @@ private boolean loadDesignSchematic(CannonDesign cannonDesign, String schematicF // to set the muzzle location the maximum and mininum x, y, z values // of all muzzle blocks have to be found - Vector minMuzzle = new Vector(0, 0, 0); - Vector maxMuzzle = new Vector(0, 0, 0); + CannonVector minMuzzle = new CannonVector(0, 0, 0); + CannonVector maxMuzzle = new CannonVector(0, 0, 0); boolean firstEntryMuzzle = true; // to set the rotation Center maximum and mininum x, y, z values // of all rotation blocks have to be found // setting max to the size of the marked area is a good approximation // if no rotationblock is given - Vector minRotation = new Vector(0, 0, 0); - Vector maxRotation = new Vector(width, height, length); + CannonVector minRotation = new CannonVector(0, 0, 0); + CannonVector maxRotation = new CannonVector(width, height, length); boolean firstEntryRotation = true; for (BukkitBlock sblock : schematicList) { @@ -464,8 +465,8 @@ private boolean loadDesignSchematic(CannonDesign cannonDesign, String schematicF // reset for the first entry if (firstEntryMuzzle) { firstEntryMuzzle = false; - minMuzzle = new Vector(x, y, z); - maxMuzzle = new Vector(x, y, z); + minMuzzle = new CannonVector(x, y, z); + maxMuzzle = new CannonVector(x, y, z); } else { setMinimum(x, y, z, minMuzzle); setMaximum(x, y, z, maxMuzzle); @@ -478,8 +479,8 @@ else if (sblock.compareMaterial(blockRotationCenter)) { // reset for the first entry if (firstEntryRotation) { firstEntryRotation = false; - minRotation = new Vector(x, y, z); - maxRotation= new Vector(x, y, z); + minRotation = new CannonVector(x, y, z); + maxRotation = new CannonVector(x, y, z); } else { setMinimum(x, y, z, minRotation); setMaximum(x, y, z, maxRotation); @@ -487,23 +488,23 @@ else if (sblock.compareMaterial(blockRotationCenter)) { } // ############# redstoneTorch else if (sblock.compareMaterial(blockRedstoneTorch)) - cannonBlocks.addRedstoneTorch(new Vector(x, y, z)); + cannonBlocks.addRedstoneTorch(new CannonVector(x, y, z)); // ############# redstoneWire and Repeater else if (sblock.compareMaterial(blockRedstoneWireAndRepeater)) cannonBlocks.addRedstoneWiresAndRepeater(new BukkitBlock(x, y, z, Material.REPEATER)); // ############# redstoneTrigger else if (sblock.compareMaterialAndFacing(blockRedstoneTrigger)) { - cannonBlocks.addRedstoneTrigger(new Vector(x, y, z)); + cannonBlocks.addRedstoneTrigger(new CannonVector(x, y, z)); // buttons or levers are part of the cannon cannonBlocks.addAllCannonBlocks(new BukkitBlock(x, y, z, replaceRedstoneTrigger)); // this can be a destructible block if (!isInList(blockProtectedList, sblock.getBlockData())) - cannonBlocks.addDestructibleBlocks(new Vector(x, y, z)); + cannonBlocks.addDestructibleBlocks(new CannonVector(x, y, z)); } // ############# rightClickTrigger else if (sblock.compareMaterialAndFacing(blockRightClickTrigger)) { - cannonBlocks.addRightClickTrigger(new Vector(x, y, z)); + cannonBlocks.addRightClickTrigger(new CannonVector(x, y, z)); //can be also a sign if (sblock.compareMaterialAndFacing(blockChestAndSign)) // the id does not matter, but the data is important for signs @@ -513,7 +514,7 @@ else if (sblock.compareMaterialAndFacing(blockRightClickTrigger)) cannonBlocks.addAllCannonBlocks(new BukkitBlock(x, y, z, replaceRightClickTrigger)); // this can be a destructible block if (!isInList(blockProtectedList, sblock.getBlockData())) - cannonBlocks.addDestructibleBlocks(new Vector(x, y, z)); + cannonBlocks.addDestructibleBlocks(new CannonVector(x, y, z)); } // ############# chests and signs else if (sblock.compareMaterial(blockChestAndSign)) { @@ -524,47 +525,47 @@ else if (sblock.compareMaterial(blockChestAndSign)) { // the previous blocks else { // all remaining blocks are loading interface or cannonBlocks - cannonBlocks.addBarrelBlocks(new Vector(x, y, z)); + cannonBlocks.addBarrelBlocks(new CannonVector(x, y, z)); cannonBlocks.addAllCannonBlocks(new BukkitBlock(x, y, z, sblock.getBlockData())); // this can be a destructible block if (!isInList(blockProtectedList, sblock.getBlockData())) - cannonBlocks.addDestructibleBlocks(new Vector(x, y, z)); + cannonBlocks.addDestructibleBlocks(new CannonVector(x, y, z)); } // ############# firingIndicator // can be everywhere on the cannon if (sblock.compareMaterialAndFacing(blockFiringIndicator)) - cannonBlocks.addFiringIndicator(new Vector(x, y, z)); + cannonBlocks.addFiringIndicator(new CannonVector(x, y, z)); } // calculate the muzzle location - maxMuzzle.add(new Vector(1, 1, 1)); + maxMuzzle.add(new CannonVector(1, 1, 1)); cannonBlocks.setMuzzle(maxMuzzle.add(minMuzzle).multiply(0.5)); // calculate the rotation Center - maxRotation.add(new Vector(1, 1, 1)); + maxRotation.add(new CannonVector(1, 1, 1)); cannonBlocks.setRotationCenter(maxRotation.add(maxRotation).multiply(0.5)); //set the muzzle location - Vector compensation = new Vector(cannonBlocks.getMuzzle().getBlockX(), cannonBlocks.getMuzzle().getBlockY(), cannonBlocks.getMuzzle().getBlockZ()); + CannonVector compensation = new CannonVector(cannonBlocks.getMuzzle().getBlockX(), cannonBlocks.getMuzzle().getBlockY(), cannonBlocks.getMuzzle().getBlockZ()); for (BukkitBlock block : cannonBlocks.getAllCannonBlocks()) block.subtract_noCopy(compensation); - for (Vector block : cannonBlocks.getBarrelBlocks()) + for (CannonVector block : cannonBlocks.getBarrelBlocks()) block.subtract(compensation); for (BukkitBlock block : cannonBlocks.getChestsAndSigns()) block.subtract_noCopy(compensation); - for (Vector block : cannonBlocks.getRedstoneTorches()) + for (CannonVector block : cannonBlocks.getRedstoneTorches()) block.subtract(compensation); for (BukkitBlock block : cannonBlocks.getRedstoneWiresAndRepeater()) block.subtract_noCopy(compensation); - for (Vector block : cannonBlocks.getRedstoneTrigger()) + for (CannonVector block : cannonBlocks.getRedstoneTrigger()) block.subtract(compensation); - for (Vector block : cannonBlocks.getRightClickTrigger()) + for (CannonVector block : cannonBlocks.getRightClickTrigger()) block.subtract(compensation); - for (Vector block : cannonBlocks.getFiringIndicator()) + for (CannonVector block : cannonBlocks.getFiringIndicator()) block.subtract(compensation); - for (Vector block : cannonBlocks.getDestructibleBlocks()) + for (CannonVector block : cannonBlocks.getDestructibleBlocks()) block.subtract(compensation); cannonBlocks.getMuzzle().subtract(compensation); cannonBlocks.getRotationCenter().subtract(compensation); @@ -604,13 +605,13 @@ else if (sblock.compareMaterial(blockChestAndSign)) { return true; } - private void setMinimum(int x, int y, int z, Vector min) { + private void setMinimum(int x, int y, int z, CannonVector min) { if (x < min.getBlockX()) min.setX(x); if (y < min.getBlockY()) min.setY(y); if (z < min.getBlockZ()) min.setZ(z); } - private void setMaximum(int x, int y, int z, Vector max) { + private void setMaximum(int x, int y, int z, CannonVector max) { if (x > max.getBlockX()) max.setX(x); if (y > max.getBlockY()) max.setY(y); if (z > max.getBlockZ()) max.setZ(z); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java index 045a2622..c7c0c5c8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java @@ -1,7 +1,9 @@ package at.pavlov.cannons.commands; +import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; +import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.BreakCause; import at.pavlov.internal.enums.CommandList; import at.pavlov.internal.enums.MessageEnum; @@ -172,7 +174,8 @@ public static void onCreate(Player player, String arg) { sendMessage(player, ChatColor.GREEN + tag + "Create design: " + ChatColor.GOLD + arg); CannonDesign cannonDesign = designStorage.getDesign(arg); - Cannon cannon = new Cannon(cannonDesign, player.getWorld().getUID(), player.getLocation().toVector(), BlockFace.NORTH, player.getUniqueId()); + CannonVector vector = VectorUtils.fromBaseVector(player.getLocation().toVector()); + Cannon cannon = new Cannon(cannonDesign, player.getWorld().getUID(), vector, BlockFace.NORTH, player.getUniqueId()); //createCannon(cannon); cannon.show(); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/MovingObject.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/MovingObject.java index c9bf0471..1a2ad79b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/MovingObject.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/MovingObject.java @@ -1,5 +1,7 @@ package at.pavlov.cannons.container; +import at.pavlov.bukkit.factory.VectorUtils; +import at.pavlov.internal.container.location.CannonVector; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.EntityType; @@ -7,6 +9,7 @@ import java.util.UUID; +//TODO abstract this away and replace Vector with CannonVector public class MovingObject { //location and speed @@ -24,6 +27,14 @@ public MovingObject(Location loc, Vector vel, EntityType entityType) this.entityType = entityType; } + public MovingObject(Location loc, CannonVector vel, EntityType entityType) + { + world = loc.getWorld().getUID(); + this.loc = loc.toVector(); + this.vel = VectorUtils.toBaseVector(vel); + this.entityType = entityType; + } + /** * calculates the new position for the projectile * @param inWater the projectile is in water diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java index 84ebb1b3..028940b8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java @@ -1,5 +1,6 @@ package at.pavlov.cannons.container; +import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.internal.enums.TargetType; import at.pavlov.cannons.cannon.Cannon; import org.bukkit.Location; @@ -56,7 +57,7 @@ public Target(Cannon cannon) { cannon.getUID(), cannon.getRandomBarrelBlock().clone().add(0.5, 0.0, 0.5), cannon.getRandomBarrelBlock().clone().add(0.5, 0.5, 0.5), - cannon.getVelocity() + VectorUtils.toBaseVector(cannon.getVelocity()) ); } } \ No newline at end of file diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java index 52361654..78e6cd71 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java @@ -7,6 +7,7 @@ import at.pavlov.cannons.scheduler.RunnableAsync; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.scheduler.CreateCannon; +import at.pavlov.internal.container.location.CannonVector; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.World; @@ -78,7 +79,7 @@ public void run() { continue; } - Vector offset = new Vector(rs.getInt("loc_x"), rs.getInt("loc_y"), rs.getInt("loc_z")); + CannonVector offset = new CannonVector(rs.getInt("loc_x"), rs.getInt("loc_y"), rs.getInt("loc_z")); BlockFace cannonDirection = BlockFace.valueOf(rs.getString("cannon_direction")); //make a cannon diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/RotationListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/RotationListener.java index 2993926c..6d5d76dd 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/RotationListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/RotationListener.java @@ -1,8 +1,10 @@ package at.pavlov.cannons.hooks.movecraft.listener; +import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.cannons.API.CannonsAPI; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; +import at.pavlov.internal.container.location.CannonVector; import net.countercraft.movecraft.craft.Craft; import net.countercraft.movecraft.events.CraftRotateEvent; import org.bukkit.event.EventHandler; @@ -23,7 +25,7 @@ public void rotateListener(CraftRotateEvent e) { if (cannons.isEmpty()) return; - Vector v = e.getOriginPoint().toBukkit(craft.getWorld()).toVector(); + CannonVector v = VectorUtils.fromBaseVector(e.getOriginPoint().toBukkit(craft.getWorld()).toVector()); for (Cannon c : cannons) { switch (e.getRotation()) { case CLOCKWISE -> c.rotateRight(v); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/TranslationListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/TranslationListener.java index 45a61db9..0465710f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/TranslationListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/TranslationListener.java @@ -1,5 +1,6 @@ package at.pavlov.cannons.hooks.movecraft.listener; +import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.cannons.API.CannonsAPI; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; @@ -27,7 +28,7 @@ public void translateListener(CraftTranslateEvent e) { if (cannons.isEmpty()) return; for (Cannon c : cannons) { - c.move(v); + c.move(VectorUtils.fromBaseVector(v)); } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index b18320a1..03f42a4b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -1,6 +1,7 @@ package at.pavlov.cannons.utils; import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.TargetManager; @@ -461,13 +462,13 @@ public static double vectorToPitch(Vector vector){ return -Math.asin(vector.normalize().getY())*180./Math.PI; } - public static Vector directionToVector(double yaw, double pitch, double speed){ + public static CannonVector directionToVector(double yaw, double pitch, double speed){ double hx = -Math.cos(pitch * Math.PI / 180.)*Math.sin(yaw*Math.PI/180.); double hy = -Math.sin(pitch * Math.PI / 180.); double hz = Math.cos(pitch*Math.PI/180.)*Math.cos(yaw*Math.PI/180.); // System.out.println("yaw: " + yaw + " pitch " + pitch); // System.out.println("vector: " + (new Vector(hx, hy, hz))); - return new Vector(hx, hy, hz).multiply(speed); + return new CannonVector(hx, hy, hz).multiply(speed); } /** From d0800f8b7b1cbb7f35bd891edae5dc9af927e729 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 20:44:58 +0100 Subject: [PATCH 49/97] Remove unused imports --- .../src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java | 1 - .../pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java | 1 - .../src/main/java/at/pavlov/internal/enums/EntityDataType.java | 3 --- cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java | 1 - .../src/main/java/at/pavlov/cannons/cannon/Cannon.java | 1 - .../src/main/java/at/pavlov/cannons/cannon/DesignStorage.java | 1 - .../src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java | 1 - .../cannons/hooks/movecraft/listener/RotationListener.java | 1 - 8 files changed, 10 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index 95bf5527..a0efcfa5 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -14,7 +14,6 @@ import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.inventory.ItemStack; -import org.bukkit.util.Vector; import java.util.ArrayList; import java.util.EnumSet; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java index 4b41dc09..eb70a1bc 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonPositionHBukkit.java @@ -6,7 +6,6 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.BlockFace; -import org.bukkit.util.Vector; public interface CannonPositionHBukkit extends CannonPositionHolder { diff --git a/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java index 11328079..3abf2482 100644 --- a/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java @@ -1,11 +1,8 @@ package at.pavlov.internal.enums; -import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; public enum EntityDataType { FUSE_TIME ("Fuse"), diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index 3efb3c1f..5c5391fd 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -2,7 +2,6 @@ import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.Projectile; -import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.internal.enums.BreakCause; import at.pavlov.internal.enums.FakeBlockType; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index 83d7ee47..051db835 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -48,7 +48,6 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.material.Attachable; -import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index d91f7853..f95de01b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -27,7 +27,6 @@ import org.bukkit.block.data.BlockData; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.util.Vector; import java.io.BufferedInputStream; import java.io.File; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java index 78e6cd71..c0bd3a88 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java @@ -12,7 +12,6 @@ import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.block.BlockFace; -import org.bukkit.util.Vector; import java.sql.ResultSet; import java.sql.Statement; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/RotationListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/RotationListener.java index 6d5d76dd..8fac31f8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/RotationListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/movecraft/listener/RotationListener.java @@ -10,7 +10,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.util.Vector; import java.util.Set; From 92a79ddf15826f25d34456d2c5bcd5b84ce95ec7 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 21:49:27 +0100 Subject: [PATCH 50/97] Fix implementation of BukkitItemHolder --- .../pavlov/bukkit/container/BukkitItemHolder.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitItemHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitItemHolder.java index 0ed8f3cf..8e8ce955 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitItemHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitItemHolder.java @@ -16,9 +16,6 @@ //small class as at.pavlov.cannons.container for item id and data public class BukkitItemHolder extends ItemHolder { - private Material material; - private String displayName; - private List lore; public static BukkitItemHolder from(ItemStack item) { if (item == null) { @@ -96,8 +93,8 @@ public static BukkitItemHolder from(String str) { } public ItemStack toItemStack(int amount) { - material = material == null ? Material.AIR : material; - ItemStack item = new ItemStack(material, amount); + type = type == null ? Material.AIR : type; + ItemStack item = new ItemStack(type, amount); ItemMeta meta = item.getItemMeta(); if (this.hasDisplayName()) meta.setDisplayName(this.displayName); @@ -114,7 +111,7 @@ public ItemStack toItemStack(int amount) { * @return true if both material are equal */ public boolean check(Material material) { - return material != null && material.equals(this.material); + return material != null && material.equals(this.type); } /** @@ -150,7 +147,7 @@ public boolean equalsFuzzy(BukkitItemHolder item) { return false; if (!this.hasLore()) { - return item.getType().equals(this.material); + return item.getType().equals(this.type); } //does Item have a Lore if (!item.hasLore()) @@ -164,7 +161,7 @@ public boolean equalsFuzzy(BukkitItemHolder item) { if (similar.size() < size) return false; - return item.getType().equals(this.material); + return item.getType().equals(this.type); } private static String capitalizeFully(String name) { From f3989f017a1418fd6ee06f45c1dd3c4e326fccf0 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 22:02:12 +0100 Subject: [PATCH 51/97] Fix enums --- .../at/pavlov/internal/enums/BreakCause.java | 14 ++++----- .../pavlov/internal/enums/CannonRotation.java | 6 ++-- .../at/pavlov/internal/enums/CommandList.java | 26 +++++----------- .../pavlov/internal/enums/FakeBlockType.java | 11 ++++--- .../pavlov/internal/enums/InteractAction.java | 30 +++++++++---------- .../main/java/at/pavlov/cannons/Aiming.java | 16 +++++----- .../java/at/pavlov/cannons/FireCannon.java | 16 +++++----- .../java/at/pavlov/cannons/cannon/Cannon.java | 14 ++++----- .../pavlov/cannons/cannon/CannonManager.java | 14 ++++----- .../at/pavlov/cannons/commands/Commands.java | 2 +- .../cannons/listener/BlockListener.java | 2 +- .../cannons/listener/EntityListener.java | 2 +- .../cannons/listener/PlayerListener.java | 6 ++-- .../cannons/listener/RedstoneListener.java | 8 ++--- 14 files changed, 77 insertions(+), 90 deletions(-) diff --git a/api-internal/src/main/java/at/pavlov/internal/enums/BreakCause.java b/api-internal/src/main/java/at/pavlov/internal/enums/BreakCause.java index 87b116eb..972381a6 100644 --- a/api-internal/src/main/java/at/pavlov/internal/enums/BreakCause.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/BreakCause.java @@ -4,13 +4,13 @@ public enum BreakCause { //Error Messages - PlayerBreak ("player break"), - Explosion ("explosion"), - Overheating ("overheating"), - ShipDestroyed ("ShipDestroyed"), - Overloading ("overloading"), - Dismantling ("dismantling"), - Other ("other"); + PLAYER_BREAK("player break"), + EXPLOSION("explosion"), + OVERHEATING("overheating"), + SHIP_DESTROYED("ShipDestroyed"), + OVERLOADING("overloading"), + DISMANTLING("dismantling"), + OTHER("other"); diff --git a/api-internal/src/main/java/at/pavlov/internal/enums/CannonRotation.java b/api-internal/src/main/java/at/pavlov/internal/enums/CannonRotation.java index d5835f7f..1a208da5 100644 --- a/api-internal/src/main/java/at/pavlov/internal/enums/CannonRotation.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/CannonRotation.java @@ -1,5 +1,8 @@ package at.pavlov.internal.enums; +import lombok.Getter; + +@Getter public enum CannonRotation { LEFT(-90), RIGHT(90), @@ -10,7 +13,4 @@ public enum CannonRotation { this.angle = angle; } - public int getAngle() { - return angle; - } } diff --git a/api-internal/src/main/java/at/pavlov/internal/enums/CommandList.java b/api-internal/src/main/java/at/pavlov/internal/enums/CommandList.java index 9be2b971..148c55d9 100644 --- a/api-internal/src/main/java/at/pavlov/internal/enums/CommandList.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/CommandList.java @@ -1,6 +1,9 @@ package at.pavlov.internal.enums; +import lombok.Getter; + +@Getter public enum CommandList { BUILD("build", "/cannons build", "cannons.player.command", false), FIRE("pilot", "/cannons fire", "cannons.player.command", false), @@ -24,10 +27,10 @@ public enum CommandList { PERMISSIONS("permissions", "/cannons permissions [NAME]", "cannons.admin.permissions", true), BLOCKDATA("blockdata", "/cannons blockdata", "cannons.admin.blockdata", true); - private String command; - private String usage; - private String permission; - private Boolean adminCmd; + private final String command; + private final String usage; + private final String permission; + private final boolean adminCmd; CommandList(String command, String usage, String permission, boolean adminCmd){ this.command = command; @@ -36,19 +39,4 @@ public enum CommandList { this.adminCmd = adminCmd; } - public String getCommand() { - return command; - } - - public String getPermission() { - return permission; - } - - public String getUsage() { - return usage; - } - - public boolean isAdminCmd(){ - return this.adminCmd; - } } diff --git a/api-internal/src/main/java/at/pavlov/internal/enums/FakeBlockType.java b/api-internal/src/main/java/at/pavlov/internal/enums/FakeBlockType.java index 52205842..67403702 100644 --- a/api-internal/src/main/java/at/pavlov/internal/enums/FakeBlockType.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/FakeBlockType.java @@ -1,8 +1,11 @@ package at.pavlov.internal.enums; +import lombok.Getter; + /** * Created by Peter on 25.04.2014. */ +@Getter public enum FakeBlockType { AIMING("Aiming"), EXPLOSION("Explosion"), @@ -11,14 +14,10 @@ public enum FakeBlockType { WATER_SPLASH("Water splash"), SMOKE_TRAIL("Smoke trail"); - private final String str; + private final String type; FakeBlockType(String type) { - this.str = type; + this.type = type; } - - public String getStr() { - return str; - } } diff --git a/api-internal/src/main/java/at/pavlov/internal/enums/InteractAction.java b/api-internal/src/main/java/at/pavlov/internal/enums/InteractAction.java index fdfa9b28..a95f814f 100644 --- a/api-internal/src/main/java/at/pavlov/internal/enums/InteractAction.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/InteractAction.java @@ -2,21 +2,21 @@ public enum InteractAction { - cleaningCannon, - loadGunpowder, - loadProjectile, - pushingProjectile, - fireAutoaim, - fireSentry, - fireRedstoneTrigger, - fireRightClickTigger, - fireRedstone, - fireAfterLoading, - fireOther, - adjustPlayer, - adjustAutoaim, - adjustSentry, - adjustOther + CLEANING_CANNON, + LOAD_GUNPOWDER, + LOAD_PROJECTILE, + PUSHING_PROJECTILE, + FIRE_AUTOAIM, + FIRE_SENTRY, + FIRE_REDSTONE_TRIGGER, + FIRE_RIGHT_CLICK_TIGGER, + FIRE_REDSTONE, + FIRE_AFTER_LOADING, + FIRE_OTHER, + ADJUST_PLAYER, + ADJUST_AUTOAIM, + ADJUST_SENTRY, + ADJUST_OTHER } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index 2c69ac64..048bda25 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -130,7 +130,7 @@ public void initAimingMode() { */ public MessageEnum changeAngle(Cannon cannon, Action action, BlockFace clickedFace, Player player) { //fire event - CannonUseEvent useEvent = new CannonUseEvent(cannon, player.getUniqueId(), InteractAction.adjustPlayer); + CannonUseEvent useEvent = new CannonUseEvent(cannon, player.getUniqueId(), InteractAction.ADJUST_PLAYER); Bukkit.getServer().getPluginManager().callEvent(useEvent); if (useEvent.isCancelled()) @@ -143,7 +143,7 @@ public MessageEnum changeAngle(Cannon cannon, Action action, BlockFace clickedFa if (!config.getToolAutoaim().equalsFuzzy(player.getInventory().getItemInMainHand())) { //barrel clicked to change angle - return updateAngle(player, cannon, clickedFace, InteractAction.adjustPlayer); + return updateAngle(player, cannon, clickedFace, InteractAction.ADJUST_PLAYER); } //aiming mode aimingMode(player, cannon, false); @@ -321,7 +321,7 @@ private GunAnglesWrapper determineGunAngles(Player player, Cannon cannon, BlockF CannonDesign design = cannon.getCannonDesign(); - if (action == InteractAction.adjustSentry && isSentry) { + if (action == InteractAction.ADJUST_SENTRY && isSentry) { if (cannon.isChunkLoaded()) return new GunAnglesWrapper(GunAngles.getGunAngle(cannon, cannon.getAimingYaw(), cannon.getAimingPitch()), true); @@ -329,7 +329,7 @@ private GunAnglesWrapper determineGunAngles(Player player, Cannon cannon, BlockF return new GunAnglesWrapper(null, false); } - if (player != null && action == InteractAction.adjustAutoaim && inAimingMode.containsKey(player.getUniqueId())) { + if (player != null && action == InteractAction.ADJUST_AUTOAIM && inAimingMode.containsKey(player.getUniqueId())) { if (!player.isSneaking()) { return new GunAnglesWrapper(null, false); } @@ -495,7 +495,7 @@ private boolean handleAutoamingFineadjusting(boolean playerInRange, Player playe return false; } - MessageEnum message = updateAngle(player, cannon, null, InteractAction.adjustAutoaim); + MessageEnum message = updateAngle(player, cannon, null, InteractAction.ADJUST_AUTOAIM); // todo updated cannon angles for linked cannons // linked Cannons @@ -511,7 +511,7 @@ private boolean handleAutoamingFineadjusting(boolean playerInRange, Player playe boolean canAccess = cannon.isAccessLinkingAllowed(fcannon, player); if (fcannon.isCannonOperator(player.getUniqueId()) && checkDesign && canAccess) - updateAngle(player, fcannon, null, InteractAction.adjustAutoaim); + updateAngle(player, fcannon, null, InteractAction.ADJUST_AUTOAIM); } userMessages.sendMessage(message, player, cannon); @@ -557,7 +557,7 @@ private void updateSentryMode() { boolean timeCheck = System.currentTimeMillis() >= cannon.getLastAimed() + cannon.getCannonDesign().getAngleUpdateSpeed(); // autoaming or fineadjusting if (sentryCheck && timeCheck && cannon.isValid()) { - updateAngle(null, cannon, null, InteractAction.adjustSentry); + updateAngle(null, cannon, null, InteractAction.ADJUST_SENTRY); } //ready to fire. Fire! boolean sentryAndInSight = cannon.hasSentryEntity() && cannon.targetInSight(); @@ -965,7 +965,7 @@ public void aimingMode(Player player, Cannon cannon, boolean fire) { //this player is already in aiming mode, he might fire the cannon or turn the aiming mode off MessageEnum message = fire ? - plugin.getFireCannon().playerFiring(cannon, player, InteractAction.fireAutoaim) : + plugin.getFireCannon().playerFiring(cannon, player, InteractAction.FIRE_AUTOAIM) : disableAimingMode(player); //turn off the aiming mode userMessages.sendMessage(message, player, cannon); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index 5c5391fd..30997254 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -180,7 +180,7 @@ public MessageEnum playerFiring(Cannon cannon, Player player, InteractAction act public MessageEnum sentryFiring(Cannon cannon) { CannonDesign design = cannon.getCannonDesign(); - return this.fire(cannon, null, true, !design.isAmmoInfiniteForPlayer(), InteractAction.fireSentry); + return this.fire(cannon, null, true, !design.isAmmoInfiniteForPlayer(), InteractAction.FIRE_SENTRY); } /** @@ -265,18 +265,18 @@ public MessageEnum fire(Cannon cannon, UUID playerUid, boolean autoload, boolean final ProjectileCause projectileCause; switch (action) { - case fireRightClickTigger: - case fireAutoaim: - case fireRedstoneTrigger: - case fireAfterLoading: { + case FIRE_RIGHT_CLICK_TIGGER: + case FIRE_AUTOAIM: + case FIRE_REDSTONE_TRIGGER: + case FIRE_AFTER_LOADING: { projectileCause = ProjectileCause.PlayerFired; break; } - case fireRedstone: { + case FIRE_REDSTONE: { projectileCause = ProjectileCause.RedstoneFired; break; } - case fireSentry: { + case FIRE_SENTRY: { projectileCause = ProjectileCause.SentryFired; break; } @@ -377,7 +377,7 @@ private void fireTask(Cannon cannon, UUID shooter, boolean removeCharge, Project //check if the temperature exceeds the limit and overloading if (cannon.checkHeatManagement() || cannon.isExplodedDueOverloading()) { - CannonManager.getInstance().removeCannon(cannon, true, true, BreakCause.Overheating); + CannonManager.getInstance().removeCannon(cannon, true, true, BreakCause.OVERHEATING); return; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index 051db835..fa33cc58 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -370,7 +370,7 @@ private MessageEnum getGunpowderMessage(int amountToLoad, Player player) { public MessageEnum loadGunpowder(Player player) { //fire event - CannonUseEvent useEvent = new CannonUseEvent(this, player.getUniqueId(), InteractAction.loadGunpowder); + CannonUseEvent useEvent = new CannonUseEvent(this, player.getUniqueId(), InteractAction.LOAD_GUNPOWDER); Bukkit.getServer().getPluginManager().callEvent(useEvent); if (useEvent.isCancelled()) @@ -434,7 +434,7 @@ public MessageEnum loadGunpowder(Player player) { */ public MessageEnum loadProjectile(Projectile projectile, Player player) { //fire event - CannonUseEvent useEvent = new CannonUseEvent(this, player.getUniqueId(), InteractAction.loadProjectile); + CannonUseEvent useEvent = new CannonUseEvent(this, player.getUniqueId(), InteractAction.LOAD_PROJECTILE); Bukkit.getServer().getPluginManager().callEvent(useEvent); if (useEvent.isCancelled()) @@ -572,7 +572,7 @@ private MessageEnum useRamRodInternal(Player player) { if (isClean()) return MessageEnum.RamrodCleaningDone; else { - CannonUseEvent cleaning = new CannonUseEvent(this, player.getUniqueId(), InteractAction.cleaningCannon); + CannonUseEvent cleaning = new CannonUseEvent(this, player.getUniqueId(), InteractAction.CLEANING_CANNON); Bukkit.getServer().getPluginManager().callEvent(cleaning); return MessageEnum.RamrodCleaning; } @@ -591,7 +591,7 @@ private MessageEnum useRamRodInternal(Player player) { if (isProjectilePushed()) { return MessageEnum.RamrodPushingProjectileDone; } else { - CannonUseEvent cleaning = new CannonUseEvent(this, player.getUniqueId(), InteractAction.pushingProjectile); + CannonUseEvent cleaning = new CannonUseEvent(this, player.getUniqueId(), InteractAction.PUSHING_PROJECTILE); Bukkit.getServer().getPluginManager().callEvent(cleaning); return MessageEnum.RamrodPushingProjectile; } @@ -705,9 +705,9 @@ public MessageEnum destroyCannon(boolean breakBlocks, boolean canExplode, BreakC // return message return switch (cause) { - case Overheating -> MessageEnum.HeatManagementOverheated; - case Other -> null; - case Dismantling -> MessageEnum.CannonDismantled; + case OVERHEATING -> MessageEnum.HeatManagementOverheated; + case OTHER -> null; + case DISMANTLING -> MessageEnum.CannonDismantled; default -> MessageEnum.CannonDestroyed; }; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 498fece7..19ef7705 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -93,19 +93,19 @@ public void dismantleCannon(Cannon cannon, Player player) { if (cannon == null) return; if (player == null) { - removeCannon(cannon, true, false, BreakCause.Dismantling); + removeCannon(cannon, true, false, BreakCause.DISMANTLING); return; } // admins can dismantle all cannons if (player.hasPermission("cannons.admin.dismantle")) { - removeCannon(cannon, true, false, BreakCause.Dismantling); + removeCannon(cannon, true, false, BreakCause.DISMANTLING); return; } if (player.hasPermission(cannon.getCannonDesign().getPermissionDismantle())) { //only the owner of the cannon can dismantle a cannon if (cannon.getOwner() != null && cannon.getOwner().equals(player.getUniqueId())) - removeCannon(cannon, true, false, BreakCause.Dismantling); + removeCannon(cannon, true, false, BreakCause.DISMANTLING); else userMessages.sendMessage(MessageEnum.ErrorDismantlingNotOwner, player, cannon); return; @@ -181,7 +181,7 @@ public void removeCannon(Cannon cannon, boolean breakCannon, boolean canExplode, return; long delay = 0; - if (cause == BreakCause.Dismantling || cause == BreakCause.Other) { + if (cause == BreakCause.DISMANTLING || cause == BreakCause.OTHER) { plugin.logDebug("Dismantling," + cannon.getCannonDesign().getSoundDismantle().toString()); SoundUtils.playSound(cannon.getRandomBarrelBlock(), cannon.getCannonDesign().getSoundDismantle()); delay = (long) (cannon.getCannonDesign().getDismantlingDelay() * 20.0); @@ -207,7 +207,7 @@ public void run(Object object) { // return message if (offplayer.hasPlayedBefore() && plugin.getEconomy() != null && cannon.isPaid()) { double funds = switch (cause) { - case Other, Dismantling -> cannon.getCannonDesign().getEconomyDismantlingRefund(); + case OTHER, DISMANTLING -> cannon.getCannonDesign().getEconomyDismantlingRefund(); default -> cannon.getCannonDesign().getEconomyDestructionRefund(); }; plugin.getEconomy().depositPlayer(offplayer, funds); @@ -842,7 +842,7 @@ public void deleteAllCannons() { // return money to the player if the cannon was paid if (offplayer != null && offplayer.hasPlayedBefore() && plugin.getEconomy() != null && cannon.isPaid()) plugin.getEconomy().depositPlayer(offplayer, cannon.getCannonDesign().getEconomyBuildingCost()); - cannon.destroyCannon(false, false, BreakCause.Other); + cannon.destroyCannon(false, false, BreakCause.OTHER); iter.remove(); } } @@ -862,7 +862,7 @@ public boolean deleteCannons(UUID owner) { Cannon next = iter.next(); if (next.getOwner() != null && next.getOwner().equals(owner)) { inList = true; - next.destroyCannon(false, false, BreakCause.Other); + next.destroyCannon(false, false, BreakCause.OTHER); iter.remove(); } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java index c7c0c5c8..7ee46513 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java @@ -435,7 +435,7 @@ public static void onResetArea(Player player, @Default("20") int size) { for (Cannon cannon : cannonList) { taskManager.scheduler.runTask(cannon.getLocation(), () -> { persistenceDatabase.deleteCannon(cannon.getUID()); - cannonManager.removeCannon(cannon, false, false, BreakCause.Other); + cannonManager.removeCannon(cannon, false, false, BreakCause.OTHER); }); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java index edd238de..a4ea7663 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java @@ -168,7 +168,7 @@ public void BlockBreak(BlockBreakEvent event) { aimingCannon = Aiming.getInstance().getCannonInAimingMode(event.getPlayer()); if (cannon.isDestructibleBlock(location) && (aimingCannon == null || !cannon.equals(aimingCannon)) && !CannonSelector.getInstance().isSelectingMode(event.getPlayer())) { - cannonManager.removeCannon(cannon, false, true, BreakCause.PlayerBreak); + cannonManager.removeCannon(cannon, false, true, BreakCause.PLAYER_BREAK); plugin.logDebug("cannon broken: " + cannon.isDestructibleBlock(location)); } else { event.setCancelled(true); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java index cd0e5c40..2300542a 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java @@ -120,6 +120,6 @@ public void ExplosionEventHandler(List blocklist){ //now remove all invalid cannons for (UUID id : remove) - cannonManager.removeCannon(id, false, true, BreakCause.Explosion); + cannonManager.removeCannon(id, false, true, BreakCause.EXPLOSION); } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java index 3a463023..e945c4cc 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java @@ -328,7 +328,7 @@ private boolean isRamrod(Cannon cannon, ItemStack eventitem, Block clickedBlock, //this will directly fire the cannon after it was loaded if (!player.isSneaking() && design.isFireAfterLoading() && cannon.isLoaded() && cannon.isProjectilePushed()) - fireCannon.playerFiring(cannon, player, InteractAction.fireAfterLoading); + fireCannon.playerFiring(cannon, player, InteractAction.FIRE_AFTER_LOADING); return message != null; } @@ -369,7 +369,7 @@ private boolean isRightClickTrigger(Cannon cannon, Block clickedBlock, PlayerInt return true; } - MessageEnum message = fireCannon.playerFiring(cannon, player, InteractAction.fireRightClickTigger); + MessageEnum message = fireCannon.playerFiring(cannon, player, InteractAction.FIRE_RIGHT_CLICK_TIGGER); // display message userMessages.sendMessage(message, player, cannon); @@ -502,7 +502,7 @@ private boolean isLoadProjectile(Cannon cannon, ItemStack eventitem, Block click //this will directly fire the cannon after it was loaded if (!player.isSneaking() && cannon.getCannonDesign().isFireAfterLoading() && cannon.isLoaded() && cannon.isProjectilePushed()) - fireCannon.playerFiring(cannon, player, InteractAction.fireAfterLoading); + fireCannon.playerFiring(cannon, player, InteractAction.FIRE_AFTER_LOADING); return message != null; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java index 9ea5f33b..78ae1b23 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java @@ -52,7 +52,7 @@ public void RedstoneEvent(BlockRedstoneEvent event) { // place right if (cannon.isRedstoneTorchInterface(block.getLocation())) { - fireCannon.redstoneFiring(cannon, InteractAction.fireRedstone); + fireCannon.redstoneFiring(cannon, InteractAction.FIRE_REDSTONE); } } } @@ -70,7 +70,7 @@ public void RedstoneEvent(BlockRedstoneEvent event) { // is place right if (cannon.isRedstoneWireInterface(block.getLocation())) { - MessageEnum message = fireCannon.redstoneFiring(cannon, InteractAction.fireRedstone); + MessageEnum message = fireCannon.redstoneFiring(cannon, InteractAction.FIRE_REDSTONE); } } @@ -90,7 +90,7 @@ public void RedstoneEvent(BlockRedstoneEvent event) { // is place right if (cannon.isRedstoneRepeaterInterface(block.getLocation())) { - MessageEnum message = fireCannon.redstoneFiring(cannon, InteractAction.fireRedstone); + MessageEnum message = fireCannon.redstoneFiring(cannon, InteractAction.FIRE_REDSTONE); } } @@ -120,7 +120,7 @@ public void RedstoneEvent(BlockRedstoneEvent event) { plugin.logDebug("Redfire with button by " + player.getName()); - MessageEnum message = fireCannon.playerFiring(cannon, player, InteractAction.fireRedstoneTrigger); + MessageEnum message = fireCannon.playerFiring(cannon, player, InteractAction.FIRE_REDSTONE_TRIGGER); userMessages.sendMessage(message, player, cannon); } } From 45fd66a4bb81f23085ae1d198d09f6643fe0022a Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 13 Dec 2024 22:13:15 +0100 Subject: [PATCH 52/97] Better error handling --- .../java/at/pavlov/internal/container/SpawnEntityHolder.java | 4 +++- .../main/java/at/pavlov/internal/enums/EntityDataType.java | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java index 568055f0..3cb7f8c4 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java @@ -72,8 +72,10 @@ public void parseEntityData(String dataStr) { if (key.equalsIgnoreCase("effects")) { parsePotionEffects(value); - } else { + } else if(EntityDataType.has(key)) { addEntityData(key, value.getAsString()); + } else { + throw new Exception("Invalid key: " + key); } } } catch (Exception e) { diff --git a/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java index 3abf2482..61f0a5d2 100644 --- a/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java +++ b/api-internal/src/main/java/at/pavlov/internal/enums/EntityDataType.java @@ -48,4 +48,9 @@ public static EntityDataType lookup(String str) { String lookup = str.toLowerCase(); return LOOKUP_MAP.get(lookup); } + + public static boolean has(String str) { + String lookup = str.toLowerCase(); + return LOOKUP_MAP.containsKey(lookup); + } } From 9b4ce8d76814bb0a88f656c3d24f223462c0fed7 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 17:17:57 +0100 Subject: [PATCH 53/97] Cleanup container package --- .../pavlov/cannons/container/DeathCause.java | 22 +------- .../cannons/container/DesignFileName.java | 34 +++---------- .../cannons/container/FakeBlockEntry.java | 51 ++++--------------- .../cannons/scheduler/FakeBlockHandler.java | 2 +- 4 files changed, 17 insertions(+), 92 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java index abe7f3e0..0ff42faa 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java @@ -4,26 +4,6 @@ import java.util.UUID; -public class DeathCause { - private Projectile projectile; - private UUID cannonUID; - private UUID shooterUID; +public record DeathCause(Projectile projectile, UUID cannonUID, UUID shooterUID) { - public DeathCause(Projectile projectile, UUID cannonUID, UUID shooterUID){ - this.projectile = projectile; - this.cannonUID = cannonUID; - this.shooterUID = shooterUID; - } - - public Projectile getProjectile() { - return projectile; - } - - public UUID getCannonUID() { - return cannonUID; - } - - public UUID getShooterUID() { - return shooterUID; - } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DesignFileName.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DesignFileName.java index c9d69d85..fb34d477 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DesignFileName.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DesignFileName.java @@ -1,32 +1,10 @@ package at.pavlov.cannons.container; -public class DesignFileName -{ - - private String ymlString; - private String schematicString; - - public DesignFileName(String _yml, String _schematic) - { - this.ymlString = _yml; - this.schematicString = _schematic; - } - - public String getYmlString() - { - return ymlString; - } - public void setYmlString(String ymlString) - { - this.ymlString = ymlString; - } - public String getSchematicString() - { - return schematicString; - } - public void setSchematicString(String schematicString) - { - this.schematicString = schematicString; - } +import lombok.AllArgsConstructor; +import lombok.Data; +@AllArgsConstructor +@Data public class DesignFileName { + private String ymlString; + private String schematicString; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java index 5e81c7af..8b44f269 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java @@ -1,6 +1,7 @@ package at.pavlov.cannons.container; import at.pavlov.internal.enums.FakeBlockType; +import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; @@ -8,7 +9,8 @@ import java.util.UUID; -public class FakeBlockEntry implements Cloneable{ +@Getter +public class FakeBlockEntry { private final int locX; private final int locY; private final int locZ; @@ -23,9 +25,6 @@ public class FakeBlockEntry implements Cloneable{ //only one type effect will be shown (aiming, explosion,...) private final FakeBlockType type; - - - public FakeBlockEntry(Location loc, Player player, FakeBlockType type, long duration) { this.locX = loc.getBlockX(); this.locY = loc.getBlockY(); @@ -40,53 +39,24 @@ public FakeBlockEntry(Location loc, Player player, FakeBlockType type, long dura } - public int getLocX() { - return locX; - } - - public int getLocY() { - return locY; - } - - public int getLocZ() { - return locZ; - } - - public UUID getWorld() { - return world; - } - public World getWorldBukkit() { return Bukkit.getWorld(getWorld()); } public Location getLocation() { World world = getWorldBukkit(); - if(world != null) - return new Location(world,getLocX(),getLocY(),getLocZ()); + if (world != null) + return new Location(world, getLocX(), getLocY(), getLocZ()); else return null; } - public long getStartTime() { - return startTime; - } - - public void setStartTime(long startTime) - { - this.startTime = startTime; - } - - public long getDuration() { - return duration; - } - - public boolean isExpired(){ - return (System.currentTimeMillis() > getStartTime() + getDuration()*50); + public void updateTime() { + this.startTime = System.currentTimeMillis(); } - public UUID getPlayer() { - return player; + public boolean isExpired() { + return (System.currentTimeMillis() > getStartTime() + getDuration() * 50); } public Player getPlayerBukkit() { @@ -114,7 +84,4 @@ public boolean equals(Object obj) { && this.player.equals(obj2.getPlayer()); } - public FakeBlockType getType() { - return type; - } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java index 668f6c23..0bb63101 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java @@ -231,7 +231,7 @@ private CompletableFuture processBlockData(final Player player, final boolean found = false; for (FakeBlockEntry block : list) { if (block.equals(fakeBlockEntry)) { - block.setStartTime(System.currentTimeMillis()); + block.updateTime(); found = true; break; } From 7da51552dc818f661c3b2697a8ae474606092c19 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 18:43:56 +0100 Subject: [PATCH 54/97] Abstract away Projectile --- .../internal/projectile/Projectile.java | 185 ++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java diff --git a/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java b/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java new file mode 100644 index 00000000..d53d1cf0 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java @@ -0,0 +1,185 @@ +package at.pavlov.internal.projectile; + +import at.pavlov.internal.CannonLogger; +import at.pavlov.internal.container.ItemHolder; +import at.pavlov.internal.container.SoundHolder; +import at.pavlov.internal.container.SpawnEntityHolder; +import at.pavlov.internal.container.SpawnMaterialHolder; +import at.pavlov.internal.enums.ProjectileProperties; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + + +@Data +abstract public class Projectile< + Entity, + Potion, + Block, + ParticleBuilder, + Firework, + IH extends ItemHolder, + SMH extends SpawnMaterialHolder, + SH extends SoundHolder + > implements Cloneable { + protected String projectileID; + protected String projectileName; + protected String description; + protected String itemName; + protected IH loadingItem; + //list of items or blocks that can represent this this (e.g. redstone dust may for wire when you click a block) + protected List alternativeItemList = new ArrayList<>(); + + //properties of the cannonball + protected Entity projectileEntity; + protected boolean projectileOnFire; + protected double velocity; + protected double penetration; + protected double timefuse; + protected double automaticFiringDelay; + protected int automaticFiringMagazineSize; + protected int numberOfBullets; + protected double spreadMultiplier; + protected int sentryIgnoredBlocks; + protected List propertyList = new ArrayList<>(); + + //smokeTrail + protected boolean smokeTrailEnabled; + protected int smokeTrailDistance; + protected Block smokeTrailMaterial; + protected double smokeTrailDuration; + protected boolean smokeTrailParticleEnabled; + protected ParticleBuilder smokeTrailParticle; + + //explosion + protected float explosionPower; + protected boolean explosionPowerDependsOnVelocity; + protected boolean explosionDamage; + protected boolean underwaterDamage; + protected boolean penetrationDamage; + protected double directHitDamage; + protected double playerDamageRange; + protected double playerDamage; + protected double potionRange; + protected double potionDuration; + protected int potionAmplifier; + protected List potionsEffectList = new ArrayList<>(); + protected boolean impactIndicator; + + //cluster + protected boolean clusterExplosionsEnabled; + protected boolean clusterExplosionsInBlocks; + protected int clusterExplosionsAmount; + protected double clusterExplosionsMinDelay; + protected double clusterExplosionsMaxDelay; + protected double clusterExplosionsRadius; + protected double clusterExplosionsPower; + + //placeBlock + protected boolean spawnEnabled; + protected double spawnBlockRadius; + protected double spawnEntityRadius; + protected double spawnVelocity; + protected List spawnBlocks = new ArrayList<>(); + protected List> spawnEntities = new ArrayList<>(); + protected List spawnProjectiles; + + //spawn Fireworks + protected boolean fireworksEnabled; + protected Firework fireworkEffect; + + //messages + protected boolean impactMessage; + + //sounds + protected SH soundLoading; + protected SH soundImpact; + protected SH soundImpactProtected; + protected SH soundImpactWater; + + //permissions + protected List permissionLoad = new ArrayList(); + + public Projectile(String id) { + this.projectileID = id; + } + + @Override + public Projectile clone() { + try { + // call clone in Object. + return (Projectile) super.clone(); + } catch (CloneNotSupportedException e) { + CannonLogger.getLogger().info("Cloning not allowed."); + return this; + } + } + + /** + * returns true if both the id and data are equivalent of data == -1 + * + * @param materialHolder the material of the loaded item + * @return true if the materials match + */ + public boolean check(IH materialHolder) { + return loadingItem.equalsFuzzy(materialHolder); + } + + /** + * returns true if both the id and data are equivalent of data == -1 + * + * @param projectileID the file name id of the projectile + * @return true if the id matches + */ + public boolean check(String projectileID) { + return this.projectileID.equals(projectileID); + } + + + /** + * returns ID, Data, name and lore of the projectile loading item + * + * @return ID, Data, name and lore of the projectile loading item + */ + public String toString() { + return loadingItem.toString(); + } + + /** + * returns ID and data of the loadingItem + * + * @return ID and data of the loadingItem + */ + public String getMaterialInformation() { + return loadingItem.getType().toString(); + } + + /** + * returns true if the projectile has this property + * + * @param properties properties of the projectile + * @return true if the projectile has this property + */ + public boolean hasProperty(ProjectileProperties properties) { + for (ProjectileProperties propEnum : this.getPropertyList()) { + if (propEnum.equals(properties)) + return true; + } + return false; + } +} From 4820122379db263a140bedab0fa9f4cd9a4f555d Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 18:44:11 +0100 Subject: [PATCH 55/97] Make BukkitProjectile --- .../cannons/CannonDataHolderBukkit.java | 6 +- .../pavlov/bukkit/cannons/CannonDesign.java | 4 +- .../bukkit/projectile/BukkitProjectile.java | 55 ++++++ .../pavlov/bukkit/projectile/Projectile.java | 187 ------------------ .../pavlov/internal/container/ItemHolder.java | 2 +- .../main/java/at/pavlov/cannons/Aiming.java | 4 +- .../at/pavlov/cannons/CreateExplosion.java | 34 ++-- .../java/at/pavlov/cannons/FireCannon.java | 6 +- .../java/at/pavlov/cannons/cannon/Cannon.java | 32 +-- .../at/pavlov/cannons/commands/Commands.java | 4 +- .../pavlov/cannons/config/UserMessages.java | 4 +- .../pavlov/cannons/container/DeathCause.java | 4 +- .../at/pavlov/cannons/dao/SaveCannonTask.java | 4 +- .../cannons/event/CannonPreLoadEvent.java | 10 +- .../event/CannonsEntityDeathEvent.java | 10 +- .../cannons/event/ProjectileImpactEvent.java | 10 +- .../event/ProjectilePiercingEvent.java | 10 +- .../cannons/listener/PlayerListener.java | 6 +- .../cannons/projectile/FlyingProjectile.java | 8 +- .../cannons/projectile/ProjectileManager.java | 4 +- .../cannons/projectile/ProjectileStorage.java | 30 +-- .../cannons/scheduler/ProjectileObserver.java | 6 +- .../at/pavlov/cannons/utils/CannonsUtil.java | 4 +- 23 files changed, 156 insertions(+), 288 deletions(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java delete mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java index f1a7430e..937f4bb9 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java @@ -1,7 +1,7 @@ package at.pavlov.bukkit.cannons; import at.pavlov.bukkit.cannons.holders.CannonPositionHBukkit; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.cannons.holders.AimingDataHolder; import at.pavlov.internal.cannons.holders.AmmoLoadingDataHolder; import at.pavlov.internal.cannons.holders.AngleDataHolder; @@ -15,11 +15,11 @@ public interface CannonDataHolderBukkit extends AimingDataHolder, - AmmoLoadingDataHolder, + AmmoLoadingDataHolder, AngleDataHolder, CannonMainDataHolder, CannonPositionHBukkit, - FiringDataHolder, + FiringDataHolder, LinkingDataHolder, ObserverMapHolder, SentryDataHolder, diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index a0efcfa5..2f374255 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -5,7 +5,7 @@ import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.factory.VectorUtils; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.CannonLogger; import at.pavlov.internal.container.location.CannonVector; import lombok.Data; @@ -446,7 +446,7 @@ public List getRedstoneWireAndRepeater(CannonBukkit cannon) * @param projectile projectile to load * @return true if the projectile can be loaded in this type of cannon */ - public boolean canLoad(Projectile projectile) + public boolean canLoad(BukkitProjectile projectile) { for (String p : allowedProjectiles) { diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java new file mode 100644 index 00000000..3fc28cd4 --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java @@ -0,0 +1,55 @@ +package at.pavlov.bukkit.projectile; + +import at.pavlov.bukkit.builders.ParticleBuilder; +import at.pavlov.bukkit.container.BukkitSoundHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.container.BukkitEntityHolder; +import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; +import at.pavlov.internal.CannonLogger; +import at.pavlov.internal.enums.ProjectileProperties; +import at.pavlov.internal.projectile.Projectile; +import lombok.Data; +import org.bukkit.FireworkEffect; +import org.bukkit.block.data.BlockData; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffectType; + +import java.util.ArrayList; +import java.util.List; + +public class BukkitProjectile extends Projectile< + Entity, + PotionEffectType, + BlockData, + ParticleBuilder, + FireworkEffect.Builder, + BukkitItemHolder, + BukkitSpawnMaterialHolder, + BukkitSoundHolder + > { + + public BukkitProjectile(String id) { + super(id); + } + + /** + * returns true if the player has permission to use that projectile + * + * @param player who tried to load this projectile + * @return true if the player can load this projectile + */ + public boolean hasPermission(Player player) { + if (player == null) return true; + + for (String perm : permissionLoad) { + if (!player.hasPermission(perm)) { + //missing permission + return false; + } + } + //player has all permissions + return true; + } +} diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java deleted file mode 100644 index c4acbeaa..00000000 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/Projectile.java +++ /dev/null @@ -1,187 +0,0 @@ -package at.pavlov.bukkit.projectile; - -import at.pavlov.bukkit.builders.ParticleBuilder; -import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.BukkitEntityHolder; -import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; -import at.pavlov.internal.CannonLogger; -import at.pavlov.internal.enums.ProjectileProperties; -import lombok.Data; -import org.bukkit.FireworkEffect; -import org.bukkit.block.data.BlockData; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffectType; - -import java.util.ArrayList; -import java.util.List; - - -@Data -public class Projectile implements Cloneable { - private String projectileID; - private String projectileName; - private String description; - private String itemName; - private BukkitItemHolder loadingItem; - //list of items or blocks that can represent this this (e.g. redstone dust may for wire when you click a block) - private List alternativeItemList = new ArrayList<>(); - - //properties of the cannonball - private EntityType projectileEntity; - private boolean projectileOnFire; - private double velocity; - private double penetration; - private double timefuse; - private double automaticFiringDelay; - private int automaticFiringMagazineSize; - private int numberOfBullets; - private double spreadMultiplier; - private int sentryIgnoredBlocks; - private List propertyList = new ArrayList<>(); - - //smokeTrail - private boolean smokeTrailEnabled; - private int smokeTrailDistance; - private BlockData smokeTrailMaterial; - private double smokeTrailDuration; - private boolean smokeTrailParticleEnabled; - private ParticleBuilder smokeTrailParticle; - - //explosion - private float explosionPower; - private boolean explosionPowerDependsOnVelocity; - private boolean explosionDamage; - private boolean underwaterDamage; - private boolean penetrationDamage; - private double directHitDamage; - private double playerDamageRange; - private double playerDamage; - private double potionRange; - private double potionDuration; - private int potionAmplifier; - private List potionsEffectList = new ArrayList<>(); - private boolean impactIndicator; - - //cluster - private boolean clusterExplosionsEnabled; - private boolean clusterExplosionsInBlocks; - private int clusterExplosionsAmount; - private double clusterExplosionsMinDelay; - private double clusterExplosionsMaxDelay; - private double clusterExplosionsRadius; - private double clusterExplosionsPower; - - //placeBlock - private boolean spawnEnabled; - private double spawnBlockRadius; - private double spawnEntityRadius; - private double spawnVelocity; - private List spawnBlocks = new ArrayList<>(); - private List spawnEntities = new ArrayList<>(); - private List spawnProjectiles; - - //spawn Fireworks - private boolean fireworksEnabled; - private FireworkEffect.Builder fireworkEffect; - - //messages - private boolean impactMessage; - - //sounds - private BukkitSoundHolder soundLoading; - private BukkitSoundHolder soundImpact; - private BukkitSoundHolder soundImpactProtected; - private BukkitSoundHolder soundImpactWater; - - //permissions - private List permissionLoad = new ArrayList(); - - public Projectile(String id) { - this.projectileID = id; - } - - @Override - public Projectile clone() { - try { - // call clone in Object. - return (Projectile) super.clone(); - } catch (CloneNotSupportedException e) { - CannonLogger.getLogger().info("Cloning not allowed."); - return this; - } - } - - /** - * returns true if both the id and data are equivalent of data == -1 - * - * @param materialHolder the material of the loaded item - * @return true if the materials match - */ - public boolean check(BukkitItemHolder materialHolder) { - return loadingItem.equalsFuzzy(materialHolder); - } - - /** - * returns true if both the id and data are equivalent of data == -1 - * - * @param projectileID the file name id of the projectile - * @return true if the id matches - */ - public boolean check(String projectileID) { - return this.projectileID.equals(projectileID); - } - - - /** - * returns ID, Data, name and lore of the projectile loading item - * - * @return ID, Data, name and lore of the projectile loading item - */ - public String toString() { - return loadingItem.toString(); - } - - /** - * returns ID and data of the loadingItem - * - * @return ID and data of the loadingItem - */ - public String getMaterialInformation() { - return loadingItem.getType().toString(); - } - - /** - * returns true if the projectile has this property - * - * @param properties properties of the projectile - * @return true if the projectile has this property - */ - public boolean hasProperty(ProjectileProperties properties) { - for (ProjectileProperties propEnum : this.getPropertyList()) { - if (propEnum.equals(properties)) - return true; - } - return false; - } - - /** - * returns true if the player has permission to use that projectile - * - * @param player who tried to load this projectile - * @return true if the player can load this projectile - */ - public boolean hasPermission(Player player) { - if (player == null) return true; - - for (String perm : permissionLoad) { - if (!player.hasPermission(perm)) { - //missing permission - return false; - } - } - //player has all permissions - return true; - } -} diff --git a/api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java index 210ababb..61f632f0 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java @@ -44,7 +44,7 @@ public boolean check(Type material) { * @param item the item to compare * @return true if both items are equal in data and id or only the id if one data = -1 */ - public boolean equalsFuzzy(ItemHolder item) { + public boolean equalsFuzzy(ItemHolder item) { if (item == null) { return false; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index 048bda25..07eef890 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -20,7 +20,7 @@ import at.pavlov.cannons.event.CannonLinkAimingEvent; import at.pavlov.cannons.event.CannonTargetEvent; import at.pavlov.cannons.event.CannonUseEvent; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.scheduler.FakeBlockHandler; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; @@ -759,7 +759,7 @@ private boolean canFindTargetSolution(Cannon cannon, Target target, Location loc int ignoredBlocks = 0; if (cannon.isProjectileLoaded()) { - Projectile proj = cannon.getLoadedProjectile(); + BukkitProjectile proj = cannon.getLoadedProjectile(); if (proj != null) ignoredBlocks = proj.getSentryIgnoredBlocks(); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 82ee1192..d0dd7da3 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -3,7 +3,7 @@ import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitEntityHolder; import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.internal.enums.DamageType; import at.pavlov.internal.enums.EntityDataType; @@ -162,7 +162,7 @@ private boolean breakBlock(Block block, List blocklist, Boolean superBrea * @return the location after the piercing event */ private Location blockBreaker(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); // has this projectile the super breaker property and makes block damage @@ -455,7 +455,7 @@ private void spreadEntities(FlyingProjectile cannonball) { if (!cannonball.getProjectile().isSpawnEnabled()) return; - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); Location impactLoc = cannonball.getImpactLocation(); Location placeLoc; @@ -524,7 +524,7 @@ private void spreadBlocks(FlyingProjectile cannonball) { if (!cannonball.getProjectile().isSpawnEnabled()) return; - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); Location impactLoc = cannonball.getImpactLocation(); Location placeLoc; @@ -613,7 +613,7 @@ private int checkLineOfSight(Location impact, Location target) { * @param cannonball */ private void applyPotionEffect(Location impactLoc, Entity next, FlyingProjectile cannonball) { - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); if (!(next instanceof LivingEntity living)) { return; @@ -658,7 +658,7 @@ private void applyPotionEffect(Location impactLoc, Entity next, FlyingProjectile * @return - damage done to the entity */ private double getExplosionDamage(Location impactLoc, Entity next, FlyingProjectile cannonball) { - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); if (!(next instanceof LivingEntity living)) { return 0.0; @@ -705,7 +705,7 @@ private double getExplosionDamage(Location impactLoc, Entity next, FlyingProject * @return return the amount of damage done to the living entity */ private double getDirectHitDamage(FlyingProjectile cannonball, Entity target) { - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); // if (cannonball.getProjectileEntity()==null) // return 0.0; @@ -774,7 +774,7 @@ public void directHit(FlyingProjectile cannonball, org.bukkit.entity.Projectile public void detonate(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { this.plugin.logDebug("detonate cannonball"); - Projectile projectile = cannonball.getProjectile().clone(); + BukkitProjectile projectile = cannonball.getProjectile().clone(); Player player = Bukkit.getPlayer(cannonball.getShooterUID()); boolean canceled = false; @@ -929,7 +929,7 @@ public boolean wasAffectedByCannons(Player player) { * @param cannonball exploding cannonball */ private void clusterExplosions(FlyingProjectile cannonball) { - final Projectile projectile = cannonball.getProjectile(); + final BukkitProjectile projectile = cannonball.getProjectile(); if (!projectile.isClusterExplosionsEnabled()) { return; @@ -946,7 +946,7 @@ private void clusterExplosions(FlyingProjectile cannonball) { @Override public void run(Object object) { FlyingProjectile cannonball = (FlyingProjectile) object; - Projectile proj = cannonball.getProjectile(); + BukkitProjectile proj = cannonball.getProjectile(); Location expLoc = CannonsUtil.randomPointInSphere(cannonball.getImpactLocation(), proj.getClusterExplosionsRadius()); @@ -974,7 +974,7 @@ private void teleportPlayer(FlyingProjectile cannonball, Player player) { if (player == null || cannonball == null) return; - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); Location impactLoc = cannonball.getImpactLocation(); Location teleLoc = null; @@ -1006,7 +1006,7 @@ else if (projectile.hasProperty(ProjectileProperties.OBSERVER)) { * @param cannonball the flying projectile */ private void damageEntity(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); Location impactLoc = cannonball.getImpactLocation(); // explosion effect @@ -1112,7 +1112,7 @@ private boolean deflectProjectile(FlyingProjectile cannonball) { public void run(Object object) { FlyingProjectile cannonball = (FlyingProjectile) object; - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); /* Location impactBlock = cannonball.getImpactBlock(); @@ -1151,11 +1151,11 @@ private void spawnProjectiles(FlyingProjectile cannonball) { public void run(Object object) { FlyingProjectile cannonball = (FlyingProjectile) object; - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); for (String strProj : projectile.getSpawnProjectiles()) { - Projectile newProjectiles = ProjectileStorage.getInstance().getByName(strProj); + BukkitProjectile newProjectiles = ProjectileStorage.getInstance().getByName(strProj); if (newProjectiles == null) { CreateExplosion.this.plugin.logSevere( "Can't use spawnProjectile " + strProj + " because Projectile does not exist"); @@ -1185,7 +1185,7 @@ public void run(Object object) { */ private void spawnFireworks(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { World world = cannonball.getWorld(); - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); FireworkEffect.Builder fireworkBuilder = projectile.getFireworkEffect(); FireworkEffect fireworkEffect = fireworkBuilder.build(); @@ -1221,7 +1221,7 @@ public void run(Object object) { * @param impactLoc Location of the explosion * @param sound Which sound is broadcasted */ - public void sendExplosionToPlayers(Projectile proj, Location impactLoc, BukkitSoundHolder sound) { + public void sendExplosionToPlayers(BukkitProjectile proj, Location impactLoc, BukkitSoundHolder sound) { SoundUtils.imitateSound(impactLoc, sound, this.config.getImitatedSoundMaximumDistance(), this.config.getImitatedSoundMaximumVolume()); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index 30997254..b85929c8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -1,7 +1,7 @@ package at.pavlov.cannons; import at.pavlov.bukkit.factory.VectorUtils; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.internal.enums.BreakCause; import at.pavlov.internal.enums.FakeBlockType; @@ -246,7 +246,7 @@ public MessageEnum fire(Cannon cannon, UUID playerUid, boolean autoload, boolean if (fireEvent.isCancelled()) return null; - Projectile projectile = cannon.getLoadedProjectile(); + BukkitProjectile projectile = cannon.getLoadedProjectile(); //reset after firing cannon.setLastFired(System.currentTimeMillis()); //this cannon is now firing @@ -321,7 +321,7 @@ public void run(Object object) { */ private void fireTask(Cannon cannon, UUID shooter, boolean removeCharge, ProjectileCause projectileCause) { CannonDesign design = cannon.getCannonDesign(); - Projectile projectile = cannon.getLoadedProjectile(); + BukkitProjectile projectile = cannon.getLoadedProjectile(); //the player might be null if not online Player onlinePlayer = Bukkit.getPlayer(shooter); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index fa33cc58..0ce92ca2 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -6,7 +6,7 @@ import at.pavlov.bukkit.cannons.CannonDesignHolder; import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitBlock; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.BreakCause; @@ -61,8 +61,8 @@ public class Cannon implements CannonBukkit, CannonDesignHolder, Rotational { private CannonMainData mainData; private CannonPosition cannonPosition; - private AmmoLoadingData ammoLoadingData = new AmmoLoadingData<>(); - private FiringData firingData = new FiringData<>(); + private AmmoLoadingData ammoLoadingData = new AmmoLoadingData<>(); + private FiringData firingData = new FiringData<>(); private AimingData aimingData = new AimingData(); private AngleData angleData = new AngleData(); @@ -110,7 +110,7 @@ public Cannon(CannonDesign design, UUID world, CannonVector cannonOffset, BlockF int defaultLoadedGunpowder = !design.isGunpowderNeeded() || design.isPreloaded() ? design.getMaxLoadableGunpowderNormal() : 0; this.ammoLoadingData.setLoadedGunpowder(defaultLoadedGunpowder); - Projectile defaultLoadedProjectile = design.isPreloaded() ? this.getDefaultProjectile(this) : null; + BukkitProjectile defaultLoadedProjectile = design.isPreloaded() ? this.getDefaultProjectile(this) : null; this.ammoLoadingData.setLoadedProjectile(defaultLoadedProjectile); firingData.setLastFiredProjectile(null); firingData.setLastFiredGunpowder(0); @@ -192,7 +192,7 @@ public MessageEnum reloadFromChests(UUID player, boolean consumesAmmo) { // find a loadable projectile in the chests for (Inventory inv : invlist) { for (ItemStack item : inv.getContents()) { - Projectile projectile = ProjectileStorage.getProjectile(this, item); + BukkitProjectile projectile = ProjectileStorage.getProjectile(this, item); if (projectile == null) continue; @@ -432,7 +432,7 @@ public MessageEnum loadGunpowder(Player player) { * @param player - who is loading the cannon * @return - a message which can be displayed */ - public MessageEnum loadProjectile(Projectile projectile, Player player) { + public MessageEnum loadProjectile(BukkitProjectile projectile, Player player) { //fire event CannonUseEvent useEvent = new CannonUseEvent(this, player.getUniqueId(), InteractAction.LOAD_PROJECTILE); Bukkit.getServer().getPluginManager().callEvent(useEvent); @@ -478,7 +478,7 @@ public MessageEnum loadProjectile(Projectile projectile, Player player) { * * @return default Projectile */ - public Projectile getDefaultProjectile(Cannon cannon) { + public BukkitProjectile getDefaultProjectile(Cannon cannon) { if (!this.getCannonDesign().getAllowedProjectiles().isEmpty()) return ProjectileStorage.getProjectile(cannon, this.getCannonDesign().getAllowedProjectiles().get(0)); return null; @@ -510,7 +510,7 @@ private MessageEnum CheckPermGunpowder(Player player) { * @param playerUid - whose permissions are checked * @return true if the player and cannons can load the projectile */ - private MessageEnum CheckPermProjectile(Projectile projectile, UUID playerUid) { + private MessageEnum CheckPermProjectile(BukkitProjectile projectile, UUID playerUid) { return CheckPermProjectile(projectile, Bukkit.getPlayer(playerUid)); } @@ -520,7 +520,7 @@ private MessageEnum CheckPermProjectile(Projectile projectile, UUID playerUid) { * @param player - whose permissions are checked * @return true if the player and cannons can load the projectile */ - private MessageEnum CheckPermProjectile(Projectile projectile, Player player) { + private MessageEnum CheckPermProjectile(BukkitProjectile projectile, Player player) { if (player != null) { //if the player is not the owner of this gun if (this.getOwner() != null && !this.getOwner().equals(player.getUniqueId()) && design.isAccessForOwnerOnly()) @@ -1180,7 +1180,7 @@ public boolean coolCannon(Player player, Location effectLoc) { public CannonVector getFiringVector(boolean addSpread, boolean usePlayerSpread) { if (firingData.getLastFiredProjectile() == null && ammoLoadingData.getLoadedProjectile() == null) return noVelocity.clone(); - Projectile projectile = ammoLoadingData.getLoadedProjectile(); + BukkitProjectile projectile = ammoLoadingData.getLoadedProjectile(); if (projectile == null) projectile = firingData.getLastFiredProjectile(); @@ -1401,7 +1401,7 @@ public void setLastUser(UUID lastUser) { public boolean isFiring() { //check if firing is finished and not reseted (after server restart) - Projectile projectile = getLoadedProjectile(); + BukkitProjectile projectile = getLoadedProjectile(); //delayTime is the time how long the firing should take long delayTime = (long) (design.getFuseBurnTime() * 1000.); if (projectile != null) @@ -1412,7 +1412,7 @@ public boolean isFiring() { public boolean finishedFiringAndLoading() { //check if firing is finished and not reseted (after server restart) - Projectile projectile = getLoadedProjectile(); + BukkitProjectile projectile = getLoadedProjectile(); //delayTime is the time how long the firing should take long delayTime = (long) ((design.getFuseBurnTime() + design.getLoadTime()) * 1000.); if (projectile != null) @@ -1759,13 +1759,13 @@ public MessageEnum addCannonOperator(UUID playerID, Boolean masterCannon) { } @Override - public FiringData getFiringData() { + public FiringData getFiringData() { this.hasUpdated(); return this.firingData; } @Override - public void setFiringData(FiringData firingData) { + public void setFiringData(FiringData firingData) { this.hasUpdated(); this.firingData = firingData; } @@ -1843,13 +1843,13 @@ public void setAngleData(AngleData angleData) { } @Override - public AmmoLoadingData getAmmoLoadingData() { + public AmmoLoadingData getAmmoLoadingData() { this.hasUpdated(); return ammoLoadingData; } @Override - public void setAmmoLoadingData(AmmoLoadingData ammoLoadingData) { + public void setAmmoLoadingData(AmmoLoadingData ammoLoadingData) { this.hasUpdated(); this.ammoLoadingData = ammoLoadingData; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java index 7ee46513..7b239de6 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java @@ -16,7 +16,7 @@ import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.PersistenceDatabase; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.utils.CannonSelector; import at.pavlov.cannons.utils.CannonsUtil; @@ -185,7 +185,7 @@ public static void onCreate(Player player, String arg) { @CommandPermission("cannons.admin.give") public static void onGive(Player player, String projectileString, @Default("1") int amount) { //check if the projectile id is valid - Projectile projectile = ProjectileStorage.getProjectile(projectileString); + BukkitProjectile projectile = ProjectileStorage.getProjectile(projectileString); if (projectile == null) { String out = StringUtils.join(ProjectileStorage.getProjectileIds(), ", "); sendMessage(player, ChatColor.RED + tag + "Design not found. Available designs are: " + out); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java index 28de2d6f..3f3e184c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.config; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.cannon.Cannon; @@ -395,7 +395,7 @@ private String parseCannonMessageData(String original, Cannon cannon) { * @param projectile fired projectile * @return death message */ - public String getDeathMessage(UUID killed, UUID shooter, Cannon cannon, Projectile projectile) { + public String getDeathMessage(UUID killed, UUID shooter, Cannon cannon, BukkitProjectile projectile) { MessageEnum messageEnum = switch (random.nextInt(3)) { case 1 -> MessageEnum.DeathMessage2; case 2 -> MessageEnum.DeathMessage3; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java index 0ff42faa..bef662cb 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java @@ -1,9 +1,9 @@ package at.pavlov.cannons.container; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import java.util.UUID; -public record DeathCause(Projectile projectile, UUID cannonUID, UUID shooterUID) { +public record DeathCause(BukkitProjectile projectile, UUID cannonUID, UUID shooterUID) { } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java index 782ac435..60885bee 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.dao; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; @@ -75,7 +75,7 @@ public void run() { // load projectile // if no projectile is found, set it to air - Projectile projectile = cannon.getLoadedProjectile(); + BukkitProjectile projectile = cannon.getLoadedProjectile(); if (projectile != null) { preparedStatement.setString(11,projectile.getProjectileID()); } else { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonPreLoadEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonPreLoadEvent.java index e7254a34..7859dcc5 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonPreLoadEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonPreLoadEvent.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.event; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.cannon.Cannon; import org.bukkit.entity.Player; import org.bukkit.event.Event; @@ -10,10 +10,10 @@ public class CannonPreLoadEvent extends Event { private static final HandlerList handlers = new HandlerList(); private final Cannon cannon; - private Projectile projectile; + private BukkitProjectile projectile; private final Player player; - public CannonPreLoadEvent(Cannon cannon, Projectile projectile, Player player) { + public CannonPreLoadEvent(Cannon cannon, BukkitProjectile projectile, Player player) { this.cannon = cannon; this.projectile = projectile; this.player = player; @@ -31,11 +31,11 @@ public Cannon getCannon() { return cannon; } - public Projectile getProjectile() { + public BukkitProjectile getProjectile() { return projectile; } - public void setProjectile(Projectile projectile) { + public void setProjectile(BukkitProjectile projectile) { this.projectile = projectile; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonsEntityDeathEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonsEntityDeathEvent.java index ebc690a3..4bc7d750 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonsEntityDeathEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonsEntityDeathEvent.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.event; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; @@ -11,12 +11,12 @@ public class CannonsEntityDeathEvent extends Event { private static final HandlerList handlers = new HandlerList(); private LivingEntity killedEntity; - private Projectile projectile; + private BukkitProjectile projectile; private UUID cannonID; private UUID shooter; private boolean cancelled; - public CannonsEntityDeathEvent(LivingEntity killedEntity, Projectile projectile, UUID cannonID, UUID shooter) + public CannonsEntityDeathEvent(LivingEntity killedEntity, BukkitProjectile projectile, UUID cannonID, UUID shooter) { this.killedEntity = killedEntity; this.projectile = projectile; @@ -25,11 +25,11 @@ public CannonsEntityDeathEvent(LivingEntity killedEntity, Projectile projectile, this.cancelled = false; } - public Projectile getProjectile() { + public BukkitProjectile getProjectile() { return projectile; } - public void setProjectile(Projectile projectile) { + public void setProjectile(BukkitProjectile projectile) { this.projectile = projectile; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectileImpactEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectileImpactEvent.java index ab112632..ef88cde0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectileImpactEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectileImpactEvent.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.event; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import org.bukkit.Location; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; @@ -9,12 +9,12 @@ public class ProjectileImpactEvent extends Event { private static final HandlerList handlers = new HandlerList(); - private Projectile projectile; + private BukkitProjectile projectile; private Location impactLocation; private final UUID shooter; private boolean cancelled; - public ProjectileImpactEvent(Projectile projectile, Location impactLocation, UUID shooter) { + public ProjectileImpactEvent(BukkitProjectile projectile, Location impactLocation, UUID shooter) { this.projectile = projectile; this.impactLocation = impactLocation; this.shooter = shooter; @@ -33,11 +33,11 @@ public void setImpactLocation(Location impactLocation) { this.impactLocation = impactLocation; } - public Projectile getProjectile() { + public BukkitProjectile getProjectile() { return this.projectile; } - public void setProjectile(Projectile projectile) { + public void setProjectile(BukkitProjectile projectile) { this.projectile = projectile; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectilePiercingEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectilePiercingEvent.java index fba28e1c..40f409de 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectilePiercingEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/ProjectilePiercingEvent.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.event; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.event.Cancellable; @@ -11,12 +11,12 @@ public class ProjectilePiercingEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); - private Projectile projectile; + private BukkitProjectile projectile; private Location impactLocation; private List blockList; private boolean cancelled; - public ProjectilePiercingEvent(Projectile projectile, Location impactLocation, List blockList) { + public ProjectilePiercingEvent(BukkitProjectile projectile, Location impactLocation, List blockList) { this.projectile = projectile; this.impactLocation = impactLocation; this.blockList = blockList; @@ -32,11 +32,11 @@ public void setImpactLocation(Location impactLocation) { this.impactLocation = impactLocation; } - public Projectile getProjectile() { + public BukkitProjectile getProjectile() { return projectile; } - public void setProjectile(Projectile projectile) { + public void setProjectile(BukkitProjectile projectile) { this.projectile = projectile; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java index e945c4cc..231f3a06 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.listener; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; @@ -121,7 +121,7 @@ public void PlayerBucketEmpty(PlayerBucketEmptyEvent event) if (cannon != null) { // data =-1 means no data check, all buckets are allowed - Projectile projectile = ProjectileStorage.getProjectile(cannon, event.getItemStack()); + BukkitProjectile projectile = ProjectileStorage.getProjectile(cannon, event.getItemStack()); if (projectile != null) event.setCancelled(true); } } @@ -480,7 +480,7 @@ private boolean setAngle(Cannon cannon, ItemStack eventitem, Block clickedBlock, } private boolean isLoadProjectile(Cannon cannon, ItemStack eventitem, Block clickedBlock, PlayerInteractEvent event) { - Projectile projectile = ProjectileStorage.getProjectile(cannon, eventitem); + BukkitProjectile projectile = ProjectileStorage.getProjectile(cannon, eventitem); if (!cannon.isLoadingBlock(clickedBlock.getLocation()) || projectile == null) { return false; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java index 7fe76ac9..72c73db4 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.projectile; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.container.MovingObject; import io.papermc.lib.PaperLib; @@ -25,7 +25,7 @@ public class FlyingProjectile private final UUID worldUID; @Setter @Getter private UUID cannonUID; - private final Projectile projectile; + private final BukkitProjectile projectile; private final org.bukkit.projectiles.ProjectileSource source; //location of the shooterUID before firing - important for teleporting the player back - observer property private final Location playerlocation; @@ -48,7 +48,7 @@ public class FlyingProjectile private final MovingObject predictor; - public FlyingProjectile(Projectile projectile, org.bukkit.entity.Projectile projectile_entity, UUID shooterUID, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, UUID cannonId, ProjectileCause projectileCause) + public FlyingProjectile(BukkitProjectile projectile, org.bukkit.entity.Projectile projectile_entity, UUID shooterUID, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, UUID cannonId, ProjectileCause projectileCause) { //Validate.notNull(shooterUID, "shooterUID for the projectile can't be null"); this.entityUID = projectile_entity.getUniqueId(); @@ -94,7 +94,7 @@ public org.bukkit.entity.Projectile getProjectileEntity() { return (org.bukkit.entity.Projectile) Bukkit.getEntity(entityUID); } - public Projectile getProjectile() + public BukkitProjectile getProjectile() { return projectile; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index 854b7a5b..1f24034a 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.projectile; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; import at.pavlov.internal.enums.ProjectileCause; @@ -43,7 +43,7 @@ private ProjectileManager(Cannons plugin) { this.plugin = plugin; } - public org.bukkit.entity.Projectile spawnProjectile(Projectile projectile, UUID shooter, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, Location spawnLoc, Vector velocity, UUID cannonId, ProjectileCause projectileCause) + public org.bukkit.entity.Projectile spawnProjectile(BukkitProjectile projectile, UUID shooter, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, Location spawnLoc, Vector velocity, UUID cannonId, ProjectileCause projectileCause) { Validate.notNull(shooter, "shooter for the projectile can't be null"); World world = spawnLoc.getWorld(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index 8169283a..72325bbf 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -3,7 +3,7 @@ import at.pavlov.bukkit.builders.ParticleBuilder; import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.bukkit.utils.FileUtils; import at.pavlov.cannons.Cannons; @@ -30,7 +30,7 @@ public class ProjectileStorage @Getter private static ProjectileStorage instance = null; - private static List projectileList; + private static List projectileList; private ProjectileStorage(Cannons plugin) { @@ -50,7 +50,7 @@ public static void initialize(Cannons plugin) { */ public static ArrayList getProjectileIds(){ ArrayList list = new ArrayList<>(); - for (Projectile proj : projectileList){ + for (BukkitProjectile proj : projectileList){ list.add(proj.getProjectileID()); } return list; @@ -61,7 +61,7 @@ public static ArrayList getProjectileIds(){ * @param item ItemStack of projectile * @return true if there is a projectile with this material */ - public static Projectile getProjectile(Cannon cannon, ItemStack item) + public static BukkitProjectile getProjectile(Cannon cannon, ItemStack item) { BukkitItemHolder materialHolder = BukkitItemHolder.from(item); return getProjectile(cannon, materialHolder); @@ -72,9 +72,9 @@ public static Projectile getProjectile(Cannon cannon, ItemStack item) * @param materialHolder material of the projectile * @return true if there is a projectile with this material */ - public static Projectile getProjectile(Cannon cannon, BukkitItemHolder materialHolder) + public static BukkitProjectile getProjectile(Cannon cannon, BukkitItemHolder materialHolder) { - for (Projectile projectile : projectileList) + for (BukkitProjectile projectile : projectileList) { if (cannon.getCannonDesign().canLoad(projectile) && !projectile.getLoadingItem().check(Material.AIR) && projectile.check(materialHolder)) return projectile; @@ -88,9 +88,9 @@ public static Projectile getProjectile(Cannon cannon, BukkitItemHolder materialH * @param projectileId id of the projectile * @return true if there is a projectile with this id */ - public static Projectile getProjectile(Cannon cannon, String projectileId) + public static BukkitProjectile getProjectile(Cannon cannon, String projectileId) { - for (Projectile projectile : projectileList) + for (BukkitProjectile projectile : projectileList) { if (cannon.getCannonDesign().canLoad(projectile) && projectile.check(projectileId)) return projectile; @@ -103,9 +103,9 @@ public static Projectile getProjectile(Cannon cannon, String projectileId) * @param projectileId id of the projectile * @return true if there is a projectile with this id */ - public static Projectile getProjectile(String projectileId) + public static BukkitProjectile getProjectile(String projectileId) { - for (Projectile projectile : projectileList) + for (BukkitProjectile projectile : projectileList) { if (projectile.check(projectileId)) return projectile; @@ -142,7 +142,7 @@ public void loadProjectiles() for (String file : projectileFileList) { //load .yml - Projectile projectile = loadYml(file); + BukkitProjectile projectile = loadYml(file); if (projectile != null) { plugin.logDebug("load projectile " + file + " item " + projectile.getLoadingItem().toString()); projectileList.add(projectile); @@ -193,11 +193,11 @@ private ArrayList getProjectilesFiles() * @param ymlFile * of the cannon config file */ - private Projectile loadYml(String ymlFile) + private BukkitProjectile loadYml(String ymlFile) { //create a new projectile String id = CannonsUtil.removeExtension(ymlFile); - Projectile projectile = new Projectile(id); + BukkitProjectile projectile = new BukkitProjectile(id); // load .yml file File projectileFile = new File(getPath() + ymlFile); @@ -418,9 +418,9 @@ private List toColor(List stringList) * @param str * @return */ - public Projectile getByName(String str) + public BukkitProjectile getByName(String str) { - for (Projectile projectile : projectileList) + for (BukkitProjectile projectile : projectileList) { if (projectile.getProjectileID().equalsIgnoreCase(str)) return projectile; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index b3bde5f4..b576718d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -2,7 +2,7 @@ import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; @@ -158,7 +158,7 @@ private void updateTeleporter(FlyingProjectile cannonball, org.bukkit.entity.Pro return; //if projectile has HUMAN_CANNONBALL or OBSERVER - update player position - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); if (!projectile.hasProperty(ProjectileProperties.HUMAN_CANNONBALL) && !projectile.hasProperty(ProjectileProperties.OBSERVER)) { return; } @@ -232,7 +232,7 @@ private boolean updateProjectileLocation(FlyingProjectile cannonball, org.bukkit * @param projectile_entity the entity of the projectile */ private void updateSmokeTrail(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { - Projectile proj = cannonball.getProjectile(); + BukkitProjectile proj = cannonball.getProjectile(); int maxDist = plugin.getMyConfig().getImitatedBlockMaximumDistance(); double smokeDist = proj.getSmokeTrailDistance()*(0.5 + random.nextDouble()); double smokeDuration = proj.getSmokeTrailDuration()*(0.5 + random.nextGaussian()); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index 03f42a4b..5918f213 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.utils; -import at.pavlov.bukkit.projectile.Projectile; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.cannons.Cannons; @@ -359,7 +359,7 @@ public static void teleportBack(FlyingProjectile cannonball) { if (player == null) return; - Projectile projectile = cannonball.getProjectile(); + BukkitProjectile projectile = cannonball.getProjectile(); Location teleLoc = null; //teleport the player back to the location before firing From 68067d131f9742e889ee11dbe494e548f4731196 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 18:46:20 +0100 Subject: [PATCH 56/97] Fix Projectile --- .../main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java index 3fc28cd4..00de233f 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java @@ -20,7 +20,7 @@ import java.util.List; public class BukkitProjectile extends Projectile< - Entity, + EntityType, PotionEffectType, BlockData, ParticleBuilder, From 4f999c6a20acbe121177ef4cf4d6d5bf39eead8b Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 19:05:33 +0100 Subject: [PATCH 57/97] Fix projectile (again) --- .../bukkit/projectile/BukkitProjectile.java | 21 +++++++------ .../internal/projectile/Projectile.java | 31 ++----------------- 2 files changed, 15 insertions(+), 37 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java index 00de233f..b55b5f60 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java @@ -5,20 +5,13 @@ import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitEntityHolder; import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; -import at.pavlov.internal.CannonLogger; -import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.internal.projectile.Projectile; -import lombok.Data; import org.bukkit.FireworkEffect; import org.bukkit.block.data.BlockData; -import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffectType; -import java.util.ArrayList; -import java.util.List; - public class BukkitProjectile extends Projectile< EntityType, PotionEffectType, @@ -27,8 +20,9 @@ public class BukkitProjectile extends Projectile< FireworkEffect.Builder, BukkitItemHolder, BukkitSpawnMaterialHolder, - BukkitSoundHolder - > { + BukkitSoundHolder, + BukkitEntityHolder + > implements Cloneable { public BukkitProjectile(String id) { super(id); @@ -52,4 +46,13 @@ public boolean hasPermission(Player player) { //player has all permissions return true; } + + @Override + public BukkitProjectile clone() { + try { + return (BukkitProjectile) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } } diff --git a/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java b/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java index d53d1cf0..002e59ef 100644 --- a/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java +++ b/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java @@ -1,6 +1,5 @@ package at.pavlov.internal.projectile; -import at.pavlov.internal.CannonLogger; import at.pavlov.internal.container.ItemHolder; import at.pavlov.internal.container.SoundHolder; import at.pavlov.internal.container.SpawnEntityHolder; @@ -21,7 +20,8 @@ abstract public class Projectile< Firework, IH extends ItemHolder, SMH extends SpawnMaterialHolder, - SH extends SoundHolder + SH extends SoundHolder, + SEH extends SpawnEntityHolder > implements Cloneable { protected String projectileID; protected String projectileName; @@ -82,7 +82,7 @@ abstract public class Projectile< protected double spawnEntityRadius; protected double spawnVelocity; protected List spawnBlocks = new ArrayList<>(); - protected List> spawnEntities = new ArrayList<>(); + protected List spawnEntities = new ArrayList<>(); protected List spawnProjectiles; //spawn Fireworks @@ -105,31 +105,6 @@ public Projectile(String id) { this.projectileID = id; } - @Override - public Projectile clone() { - try { - // call clone in Object. - return (Projectile) super.clone(); - } catch (CloneNotSupportedException e) { - CannonLogger.getLogger().info("Cloning not allowed."); - return this; - } - } - /** * returns true if both the id and data are equivalent of data == -1 * From 013c5330f3017d2d027b272ce3b222aab5eb2ec9 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 19:06:48 +0100 Subject: [PATCH 58/97] Run optimize imports --- .../pavlov/bukkit/cannons/CannonDesign.java | 4 +-- .../bukkit/projectile/BukkitProjectile.java | 4 +-- .../internal/container/SimpleBlock.java | 1 + .../at/pavlov/cannons/API/CannonsAPI.java | 4 +-- .../main/java/at/pavlov/cannons/Aiming.java | 14 ++++---- .../main/java/at/pavlov/cannons/Cannons.java | 16 ++++++---- .../at/pavlov/cannons/CreateExplosion.java | 12 +++---- .../java/at/pavlov/cannons/FireCannon.java | 24 ++++++++------ .../java/at/pavlov/cannons/cannon/Cannon.java | 32 +++++++++---------- .../pavlov/cannons/cannon/CannonManager.java | 14 ++++---- .../pavlov/cannons/cannon/DesignStorage.java | 6 ++-- .../at/pavlov/cannons/commands/Commands.java | 23 ++++++++----- .../pavlov/cannons/config/UserMessages.java | 2 +- .../at/pavlov/cannons/container/Target.java | 9 ++++-- .../at/pavlov/cannons/dao/LoadCannonTask.java | 4 +-- .../cannons/dao/wrappers/FireTaskWrapper.java | 2 +- .../dao/wrappers/RemoveTaskWrapper.java | 2 +- .../event/CannonBeforeCreateEvent.java | 2 +- .../cannons/event/CannonDamageEvent.java | 2 +- .../cannons/event/CannonDestroyedEvent.java | 2 +- .../pavlov/cannons/event/CannonUseEvent.java | 2 +- .../hooks/papi/CannonsPAPIExpansion.java | 1 - .../cannons/listener/BlockListener.java | 2 +- .../cannons/listener/EntityListener.java | 7 ++-- .../cannons/listener/PlayerListener.java | 6 ++-- .../cannons/listener/RedstoneListener.java | 4 +-- .../cannons/listener/UpdateNotifier.java | 2 -- .../multiversion/ParticleResolver.java | 3 -- .../cannons/projectile/FlyingProjectile.java | 2 +- .../cannons/projectile/ProjectileManager.java | 2 +- .../cannons/projectile/ProjectileStorage.java | 4 +-- .../cannons/scheduler/FakeBlockHandler.java | 2 +- .../cannons/scheduler/ProjectileObserver.java | 6 ++-- .../pavlov/cannons/utils/CannonSelector.java | 4 +-- .../at/pavlov/cannons/utils/CannonsUtil.java | 18 ++++++++--- .../cannons/utils/DesignComparator.java | 2 +- .../at/pavlov/cannons/utils/ParseUtils.java | 2 +- 37 files changed, 137 insertions(+), 111 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java index 2f374255..70fcab60 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java @@ -1,9 +1,9 @@ package at.pavlov.bukkit.cannons; +import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; -import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.BukkitBlock; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.CannonLogger; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java index b55b5f60..3a5cdac6 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java @@ -1,9 +1,9 @@ package at.pavlov.bukkit.projectile; import at.pavlov.bukkit.builders.ParticleBuilder; -import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitEntityHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; import at.pavlov.internal.projectile.Projectile; import org.bukkit.FireworkEffect; diff --git a/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java b/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java index 772fb95d..1797be47 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java @@ -2,6 +2,7 @@ import lombok.Data; + import java.util.function.Function; @Data abstract public class SimpleBlock { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java index 301d3323..4a6b8a2e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java @@ -1,11 +1,11 @@ package at.pavlov.cannons.API; import at.pavlov.cannons.Cannons; +import at.pavlov.cannons.cannon.Cannon; +import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.internal.enums.BreakCause; import at.pavlov.internal.enums.InteractAction; import at.pavlov.internal.enums.MessageEnum; -import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.cannon.CannonManager; import net.countercraft.movecraft.MovecraftLocation; import net.countercraft.movecraft.craft.Craft; import net.countercraft.movecraft.craft.PilotedCraft; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index 07eef890..e61bd302 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -1,15 +1,11 @@ package at.pavlov.cannons; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.factory.VectorUtils; -import at.pavlov.internal.container.location.CannonVector; -import at.pavlov.internal.enums.FakeBlockType; -import at.pavlov.internal.enums.InteractAction; -import at.pavlov.internal.enums.MessageEnum; -import at.pavlov.internal.enums.TargetType; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.aim.GunAngles; import at.pavlov.cannons.aim.GunAnglesWrapper; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.config.Config; @@ -20,10 +16,14 @@ import at.pavlov.cannons.event.CannonLinkAimingEvent; import at.pavlov.cannons.event.CannonTargetEvent; import at.pavlov.cannons.event.CannonUseEvent; -import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.scheduler.FakeBlockHandler; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.enums.FakeBlockType; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.internal.enums.TargetType; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.Location; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java index 86d70de7..fb919263 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java @@ -1,8 +1,6 @@ package at.pavlov.cannons; import at.pavlov.cannons.API.CannonsAPI; -import at.pavlov.internal.CannonLogger; -import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.cannon.DesignStorage; @@ -12,20 +10,26 @@ import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.PersistenceDatabase; -import at.pavlov.cannons.hooks.movecraft.MovecraftHook; -import at.pavlov.cannons.hooks.papi.PlaceholderAPIHook; import at.pavlov.cannons.hooks.VaultHook; +import at.pavlov.cannons.hooks.movecraft.MovecraftHook; import at.pavlov.cannons.hooks.movecraft.type.MaxCannonsProperty; import at.pavlov.cannons.hooks.movecraftcombat.MovecraftCombatHook; -import at.pavlov.cannons.listener.*; +import at.pavlov.cannons.hooks.papi.PlaceholderAPIHook; +import at.pavlov.cannons.listener.BlockListener; +import at.pavlov.cannons.listener.EntityListener; +import at.pavlov.cannons.listener.PlayerListener; +import at.pavlov.cannons.listener.RedstoneListener; +import at.pavlov.cannons.listener.UpdateNotifier; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.scheduler.FakeBlockHandler; import at.pavlov.cannons.scheduler.ProjectileObserver; import at.pavlov.cannons.utils.CannonSelector; +import at.pavlov.internal.CannonLogger; +import at.pavlov.internal.ModrinthUpdateChecker; +import at.pavlov.internal.enums.MessageEnum; import at.pavlov.internal.hooks.Hook; import at.pavlov.internal.hooks.HookManager; -import at.pavlov.internal.ModrinthUpdateChecker; import lombok.Getter; import net.milkbowl.vault.economy.Economy; import org.bstats.bukkit.Metrics; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index d0dd7da3..61b06b3b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -1,14 +1,9 @@ package at.pavlov.cannons; -import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitEntityHolder; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.internal.enums.ProjectileProperties; -import at.pavlov.internal.enums.DamageType; -import at.pavlov.internal.enums.EntityDataType; -import at.pavlov.internal.enums.FakeBlockType; -import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.container.DeathCause; import at.pavlov.cannons.dao.AsyncTaskManager; @@ -27,6 +22,11 @@ import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.ParseUtils; import at.pavlov.cannons.utils.SoundUtils; +import at.pavlov.internal.enums.DamageType; +import at.pavlov.internal.enums.EntityDataType; +import at.pavlov.internal.enums.FakeBlockType; +import at.pavlov.internal.enums.ProjectileCause; +import at.pavlov.internal.enums.ProjectileProperties; import io.papermc.lib.PaperLib; import lombok.Getter; import org.bukkit.Bukkit; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index b85929c8..7e975a6f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -1,28 +1,28 @@ package at.pavlov.cannons; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.internal.enums.ProjectileProperties; -import at.pavlov.internal.enums.BreakCause; -import at.pavlov.internal.enums.FakeBlockType; -import at.pavlov.internal.enums.InteractAction; -import at.pavlov.internal.enums.MessageEnum; -import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.cannons.dao.DelayedTask; +import at.pavlov.cannons.dao.wrappers.FireTaskWrapper; import at.pavlov.cannons.event.CannonFireEvent; import at.pavlov.cannons.event.CannonLinkFiringEvent; import at.pavlov.cannons.event.CannonUseEvent; import at.pavlov.cannons.multiversion.ParticleResolver; import at.pavlov.cannons.multiversion.PotionTypeResolver; import at.pavlov.cannons.projectile.ProjectileManager; -import at.pavlov.cannons.dao.DelayedTask; -import at.pavlov.cannons.dao.wrappers.FireTaskWrapper; import at.pavlov.cannons.scheduler.FakeBlockHandler; import at.pavlov.cannons.utils.SoundUtils; +import at.pavlov.internal.enums.BreakCause; +import at.pavlov.internal.enums.FakeBlockType; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.internal.enums.ProjectileCause; +import at.pavlov.internal.enums.ProjectileProperties; import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.GameMode; @@ -37,7 +37,11 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.util.Vector; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import java.util.UUID; public class FireCannon { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index 0ce92ca2..546c7115 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -1,36 +1,36 @@ package at.pavlov.cannons.cannon; -import at.pavlov.bukkit.container.BukkitCannonBlocks; import at.pavlov.bukkit.cannons.CannonBukkit; import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.cannons.CannonDesignHolder; -import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitBlock; +import at.pavlov.bukkit.container.BukkitCannonBlocks; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.container.location.CannonVector; -import at.pavlov.internal.enums.BreakCause; -import at.pavlov.internal.enums.CannonRotation; -import at.pavlov.internal.enums.InteractAction; -import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.cannons.event.CannonDestroyedEvent; +import at.pavlov.cannons.event.CannonGunpowderLoadEvent; +import at.pavlov.cannons.event.CannonPreLoadEvent; +import at.pavlov.cannons.event.CannonUseEvent; +import at.pavlov.cannons.projectile.ProjectileStorage; +import at.pavlov.cannons.utils.CannonsUtil; +import at.pavlov.cannons.utils.InventoryManagement; +import at.pavlov.cannons.utils.SoundUtils; import at.pavlov.internal.cannons.data.AimingData; import at.pavlov.internal.cannons.data.AmmoLoadingData; import at.pavlov.internal.cannons.data.AngleData; import at.pavlov.internal.cannons.data.CannonMainData; import at.pavlov.internal.cannons.data.CannonPosition; +import at.pavlov.internal.cannons.data.FiringData; import at.pavlov.internal.cannons.data.LinkingData; import at.pavlov.internal.cannons.data.SentryData; import at.pavlov.internal.cannons.data.WhitelistData; -import at.pavlov.internal.cannons.data.FiringData; -import at.pavlov.cannons.event.CannonDestroyedEvent; -import at.pavlov.cannons.event.CannonGunpowderLoadEvent; -import at.pavlov.cannons.event.CannonPreLoadEvent; -import at.pavlov.cannons.event.CannonUseEvent; import at.pavlov.internal.cannons.functionalities.Rotational; -import at.pavlov.cannons.projectile.ProjectileStorage; -import at.pavlov.cannons.utils.CannonsUtil; -import at.pavlov.cannons.utils.InventoryManagement; -import at.pavlov.cannons.utils.SoundUtils; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.enums.BreakCause; +import at.pavlov.internal.enums.CannonRotation; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.Validate; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 19ef7705..60529d17 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -1,25 +1,25 @@ package at.pavlov.cannons.cannon; import at.pavlov.bukkit.cannons.CannonDesign; -import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitBlock; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.projectile.ProjectileStorage; -import at.pavlov.internal.container.location.CannonVector; -import at.pavlov.internal.enums.BreakCause; -import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.cannons.dao.DelayedTask; import at.pavlov.cannons.dao.LoadWhitelistTask; +import at.pavlov.cannons.dao.wrappers.RemoveTaskWrapper; import at.pavlov.cannons.event.CannonAfterCreateEvent; import at.pavlov.cannons.event.CannonBeforeCreateEvent; import at.pavlov.cannons.event.CannonRenameEvent; -import at.pavlov.cannons.dao.DelayedTask; -import at.pavlov.cannons.dao.wrappers.RemoveTaskWrapper; +import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.utils.SoundUtils; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.enums.BreakCause; +import at.pavlov.internal.enums.MessageEnum; import lombok.Getter; import org.apache.commons.lang3.Validate; import org.bukkit.Bukkit; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index f95de01b..81b07fe8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -1,10 +1,10 @@ package at.pavlov.cannons.cannon; -import at.pavlov.bukkit.container.BukkitCannonBlocks; import at.pavlov.bukkit.cannons.CannonDesign; -import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitBlock; +import at.pavlov.bukkit.container.BukkitCannonBlocks; +import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.container.DesignFileName; import at.pavlov.cannons.utils.CannonsUtil; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java index 7b239de6..8fdc06bf 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java @@ -1,27 +1,34 @@ package at.pavlov.cannons.commands; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.factory.VectorUtils; +import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.container.location.CannonVector; -import at.pavlov.internal.enums.BreakCause; -import at.pavlov.internal.enums.CommandList; -import at.pavlov.internal.enums.MessageEnum; -import at.pavlov.internal.enums.SelectCannon; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.PersistenceDatabase; -import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.utils.CannonSelector; import at.pavlov.cannons.utils.CannonsUtil; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.enums.BreakCause; +import at.pavlov.internal.enums.CommandList; +import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.internal.enums.SelectCannon; import co.aikar.commands.BaseCommand; -import co.aikar.commands.annotation.*; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandCompletion; +import co.aikar.commands.annotation.CommandPermission; +import co.aikar.commands.annotation.Default; +import co.aikar.commands.annotation.HelpCommand; +import co.aikar.commands.annotation.Optional; +import co.aikar.commands.annotation.Subcommand; +import co.aikar.commands.annotation.Syntax; import org.apache.commons.lang3.StringUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java index 3f3e184c..b4acaaa9 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java @@ -2,10 +2,10 @@ import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.utils.CannonsUtil; +import at.pavlov.internal.enums.MessageEnum; import lombok.Getter; import org.apache.commons.lang3.StringUtils; import org.bukkit.Bukkit; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java index 028940b8..744f2d3e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java @@ -1,10 +1,15 @@ package at.pavlov.cannons.container; import at.pavlov.bukkit.factory.VectorUtils; -import at.pavlov.internal.enums.TargetType; import at.pavlov.cannons.cannon.Cannon; +import at.pavlov.internal.enums.TargetType; import org.bukkit.Location; -import org.bukkit.entity.*; +import org.bukkit.entity.Animals; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Monster; +import org.bukkit.entity.Player; import org.bukkit.util.Vector; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java index c0bd3a88..4a630f39 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java @@ -1,12 +1,12 @@ package at.pavlov.cannons.dao; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.DesignStorage; -import at.pavlov.cannons.scheduler.RunnableAsync; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.scheduler.CreateCannon; +import at.pavlov.cannons.scheduler.RunnableAsync; import at.pavlov.internal.container.location.CannonVector; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java index c78e18b7..08c74e4c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.dao.wrappers; -import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.cannon.Cannon; +import at.pavlov.internal.enums.ProjectileCause; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java index 1c85a121..35390f4b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.dao.wrappers; -import at.pavlov.internal.enums.BreakCause; import at.pavlov.cannons.cannon.Cannon; +import at.pavlov.internal.enums.BreakCause; public class RemoveTaskWrapper { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonBeforeCreateEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonBeforeCreateEvent.java index 043e3ba9..2ba3db97 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonBeforeCreateEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonBeforeCreateEvent.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.event; -import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.cannon.Cannon; +import at.pavlov.internal.enums.MessageEnum; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java index 449fbef5..e8117883 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.event; -import at.pavlov.internal.enums.DamageType; import at.pavlov.cannons.projectile.FlyingProjectile; +import at.pavlov.internal.enums.DamageType; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDestroyedEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDestroyedEvent.java index 2ba01e46..86a9c442 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDestroyedEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDestroyedEvent.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.event; -import at.pavlov.internal.enums.BreakCause; import at.pavlov.cannons.cannon.Cannon; +import at.pavlov.internal.enums.BreakCause; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonUseEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonUseEvent.java index a37a7ab0..6a11f4dc 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonUseEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonUseEvent.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.event; -import at.pavlov.internal.enums.InteractAction; import at.pavlov.cannons.cannon.Cannon; +import at.pavlov.internal.enums.InteractAction; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java index 868b5f2a..7ed3c0f0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java @@ -3,7 +3,6 @@ import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; - import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.OfflinePlayer; import org.jetbrains.annotations.NotNull; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java index a4ea7663..7a73fcd9 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java @@ -3,11 +3,11 @@ import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.enums.BreakCause; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.multiversion.EventResolver; import at.pavlov.cannons.utils.CannonSelector; +import at.pavlov.internal.enums.BreakCause; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java index 2300542a..0d148f4e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java @@ -2,15 +2,18 @@ import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.enums.BreakCause; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.projectile.ProjectileManager; +import at.pavlov.internal.enums.BreakCause; import org.bukkit.block.Block; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.entity.*; +import org.bukkit.event.entity.EntityDamageByBlockEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.ProjectileHitEvent; import java.util.HashSet; import java.util.List; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java index 231f3a06..627925d3 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java @@ -1,14 +1,12 @@ package at.pavlov.cannons.listener; +import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; -import at.pavlov.internal.enums.InteractAction; -import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.FireCannon; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.bukkit.cannons.CannonDesign; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; @@ -19,6 +17,8 @@ import at.pavlov.cannons.utils.CannonSelector; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Sound; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java index 78ae1b23..38abf3b5 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/RedstoneListener.java @@ -1,13 +1,13 @@ package at.pavlov.cannons.listener; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.enums.InteractAction; -import at.pavlov.internal.enums.MessageEnum; import at.pavlov.cannons.FireCannon; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.utils.CannonsUtil; +import at.pavlov.internal.enums.InteractAction; +import at.pavlov.internal.enums.MessageEnum; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/UpdateNotifier.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/UpdateNotifier.java index 92b35311..faec2caa 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/UpdateNotifier.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/UpdateNotifier.java @@ -1,8 +1,6 @@ package at.pavlov.cannons.listener; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.dao.AsyncTaskManager; -import at.pavlov.internal.ModrinthUpdateChecker; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/multiversion/ParticleResolver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/multiversion/ParticleResolver.java index 382eb658..705799c2 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/multiversion/ParticleResolver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/multiversion/ParticleResolver.java @@ -1,10 +1,7 @@ package at.pavlov.cannons.multiversion; -import at.pavlov.cannons.Cannons; import org.bukkit.Particle; -import java.lang.reflect.Field; - public class ParticleResolver { private static final int[] version = VersionHandler.getVersion(); private static Particle explosion; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java index 72c73db4..cce48dce 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java @@ -1,8 +1,8 @@ package at.pavlov.cannons.projectile; import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.container.MovingObject; +import at.pavlov.internal.enums.ProjectileCause; import io.papermc.lib.PaperLib; import lombok.Getter; import lombok.Setter; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index 1f24034a..7b2b0b62 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -3,9 +3,9 @@ import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; -import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.DelayedTask; +import at.pavlov.internal.enums.ProjectileCause; import org.apache.commons.lang3.Validate; import org.bukkit.Location; import org.bukkit.World; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index 72325bbf..b97c795e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -1,15 +1,15 @@ package at.pavlov.cannons.projectile; import at.pavlov.bukkit.builders.ParticleBuilder; -import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.bukkit.utils.FileUtils; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.ParseUtils; +import at.pavlov.internal.enums.ProjectileProperties; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.FireworkEffect; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java index 0bb63101..f6bb3bcb 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java @@ -1,10 +1,10 @@ package at.pavlov.cannons.scheduler; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.enums.FakeBlockType; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.container.FakeBlockEntry; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.internal.enums.FakeBlockType; import lombok.Getter; import org.bukkit.Location; import org.bukkit.Particle; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index b576718d..f4693c9e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -1,17 +1,17 @@ package at.pavlov.cannons.scheduler; -import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; -import at.pavlov.internal.enums.FakeBlockType; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.projectile.FlyingProjectile; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; +import at.pavlov.internal.enums.FakeBlockType; +import at.pavlov.internal.enums.ProjectileProperties; import io.papermc.lib.PaperLib; import org.bukkit.Bukkit; import org.bukkit.Location; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonSelector.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonSelector.java index e99f5d35..54985a41 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonSelector.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonSelector.java @@ -1,11 +1,11 @@ package at.pavlov.cannons.utils; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.enums.MessageEnum; -import at.pavlov.internal.enums.SelectCannon; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.config.UserMessages; +import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.internal.enums.SelectCannon; import lombok.Getter; import net.milkbowl.vault.economy.EconomyResponse; import org.bukkit.OfflinePlayer; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index 5918f213..8aafeb27 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -1,16 +1,21 @@ package at.pavlov.cannons.utils; import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.internal.container.location.CannonVector; -import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.TargetManager; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.cannons.container.*; +import at.pavlov.cannons.container.Target; import at.pavlov.cannons.projectile.FlyingProjectile; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.enums.ProjectileProperties; import io.papermc.lib.PaperLib; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; @@ -25,7 +30,10 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Random; +import java.util.UUID; import java.util.logging.Level; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java index 092129ea..d4328d56 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.utils; -import at.pavlov.cannons.Cannons; import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.cannons.Cannons; import org.bukkit.block.BlockFace; import java.util.Comparator; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java index becaaa61..1629763a 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.utils; -import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitEntityHolder; +import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; import at.pavlov.cannons.Cannons; import org.bukkit.Bukkit; From 6319d368b4059b4d9a9441b69d3b0bd56ef40e33 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 19:19:55 +0100 Subject: [PATCH 59/97] Cleanup FakeBlockEntry --- .../pavlov/cannons/container/FakeBlockEntry.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java index 8b44f269..55f244d7 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java @@ -76,12 +76,20 @@ public int hashCode() { return hash; } + public boolean samePosition(FakeBlockEntry entry) { + return this.locX == entry.getLocX() && this.locY == entry.getLocY() && this.locZ == entry.getLocZ(); + } + @Override public boolean equals(Object obj) { - FakeBlockEntry obj2 = (FakeBlockEntry) obj; - return this.type == obj2.getType() && - this.locX == obj2.getLocX() && this.locY == obj2.getLocY() && this.locZ == obj2.getLocZ() && this.world.equals(obj2.getWorld()) - && this.player.equals(obj2.getPlayer()); + if (!(obj instanceof FakeBlockEntry entry)) { + return false; + } + + return this.type == entry.getType() + && this.samePosition(entry) + && this.world.equals(entry.getWorld()) + && this.player.equals(entry.getPlayer()); } } From 59b4e2f4d1602d0e81e651176ddd63aed3e27689 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 19:20:43 +0100 Subject: [PATCH 60/97] FileUtils and DesignFileName cleanup --- .../at/pavlov/internal/utils/FileUtils.java | 73 +++++++++++++++++++ .../internal/various/DesignFileName.java | 65 +++++++++++++++++ .../pavlov/cannons/cannon/DesignStorage.java | 52 +------------ .../cannons/container/DesignFileName.java | 10 --- 4 files changed, 140 insertions(+), 60 deletions(-) create mode 100644 api-internal/src/main/java/at/pavlov/internal/utils/FileUtils.java create mode 100644 api-internal/src/main/java/at/pavlov/internal/various/DesignFileName.java delete mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/container/DesignFileName.java diff --git a/api-internal/src/main/java/at/pavlov/internal/utils/FileUtils.java b/api-internal/src/main/java/at/pavlov/internal/utils/FileUtils.java new file mode 100644 index 00000000..ff90b194 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/utils/FileUtils.java @@ -0,0 +1,73 @@ +package at.pavlov.internal.utils; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; + +public class FileUtils { + /** + * changes the extension of the a string (e.g. classic.yml to + * classic.schematic) + * + * @param originalName + * @param newExtension + * @return + */ + public static String changeExtension(String originalName, String newExtension) { + int lastDot = originalName.lastIndexOf("."); + if (lastDot != -1) { + return originalName.substring(0, lastDot) + newExtension; + } else { + return originalName + newExtension; + } + } + + /** + * removes the extrions of a filename like classic.yml + * @param str + * @return + */ + public static String removeExtension(String str) + { + return str.substring(0, str.lastIndexOf('.')); + } + + /** + * return true if the folder is empty + * @param folderPath + * @return + */ + public static boolean isFolderEmpty(String folderPath) { + File file = new File(folderPath); + if (!file.isDirectory()) { + return true; + } + + if (file.list().length > 0) { + //folder is not empty + return false; + } + return true; + } + + /** + * copies a file form the .jar to the disk + * @param in + * @param file + */ + public static void copyFile(InputStream in, File file) { + try { + OutputStream out = new FileOutputStream(file); + byte[] buf = new byte[1024]; + int len; + while((len=in.read(buf))>0){ + out.write(buf,0,len); + } + out.close(); + in.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/api-internal/src/main/java/at/pavlov/internal/various/DesignFileName.java b/api-internal/src/main/java/at/pavlov/internal/various/DesignFileName.java new file mode 100644 index 00000000..dfe40cdf --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/various/DesignFileName.java @@ -0,0 +1,65 @@ +package at.pavlov.internal.various; + +import at.pavlov.internal.CannonLogger; +import at.pavlov.internal.utils.FileUtils; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.io.File; +import java.util.ArrayList; +import java.util.logging.Logger; + +@AllArgsConstructor +@Data public class DesignFileName { + private String ymlString; + private String schematicString; + + /** + * returns a list with valid cannon designs (.yml + .schematic) + * + * @return + */ + public static ArrayList getDesignFiles(String path) { + ArrayList designList = new ArrayList<>(); + Logger logger = CannonLogger.getLogger(); + + try { + // check plugin/cannons/designs for .yml and .schematic files + String ymlFile; + File folder = new File(path); + + File[] listOfFiles = folder.listFiles(); + if (listOfFiles == null) { + logger.severe("Design folder empty"); + return designList; + } + + + for (File listOfFile : listOfFiles) { + if (!listOfFile.isFile()) { + continue; + } + + ymlFile = listOfFile.getName(); + if (!ymlFile.endsWith(".yml") && !ymlFile.endsWith(".yaml")) { + continue; + } + + String schematicFile = FileUtils.changeExtension(ymlFile, ".schematic"); + String schemFile = FileUtils.changeExtension(ymlFile, ".schem"); + if (new File(path + schematicFile).isFile()) { + // there is a shematic file and a .yml file + designList.add(new DesignFileName(ymlFile, schematicFile)); + } else if (new File(path + schemFile).isFile()) { + // there is a shematic file and a .yml file + designList.add(new DesignFileName(ymlFile, schemFile)); + } else { + logger.severe(schematicFile + " is missing"); + } + } + } catch (Exception e) { + logger.severe("Error while checking yml and schematic " + e); + } + return designList; + } +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index 81b07fe8..65dba0d2 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -6,7 +6,7 @@ import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.container.DesignFileName; +import at.pavlov.internal.various.DesignFileName; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.DesignComparator; import at.pavlov.cannons.utils.ParseUtils; @@ -91,7 +91,7 @@ public void loadCannonDesigns() copyDefaultDesigns(); } - ArrayList designFileList = getDesignFiles(); + ArrayList designFileList = DesignFileName.getDesignFiles(getPath()); // stop if there are no files found if (designFileList == null || designFileList.isEmpty()) @@ -129,54 +129,6 @@ public void loadCannonDesigns() } - /** - * returns a list with valid cannon designs (.yml + .schematic) - * - * @return - */ - private ArrayList getDesignFiles() { - ArrayList designList = new ArrayList<>(); - - try { - // check plugin/cannons/designs for .yml and .schematic files - String ymlFile; - File folder = new File(getPath()); - - File[] listOfFiles = folder.listFiles(); - if (listOfFiles == null) { - plugin.logSevere("Design folder empty"); - return designList; - } - - - for (File listOfFile : listOfFiles) { - if (!listOfFile.isFile()) { - continue; - } - - ymlFile = listOfFile.getName(); - if (!ymlFile.endsWith(".yml") && !ymlFile.endsWith(".yaml")) { - continue; - } - - String schematicFile = CannonsUtil.changeExtension(ymlFile, ".schematic"); - String schemFile = CannonsUtil.changeExtension(ymlFile, ".schem"); - if (new File(getPath() + schematicFile).isFile()) { - // there is a shematic file and a .yml file - designList.add(new DesignFileName(ymlFile, schematicFile)); - } else if (new File(getPath() + schemFile).isFile()) { - // there is a shematic file and a .yml file - designList.add(new DesignFileName(ymlFile, schemFile)); - } else { - plugin.logSevere(schematicFile + " is missing"); - } - } - } catch (Exception e) { - plugin.logSevere("Error while checking yml and schematic " + e); - } - return designList; - } - /** * loads the config for one cannon from the .yml file * @param cannonDesign design of the cannon diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DesignFileName.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DesignFileName.java deleted file mode 100644 index fb34d477..00000000 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DesignFileName.java +++ /dev/null @@ -1,10 +0,0 @@ -package at.pavlov.cannons.container; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@AllArgsConstructor -@Data public class DesignFileName { - private String ymlString; - private String schematicString; -} From c5be70f2d71cbd1fe350c838339aa6bcd7eb7d93 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 19:24:46 +0100 Subject: [PATCH 61/97] Use FileUtils and remove methods from CannonsUtil --- .../{FileUtils.java => FileReadUtils.java} | 2 +- .../pavlov/cannons/cannon/DesignStorage.java | 9 +-- .../java/at/pavlov/cannons/config/Config.java | 4 +- .../pavlov/cannons/config/UserMessages.java | 5 +- .../cannons/projectile/ProjectileStorage.java | 11 ++-- .../at/pavlov/cannons/utils/CannonsUtil.java | 64 ------------------- 6 files changed, 17 insertions(+), 78 deletions(-) rename api-bukkit/src/main/java/at/pavlov/bukkit/utils/{FileUtils.java => FileReadUtils.java} (96%) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/utils/FileUtils.java b/api-bukkit/src/main/java/at/pavlov/bukkit/utils/FileReadUtils.java similarity index 96% rename from api-bukkit/src/main/java/at/pavlov/bukkit/utils/FileUtils.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/utils/FileReadUtils.java index 66356367..0ed79103 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/utils/FileUtils.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/utils/FileReadUtils.java @@ -4,7 +4,7 @@ import org.bukkit.Particle; import org.bukkit.configuration.file.FileConfiguration; -public class FileUtils { +public class FileReadUtils { public static ParticleBuilder readParticleBuilder(FileConfiguration cfg, String key) { var k = key + "."; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index 65dba0d2..d354d6f7 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -6,6 +6,7 @@ import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.cannons.Cannons; +import at.pavlov.internal.utils.FileUtils; import at.pavlov.internal.various.DesignFileName; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.DesignComparator; @@ -84,7 +85,7 @@ public void loadCannonDesigns() cannonDesignList.clear(); // check if design folder is empty or does not exist - if (CannonsUtil.isFolderEmpty(getPath())) + if (FileUtils.isFolderEmpty(getPath())) { // the folder is empty, copy defaults plugin.logInfo("No cannon designs loaded - loading default designs"); @@ -143,7 +144,7 @@ private void loadDesignYml(CannonDesign cannonDesign, String ymlFile) // load all entries of the config file // general - cannonDesign.setDesignID(CannonsUtil.removeExtension(ymlFile)); + cannonDesign.setDesignID(FileUtils.removeExtension(ymlFile)); cannonDesign.setDesignName(cannonDesignConfig.getString("general.designName", "no cannonName")); cannonDesign.setMessageName(cannonDesignConfig.getString("general.messageName", "no messageName")); cannonDesign.setDescription(cannonDesignConfig.getString("general.description", "no description for this cannon")); @@ -591,11 +592,11 @@ private void copyFile(String fileName) SchematicFile.getParentFile().mkdirs(); if (!YmlFile.exists()) { - CannonsUtil.copyFile(plugin.getResource("designs/" + fileName + ".yml"), YmlFile); + FileUtils.copyFile(plugin.getResource("designs/" + fileName + ".yml"), YmlFile); } if (!SchematicFile.exists()) { - CannonsUtil.copyFile(plugin.getResource("designs/" + fileName + ".schematic"), SchematicFile); + FileUtils.copyFile(plugin.getResource("designs/" + fileName + ".schematic"), SchematicFile); } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java index 8db30352..683a3705 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java @@ -3,7 +3,7 @@ import at.pavlov.bukkit.builders.ParticleBuilder; import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.utils.FileUtils; +import at.pavlov.bukkit.utils.FileReadUtils; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.multiversion.ParticleResolver; import at.pavlov.cannons.utils.ArmorCalculationUtil; @@ -185,7 +185,7 @@ public void loadConfig() { setImitatedAimingTime(config.getDouble("imitatedEffects.aiming.time", 1.0)); setImitatedAimingParticleEnabled(config.getBoolean("imitatedEffects.aiming.particles.enabled", false)); - setImitatedAimingParticle(FileUtils.readParticleBuilder(config, "imitatedEffects.aiming.particles")); + setImitatedAimingParticle(FileReadUtils.readParticleBuilder(config, "imitatedEffects.aiming.particles")); //imitated firing effects setImitatedFiringEffectEnabled(config.getBoolean("imitatedEffects.firing.enabled", false)); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java index b4acaaa9..fa3100dc 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java @@ -6,6 +6,7 @@ import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.internal.enums.MessageEnum; +import at.pavlov.internal.utils.FileUtils; import lombok.Getter; import org.apache.commons.lang3.StringUtils; import org.bukkit.Bukkit; @@ -60,12 +61,12 @@ public void loadLanguage() { localizationGerman.getParentFile().mkdirs(); if (!localizationGerman.exists()) { - CannonsUtil.copyFile(plugin.getResource("localization/localization_german.yml"), localizationGerman); + FileUtils.copyFile(plugin.getResource("localization/localization_german.yml"), localizationGerman); } //copy english language File localizationEnglish = new File(plugin.getDataFolder(), "localization/localization_english.yml"); if (!localizationEnglish.exists()) { - CannonsUtil.copyFile(plugin.getResource("localization/localization.yml"), localizationEnglish); + FileUtils.copyFile(plugin.getResource("localization/localization.yml"), localizationEnglish); } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index b97c795e..a7e0189f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -4,12 +4,13 @@ import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.container.BukkitSoundHolder; import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.bukkit.utils.FileUtils; +import at.pavlov.bukkit.utils.FileReadUtils; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.ParseUtils; import at.pavlov.internal.enums.ProjectileProperties; +import at.pavlov.internal.utils.FileUtils; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.FireworkEffect; @@ -125,7 +126,7 @@ public void loadProjectiles() //load defaults if there no projectile folder // check if design folder is empty or does not exist - if (CannonsUtil.isFolderEmpty(getPath())) + if (FileUtils.isFolderEmpty(getPath())) { // the folder is empty, copy defaults plugin.logInfo("No projectiles loaded - loading default projectiles"); @@ -196,7 +197,7 @@ private ArrayList getProjectilesFiles() private BukkitProjectile loadYml(String ymlFile) { //create a new projectile - String id = CannonsUtil.removeExtension(ymlFile); + String id = FileUtils.removeExtension(ymlFile); BukkitProjectile projectile = new BukkitProjectile(id); // load .yml file @@ -236,7 +237,7 @@ private BukkitProjectile loadYml(String ymlFile) projectile.setSmokeTrailParticleEnabled(projectileConfig.getBoolean("smokeTrail.particles.enabled", false)); //smokeTrail Particle - ParticleBuilder pb = FileUtils.readParticleBuilder(projectileConfig, "smokeTrail.particles"); + ParticleBuilder pb = FileReadUtils.readParticleBuilder(projectileConfig, "smokeTrail.particles"); projectile.setSmokeTrailParticle(pb); //explosion @@ -331,7 +332,7 @@ private void copyFile(String filename) YmlFile.getParentFile().mkdirs(); if (!YmlFile.exists()) { - CannonsUtil.copyFile(plugin.getResource("projectiles/" + filename + ".yml"), YmlFile); + FileUtils.copyFile(plugin.getResource("projectiles/" + filename + ".yml"), YmlFile); } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index 8aafeb27..fa3c538b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -40,70 +40,6 @@ public class CannonsUtil { private static final Random random = new Random(); - /** - * changes the extension of the a string (e.g. classic.yml to - * classic.schematic) - * - * @param originalName - * @param newExtension - * @return - */ - public static String changeExtension(String originalName, String newExtension) { - int lastDot = originalName.lastIndexOf("."); - if (lastDot != -1) { - return originalName.substring(0, lastDot) + newExtension; - } else { - return originalName + newExtension; - } - } - - /** - * removes the extrions of a filename like classic.yml - * @param str - * @return - */ - public static String removeExtension(String str) - { - return str.substring(0, str.lastIndexOf('.')); - } - - /** - * return true if the folder is empty - * @param folderPath - * @return - */ - public static boolean isFolderEmpty(String folderPath) { - File file = new File(folderPath); - if (!file.isDirectory()) { - return true; - } - - if (file.list().length > 0) { - //folder is not empty - return false; - } - return true; - } - - /** - * copies a file form the .jar to the disk - * @param in - * @param file - */ - public static void copyFile(InputStream in, File file) { - try { - OutputStream out = new FileOutputStream(file); - byte[] buf = new byte[1024]; - int len; - while((len=in.read(buf))>0){ - out.write(buf,0,len); - } - out.close(); - in.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } /** From 228383d86eebf0b57ea0dd926819becf2ab4d727 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 19:27:11 +0100 Subject: [PATCH 62/97] Move NumberTricks --- .../at/pavlov/internal/container/location/CannonVector.java | 2 +- .../main/java/at/pavlov/internal/{ => utils}/NumberTricks.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename api-internal/src/main/java/at/pavlov/internal/{ => utils}/NumberTricks.java (96%) diff --git a/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java b/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java index 3da0a48f..56140fa0 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java @@ -1,6 +1,6 @@ package at.pavlov.internal.container.location; -import at.pavlov.internal.NumberTricks; +import at.pavlov.internal.utils.NumberTricks; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/api-internal/src/main/java/at/pavlov/internal/NumberTricks.java b/api-internal/src/main/java/at/pavlov/internal/utils/NumberTricks.java similarity index 96% rename from api-internal/src/main/java/at/pavlov/internal/NumberTricks.java rename to api-internal/src/main/java/at/pavlov/internal/utils/NumberTricks.java index 90a4b2b4..b710d8f7 100644 --- a/api-internal/src/main/java/at/pavlov/internal/NumberTricks.java +++ b/api-internal/src/main/java/at/pavlov/internal/utils/NumberTricks.java @@ -1,4 +1,4 @@ -package at.pavlov.internal; +package at.pavlov.internal.utils; import lombok.experimental.UtilityClass; From 28205ea5452c61b7cef67fedc2f5b859060e8764 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 20:58:43 +0100 Subject: [PATCH 63/97] Projectile Manager & Storage cleanup --- .../java/at/pavlov/cannons/cannon/Cannon.java | 4 +- .../pavlov/cannons/cannon/CannonManager.java | 2 +- .../at/pavlov/cannons/commands/Commands.java | 4 +- .../at/pavlov/cannons/dao/LoadCannonTask.java | 2 +- .../cannons/listener/PlayerListener.java | 4 +- .../cannons/projectile/ProjectileManager.java | 80 +- .../cannons/projectile/ProjectileStorage.java | 851 +++++++++--------- 7 files changed, 455 insertions(+), 492 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index 546c7115..5b5552cb 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -192,7 +192,7 @@ public MessageEnum reloadFromChests(UUID player, boolean consumesAmmo) { // find a loadable projectile in the chests for (Inventory inv : invlist) { for (ItemStack item : inv.getContents()) { - BukkitProjectile projectile = ProjectileStorage.getProjectile(this, item); + BukkitProjectile projectile = ProjectileStorage.getInstance().getProjectile(this, item); if (projectile == null) continue; @@ -480,7 +480,7 @@ public MessageEnum loadProjectile(BukkitProjectile projectile, Player player) { */ public BukkitProjectile getDefaultProjectile(Cannon cannon) { if (!this.getCannonDesign().getAllowedProjectiles().isEmpty()) - return ProjectileStorage.getProjectile(cannon, this.getCannonDesign().getAllowedProjectiles().get(0)); + return ProjectileStorage.getInstance().getProjectile(cannon, this.getCannonDesign().getAllowedProjectiles().get(0)); return null; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 60529d17..1efdfd9b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -877,7 +877,7 @@ public void updateCannons() { cannon.setCannonDesign(DesignStorage.getInstance().getDesign(cannon)); if (cannon.getLoadedProjectile() != null) { BukkitItemHolder item = cannon.getLoadedProjectile().getLoadingItem(); - cannon.setLoadedProjectile(ProjectileStorage.getProjectile(cannon, item)); + cannon.setLoadedProjectile(ProjectileStorage.getInstance().getProjectile(cannon, item)); } } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java index 8fdc06bf..9cba1467 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java @@ -192,9 +192,9 @@ public static void onCreate(Player player, String arg) { @CommandPermission("cannons.admin.give") public static void onGive(Player player, String projectileString, @Default("1") int amount) { //check if the projectile id is valid - BukkitProjectile projectile = ProjectileStorage.getProjectile(projectileString); + BukkitProjectile projectile = ProjectileStorage.getInstance().getProjectile(projectileString); if (projectile == null) { - String out = StringUtils.join(ProjectileStorage.getProjectileIds(), ", "); + String out = StringUtils.join(ProjectileStorage.getInstance().getProjectileIds(), ", "); sendMessage(player, ChatColor.RED + tag + "Design not found. Available designs are: " + out); return; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java index 4a630f39..ea079d7d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java @@ -90,7 +90,7 @@ public void run() { cannon.setLoadedGunpowder(rs.getInt("gunpowder")); //load projectile - cannon.setLoadedProjectile(ProjectileStorage.getProjectile(cannon, rs.getString("projectile_id"))); + cannon.setLoadedProjectile(ProjectileStorage.getInstance().getProjectile(cannon, rs.getString("projectile_id"))); cannon.setProjectilePushed(rs.getInt("projectile_pushed")); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java index 627925d3..51081ac4 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java @@ -121,7 +121,7 @@ public void PlayerBucketEmpty(PlayerBucketEmptyEvent event) if (cannon != null) { // data =-1 means no data check, all buckets are allowed - BukkitProjectile projectile = ProjectileStorage.getProjectile(cannon, event.getItemStack()); + BukkitProjectile projectile = ProjectileStorage.getInstance().getProjectile(cannon, event.getItemStack()); if (projectile != null) event.setCancelled(true); } } @@ -480,7 +480,7 @@ private boolean setAngle(Cannon cannon, ItemStack eventitem, Block clickedBlock, } private boolean isLoadProjectile(Cannon cannon, ItemStack eventitem, Block clickedBlock, PlayerInteractEvent event) { - BukkitProjectile projectile = ProjectileStorage.getProjectile(cannon, eventitem); + BukkitProjectile projectile = ProjectileStorage.getInstance().getProjectile(cannon, eventitem); if (!cannon.isLoadingBlock(clickedBlock.getLocation()) || projectile == null) { return false; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index 7b2b0b62..d37e0790 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -6,19 +6,21 @@ import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.DelayedTask; import at.pavlov.internal.enums.ProjectileCause; +import lombok.Getter; import org.apache.commons.lang3.Validate; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; import org.bukkit.util.Vector; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -public class ProjectileManager -{ +public class ProjectileManager { + @Getter private static ProjectileManager instance = null; private final Cannons plugin; @@ -31,42 +33,35 @@ public static void initialize(Cannons plugin) { instance = new ProjectileManager(plugin); } - public static ProjectileManager getInstance() { - return instance; - } - /** * ProjectileManager + * * @param plugin - Cannons instance */ private ProjectileManager(Cannons plugin) { this.plugin = plugin; } - public org.bukkit.entity.Projectile spawnProjectile(BukkitProjectile projectile, UUID shooter, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, Location spawnLoc, Vector velocity, UUID cannonId, ProjectileCause projectileCause) - { + public Projectile spawnProjectile(BukkitProjectile projectile, UUID shooter, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, Location spawnLoc, Vector velocity, UUID cannonId, ProjectileCause projectileCause) { Validate.notNull(shooter, "shooter for the projectile can't be null"); World world = spawnLoc.getWorld(); //set yaw, pitch for fireballs double v = velocity.length(); - spawnLoc.setPitch((float) (Math.acos(velocity.getY()/v)*180.0/Math.PI - 90)); - spawnLoc.setYaw((float) (Math.atan2(velocity.getZ(),velocity.getX())*180.0/Math.PI - 90)); + spawnLoc.setPitch((float) (Math.acos(velocity.getY() / v) * 180.0 / Math.PI - 90)); + spawnLoc.setYaw((float) (Math.atan2(velocity.getZ(), velocity.getX()) * 180.0 / Math.PI - 90)); Entity pEntity = world.spawnEntity(spawnLoc, projectile.getProjectileEntity()); //calculate firing vector pEntity.setVelocity(velocity); - org.bukkit.entity.Projectile projectileEntity; - try - { - projectileEntity = (org.bukkit.entity.Projectile) pEntity; - } - catch(Exception e) - { + Projectile projectileEntity; + try { + projectileEntity = (Projectile) pEntity; + } catch (Exception e) { plugin.logDebug("Can't convert EntityType " + pEntity.getType() + " to projectile. Using additional Snowball"); - projectileEntity = (org.bukkit.entity.Projectile) world.spawnEntity(spawnLoc, EntityType.SNOWBALL); + projectileEntity = (Projectile) world.spawnEntity(spawnLoc, EntityType.SNOWBALL); projectileEntity.setVelocity(velocity); } @@ -75,7 +70,6 @@ public org.bukkit.entity.Projectile spawnProjectile(BukkitProjectile projectile, //projectileEntity.setTicksLived(2); - //create a new flying projectile container FlyingProjectile cannonball = new FlyingProjectile(projectile, projectileEntity, shooter, source, playerLoc, cannonId, projectileCause); @@ -89,28 +83,25 @@ public org.bukkit.entity.Projectile spawnProjectile(BukkitProjectile projectile, } - /** * detonate a timefused projectile mid air + * * @param cannonball - the cannonball to detonate */ - private void detonateTimefuse(final FlyingProjectile cannonball) - { + private void detonateTimefuse(final FlyingProjectile cannonball) { if (cannonball.getProjectile().getTimefuse() <= 0) { return; } //Delayed Task - AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask(cannonball.getUID()) - { - public void run(Object object) - { + AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask(cannonball.getUID()) { + public void run(Object object) { //find given UID in list FlyingProjectile fproj = flyingProjectilesMap.get(object); - if(fproj != null) { + if (fproj != null) { //detonate timefuse - org.bukkit.entity.Projectile projectile_entity = fproj.getProjectileEntity(); + Projectile projectile_entity = fproj.getProjectileEntity(); //the projectile might be null if (projectile_entity != null) { CreateExplosion.getInstance().detonate(cannonball, projectile_entity); @@ -118,23 +109,23 @@ public void run(Object object) } flyingProjectilesMap.remove(cannonball.getUID()); } - }}, (long) (cannonball.getProjectile().getTimefuse()*20)); + } + }, (long) (cannonball.getProjectile().getTimefuse() * 20)); } /** * detonates the given projectile entity + * * @param projectile - the projectile with this entity */ - public void detonateProjectile(Entity projectile) - { - if(projectile == null || !(projectile instanceof org.bukkit.entity.Projectile)) + public void detonateProjectile(Entity projectile) { + if (projectile == null || !(projectile instanceof Projectile)) return; FlyingProjectile fproj = flyingProjectilesMap.get(projectile.getUniqueId()); - if (fproj!=null) - { - CreateExplosion.getInstance().detonate(fproj, (org.bukkit.entity.Projectile) projectile); + if (fproj != null) { + CreateExplosion.getInstance().detonate(fproj, (Projectile) projectile); projectile.remove(); flyingProjectilesMap.remove(fproj.getUID()); } @@ -142,18 +133,19 @@ public void detonateProjectile(Entity projectile) /** * detonates the given projectile entity + * * @param cannonball - the projectile with this entity - * @param target the entity hit by the projectile + * @param target the entity hit by the projectile */ public void directHitProjectile(Entity cannonball, Entity target) { - if(cannonball == null || target == null) return; + if (cannonball == null || target == null) return; FlyingProjectile fproj = flyingProjectilesMap.get(cannonball.getUniqueId()); if (fproj == null) { return; } - org.bukkit.entity.Projectile projectile_entity = fproj.getProjectileEntity(); + Projectile projectile_entity = fproj.getProjectileEntity(); if (!fproj.hasDetonated() && cannonball.isValid()) { fproj.setDetonated(true); CreateExplosion.getInstance().directHit(fproj, projectile_entity, target); @@ -165,11 +157,11 @@ public void directHitProjectile(Entity cannonball, Entity target) { /** * returns true if the given entity is a cannonball projectile + * * @param projectile flying projectile * @return true if cannonball projectile */ - public boolean isFlyingProjectile(Entity projectile) - { + public boolean isFlyingProjectile(Entity projectile) { FlyingProjectile fproj = flyingProjectilesMap.get(projectile.getUniqueId()); return fproj != null; } @@ -177,21 +169,21 @@ public boolean isFlyingProjectile(Entity projectile) /** * returns the list of all flying projectiles + * * @return - the list of all flying projectiles */ - public ConcurrentHashMap getFlyingProjectiles() - { + public ConcurrentHashMap getFlyingProjectiles() { return flyingProjectilesMap; } /** * returns the projectile of which the player is passenger * if the player is attached to a projectile he will follow its movement + * * @param player is the passenger * @return the projectile or null */ - public FlyingProjectile getAttachedProjectile(Player player) - { + public FlyingProjectile getAttachedProjectile(Player player) { if (player == null) { return null; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index a7e0189f..9f1f68b2 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -7,7 +7,6 @@ import at.pavlov.bukkit.utils.FileReadUtils; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.ParseUtils; import at.pavlov.internal.enums.ProjectileProperties; import at.pavlov.internal.utils.FileUtils; @@ -25,444 +24,416 @@ import java.util.ArrayList; import java.util.List; -public class ProjectileStorage -{ - private final Cannons plugin; - @Getter - private static ProjectileStorage instance = null; - - private static List projectileList; - - private ProjectileStorage(Cannons plugin) - { - this.plugin = plugin; - projectileList = new ArrayList<>(); - } - - public static void initialize(Cannons plugin) { - if (instance == null) { - instance = new ProjectileStorage(plugin); - } - } - - /** - * returns a list of all projectiles names - * @return list of all projectiles names - */ - public static ArrayList getProjectileIds(){ - ArrayList list = new ArrayList<>(); - for (BukkitProjectile proj : projectileList){ - list.add(proj.getProjectileID()); - } - return list; - } - - /** - * returns the projectile that can be loaded with this item. If data=-1 the data is ignored - * @param item ItemStack of projectile - * @return true if there is a projectile with this material - */ - public static BukkitProjectile getProjectile(Cannon cannon, ItemStack item) - { - BukkitItemHolder materialHolder = BukkitItemHolder.from(item); - return getProjectile(cannon, materialHolder); - } - - /** - * returns the projectiles that can be loaded in the cannon with this id and data. If data=-1 the data is ignored - * @param materialHolder material of the projectile - * @return true if there is a projectile with this material - */ - public static BukkitProjectile getProjectile(Cannon cannon, BukkitItemHolder materialHolder) - { - for (BukkitProjectile projectile : projectileList) - { - if (cannon.getCannonDesign().canLoad(projectile) && !projectile.getLoadingItem().check(Material.AIR) && projectile.check(materialHolder)) - return projectile; - } - return null; - } - - - /** - * returns the projectiles that can be loaded in the cannon by projectile id (file name) - * @param projectileId id of the projectile - * @return true if there is a projectile with this id - */ - public static BukkitProjectile getProjectile(Cannon cannon, String projectileId) - { - for (BukkitProjectile projectile : projectileList) - { - if (cannon.getCannonDesign().canLoad(projectile) && projectile.check(projectileId)) - return projectile; - } - return null; - } - - /** - * returns the projectiles for the given id (file name) - * @param projectileId id of the projectile - * @return true if there is a projectile with this id - */ - public static BukkitProjectile getProjectile(String projectileId) - { - for (BukkitProjectile projectile : projectileList) - { - if (projectile.check(projectileId)) - return projectile; - } - return null; - } - - /** - * loads all projectile designs from the disk or copys the defaults if there is no design - */ - public void loadProjectiles() - { - plugin.logInfo("Loading projectile configs"); - - //clear old list - projectileList.clear(); - - //load defaults if there no projectile folder - // check if design folder is empty or does not exist - if (FileUtils.isFolderEmpty(getPath())) - { - // the folder is empty, copy defaults - plugin.logInfo("No projectiles loaded - loading default projectiles"); - copyDefaultProjectiles(); - } - - //get list of all files in /projectiles/ - ArrayList projectileFileList = getProjectilesFiles(); - - // stop if there are no files found - if (projectileFileList == null || projectileFileList.isEmpty()) - return; - - for (String file : projectileFileList) - { - //load .yml - BukkitProjectile projectile = loadYml(file); - if (projectile != null) { - plugin.logDebug("load projectile " + file + " item " + projectile.getLoadingItem().toString()); - projectileList.add(projectile); - } - } - } - - /** - * get all projectile file names form /projectiles - * @return list of all projectiles files - */ - private ArrayList getProjectilesFiles() - { - ArrayList projectileList = new ArrayList<>(); - - try - { - // check plugin/cannons/designs for .yml and .schematic files - String ymlFile; - File folder = new File(getPath()); - - File[] listOfFiles = folder.listFiles(); - if (listOfFiles == null) - { - plugin.logSevere("Projectile folder empty"); - return projectileList; - } - - for (File listOfFile : listOfFiles) { - if (listOfFile.isFile()) { - ymlFile = listOfFile.getName(); - if (ymlFile.endsWith(".yml") || ymlFile.endsWith(".yaml")) { - // there is a shematic file and a .yml file - projectileList.add(ymlFile); - } - } - } - } - catch (Exception e) - { - plugin.logSevere("Error while checking yml and schematic " + e); - } - return projectileList; - } - - /** - * loads the config for one cannon from the .yml file - * @param ymlFile - * of the cannon config file - */ - private BukkitProjectile loadYml(String ymlFile) - { - //create a new projectile - String id = FileUtils.removeExtension(ymlFile); - BukkitProjectile projectile = new BukkitProjectile(id); - // load .yml file - - File projectileFile = new File(getPath() + ymlFile); - FileConfiguration projectileConfig = YamlConfiguration.loadConfiguration(projectileFile); - - //load it from the disk - - //general - projectile.setProjectileName(projectileConfig.getString("general.projectileName", "noProjectileName")); - projectile.setDescription(projectileConfig.getString("general.description", "no description for this projectile")); - projectile.setItemName(projectileConfig.getString("general.itemName", "noItemName")); - projectile.setLoadingItem(BukkitItemHolder.from(projectileConfig.getString("general.loadingItem", "minecraft:cobblestone"))); - projectile.setAlternativeItemList(ParseUtils.toItemHolderList(projectileConfig.getStringList("general.alternativeId"))); - - //cannonball - projectile.setProjectileEntity(getProjectileEntity(projectileConfig.getString("cannonball.entityType", "SNOWBALL"))); - projectile.setProjectileOnFire(projectileConfig.getBoolean("cannonball.isOnFire", false)); - projectile.setVelocity(projectileConfig.getDouble("cannonball.velocity", 1.0)); - if (projectile.getVelocity() < 0.01) - plugin.logDebug("Low velocity of " + projectile.getVelocity() + " for projectile detected"); - projectile.setPenetration(projectileConfig.getDouble("cannonball.penetration", 0.0)); - projectile.setPenetrationDamage(projectileConfig.getBoolean("cannonball.doesPenetrationDamage", true)); - projectile.setTimefuse(projectileConfig.getDouble("cannonball.timefuse", 0.0)); - projectile.setAutomaticFiringDelay(projectileConfig.getDouble("cannonball.automaticFiringDelay", 1.0)); - projectile.setAutomaticFiringMagazineSize(projectileConfig.getInt("cannonball.automaticFiringMagazineSize", 1)); - projectile.setNumberOfBullets(projectileConfig.getInt("cannonball.numberOfBullets", 1)); - projectile.setSpreadMultiplier(projectileConfig.getDouble("cannonball.spreadMultiplier", 1.0)); - projectile.setSentryIgnoredBlocks(projectileConfig.getInt("cannonball.sentryIgnoredBlocks", 0)); - projectile.setPropertyList(toProperties(projectileConfig.getStringList("cannonball.properties"))); - - //smokeTrail - projectile.setSmokeTrailEnabled(projectileConfig.getBoolean("smokeTrail.enabled", false)); - projectile.setSmokeTrailDistance(projectileConfig.getInt("smokeTrail.distance", 10)); - projectile.setSmokeTrailMaterial(Bukkit.createBlockData(projectileConfig.getString("smokeTrail.material", "minecraft:cobweb"))); - projectile.setSmokeTrailDuration(projectileConfig.getDouble("smokeTrail.duration", 20.0)); - projectile.setSmokeTrailParticleEnabled(projectileConfig.getBoolean("smokeTrail.particles.enabled", false)); - - //smokeTrail Particle - ParticleBuilder pb = FileReadUtils.readParticleBuilder(projectileConfig, "smokeTrail.particles"); - projectile.setSmokeTrailParticle(pb); - - //explosion - projectile.setExplosionPower((float) projectileConfig.getDouble("explosion.explosionPower", 2.)); - projectile.setExplosionPowerDependsOnVelocity(projectileConfig.getBoolean("explosion.explosionPowerDependsOnVelocity", true)); - projectile.setExplosionDamage(projectileConfig.getBoolean("explosion.doesExplosionDamage", true)); - projectile.setUnderwaterDamage(projectileConfig.getBoolean("explosion.doesUnderwaterExplosion", false)); - projectile.setDirectHitDamage(projectileConfig.getDouble("explosion.directHitDamage", 5.0)); - projectile.setPlayerDamageRange(projectileConfig.getDouble("explosion.playerDamageRange", 3.0)); - projectile.setPlayerDamage(projectileConfig.getDouble("explosion.playerDamage", 5.0)); - projectile.setPotionRange(projectileConfig.getDouble("explosion.potionRange", 1.0)); - projectile.setPotionDuration(projectileConfig.getDouble("explosion.potionDuration", 1.0)); - projectile.setPotionAmplifier(projectileConfig.getInt("explosion.potionAmplifier", 0)); - projectile.setPotionsEffectList(toPotionEffect(projectileConfig.getStringList("explosion.potionEffects"))); - projectile.setImpactIndicator(projectileConfig.getBoolean("explosion.impactIndicator", true)); - - //cluster - projectile.setClusterExplosionsEnabled(projectileConfig.getBoolean("clusterExplosion.enabled", false)); - projectile.setClusterExplosionsInBlocks(projectileConfig.getBoolean("clusterExplosion.explosionInBlocks", false)); - projectile.setClusterExplosionsAmount(projectileConfig.getInt("clusterExplosion.amount", 5)); - if(projectile.getClusterExplosionsAmount() > 100){ - Cannons.getPlugin().logSevere("Max amount for cluster explosions is >100 and was reset to 5 to prevent lag."); - projectile.setClusterExplosionsAmount(5); - } - projectile.setClusterExplosionsMinDelay(projectileConfig.getDouble("clusterExplosion.minDelay", 0.0)); - projectile.setClusterExplosionsMaxDelay(projectileConfig.getDouble("clusterExplosion.maxDelay", 5.0)); - projectile.setClusterExplosionsRadius(projectileConfig.getDouble("clusterExplosion.radius", 5.0)); - projectile.setClusterExplosionsPower(projectileConfig.getDouble("clusterExplosion.power", 5.0)); - - //spawnOnExplosion - projectile.setSpawnEnabled(projectileConfig.getBoolean("spawnOnExplosion.enabled", false)); - projectile.setSpawnBlockRadius(projectileConfig.getDouble("spawnOnExplosion.blockRadius", 1.0)); - projectile.setSpawnEntityRadius(projectileConfig.getDouble("spawnOnExplosion.entityRadius", 2.0)); - projectile.setSpawnVelocity(projectileConfig.getDouble("spawnOnExplosion.velocity", 0.1)); - projectile.setSpawnBlocks(ParseUtils.toSpawnMaterialHolderList(projectileConfig.getStringList("spawnOnExplosion.block"))); - projectile.setSpawnEntities(ParseUtils.toSpawnEntityHolderList(projectileConfig.getStringList("spawnOnExplosion.entity"))); - projectile.setSpawnProjectiles(projectileConfig.getStringList("spawnOnExplosion.projectiles")); - - //spawnFireworks - projectile.setFireworksEnabled(projectileConfig.getBoolean("spawnFireworks.enabled", false)); - FireworkEffect.Builder fw = FireworkEffect.builder() - .flicker(projectileConfig.getBoolean("spawnFireworks.flicker",false)) - .trail(projectileConfig.getBoolean("spawnFireworks.trail",false)) - .with(getFireworksType(projectileConfig.getString("spawnFireworks.type", "BALL"))) - .withColor(toColor(projectileConfig.getStringList("spawnFireworks.colors"))) - .withFade(toColor(projectileConfig.getStringList("spawnFireworks.fadeColors"))); - - projectile.setFireworkEffect(fw); - - //messages - projectile.setImpactMessage(projectileConfig.getBoolean("messages.hasImpactMessage", false)); - - //sounds - projectile.setSoundLoading(new BukkitSoundHolder(projectileConfig.getString("sounds.loading", "BLOCK_STONE_PLACE:5:0.5"))); - projectile.setSoundImpact(new BukkitSoundHolder(projectileConfig.getString("sounds.impact", "ENTITY_GENERIC_EXPLODE:10:0.5"))); - projectile.setSoundImpactProtected(new BukkitSoundHolder(projectileConfig.getString("sounds.impactProtected", "ENTITY_GENERIC_EXPLODE:10:0.5"))); - projectile.setSoundImpactWater(new BukkitSoundHolder(projectileConfig.getString("sounds.impactWater", "ENTITY_GENERIC_SPLASH:10:0.3"))); - - //loadPermissions - projectile.setPermissionLoad(projectileConfig.getStringList("loadPermission")); - - return projectile; - } - - - /** - * copys the default designs from the .jar to the disk - */ - private void copyDefaultProjectiles() - { - copyFile("canistershot"); - copyFile("tnt"); - copyFile("cobblestone"); - copyFile("diamond"); - - copyFile("enderpearl"); - - copyFile("firework1"); - copyFile("firework2"); - copyFile("firework3"); - copyFile("firework4"); - } - - /** - * copies the yml file from the .jar to the projectile folder - * @param filename - name of the .yml file - */ - private void copyFile(String filename) - { - File YmlFile = new File(plugin.getDataFolder(), "projectiles/" + filename + ".yml"); - - YmlFile.getParentFile().mkdirs(); - if (!YmlFile.exists()) - { - FileUtils.copyFile(plugin.getResource("projectiles/" + filename + ".yml"), YmlFile); - } - } - - - /** - * returns the path of the projectiles folder - * @return - */ - private String getPath() - { - // Directory path here - return "plugins/Cannons/projectiles/"; - } - - - /** - * returns a PotionEffectTypeList from a list of strings - * @param stringList - * @return - */ - private List toPotionEffect(List stringList) - { - List effectList = new ArrayList(); - - for (String str : stringList) - { - PotionEffectType effect = PotionEffectType.getByName(str); - if (effect != null) - effectList.add(effect); - else - plugin.logSevere("No potion effect found with the name: " + str); - } - return effectList; - } - - /** - * returns a PotionEffectTypeList from a list of strings - * @param stringList - * @return - */ - private List toProperties(List stringList) - { - List projectileList = new ArrayList(); - - for (String str : stringList) - { - ProjectileProperties projectile = ProjectileProperties.getByName(str); - if (projectile != null) - projectileList.add(projectile); - else - plugin.logSevere("No projectile property with the name: " + str + " found"); - } - return projectileList; - } - - - - /** - * returns a list of colors in RGB integer format from a list of strings in hex format - * @param stringList - * @return - */ - private List toColor(List stringList) - { - List colorList = new ArrayList(); - - for (String str : stringList) - { - try - { - Integer color = Integer.parseInt(str,16); - colorList.add(color); - } - catch (Exception ex) - { - plugin.logSevere(str + " is not a hexadecimal number"); - } - } - return colorList; - } - - /** - * returns the projectile with the matching ID - * @param str - * @return - */ - public BukkitProjectile getByName(String str) - { - for (BukkitProjectile projectile : projectileList) - { - if (projectile.getProjectileID().equalsIgnoreCase(str)) - return projectile; - } - return null; - } - - /** - * converts a string into a firework effect - * @param str - name of the effect - * @return fittiong firework effect - */ - FireworkEffect.Type getFireworksType(String str) - { - try - { - return FireworkEffect.Type.valueOf(str); - } - catch(Exception ex) - { - plugin.logDebug(str + " is not a valid fireworks type. BALL was used instead."); - return FireworkEffect.Type.BALL; - } - } - - /** - * returns converts a string into a firework effect - * @param str - name of the effect - * @return fittiong firework effect - */ - EntityType getProjectileEntity(String str) - { - try - { - return EntityType.valueOf(str.toUpperCase()); - } - catch(Exception ex) - { - plugin.logSevere(str + " is not a valid entity type. SNOWBALL was used instead."); - return EntityType.SNOWBALL; - } - } +public class ProjectileStorage { + private final Cannons plugin; + @Getter + private static ProjectileStorage instance = null; + + private final List projectileList; + + private ProjectileStorage(Cannons plugin) { + this.plugin = plugin; + projectileList = new ArrayList<>(); + } + + public static void initialize(Cannons plugin) { + if (instance == null) { + instance = new ProjectileStorage(plugin); + } + } + + /** + * returns a list of all projectiles names + * + * @return list of all projectiles names + */ + public ArrayList getProjectileIds() { + ArrayList list = new ArrayList<>(projectileList.size()); + for (BukkitProjectile proj : projectileList) { + list.add(proj.getProjectileID()); + } + return list; + } + + /** + * returns the projectile that can be loaded with this item. If data=-1 the data is ignored + * + * @param item ItemStack of projectile + * @return true if there is a projectile with this material + */ + public BukkitProjectile getProjectile(Cannon cannon, ItemStack item) { + BukkitItemHolder materialHolder = BukkitItemHolder.from(item); + return getProjectile(cannon, materialHolder); + } + + /** + * returns the projectiles that can be loaded in the cannon with this id and data. If data=-1 the data is ignored + * + * @param materialHolder material of the projectile + * @return true if there is a projectile with this material + */ + public BukkitProjectile getProjectile(Cannon cannon, BukkitItemHolder materialHolder) { + for (BukkitProjectile projectile : projectileList) { + if (cannon.getCannonDesign().canLoad(projectile) && !projectile.getLoadingItem().check(Material.AIR) && projectile.check(materialHolder)) + return projectile; + } + return null; + } + + + /** + * returns the projectiles that can be loaded in the cannon by projectile id (file name) + * + * @param projectileId id of the projectile + * @return true if there is a projectile with this id + */ + public BukkitProjectile getProjectile(Cannon cannon, String projectileId) { + for (BukkitProjectile projectile : projectileList) { + if (cannon.getCannonDesign().canLoad(projectile) && projectile.check(projectileId)) + return projectile; + } + return null; + } + + /** + * returns the projectiles for the given id (file name) + * + * @param projectileId id of the projectile + * @return true if there is a projectile with this id + */ + public BukkitProjectile getProjectile(String projectileId) { + for (BukkitProjectile projectile : projectileList) { + if (projectile.check(projectileId)) + return projectile; + } + return null; + } + + /** + * loads all projectile designs from the disk or copys the defaults if there is no design + */ + public void loadProjectiles() { + plugin.logInfo("Loading projectile configs"); + + //clear old list + projectileList.clear(); + + //load defaults if there no projectile folder + // check if design folder is empty or does not exist + if (FileUtils.isFolderEmpty(getPath())) { + // the folder is empty, copy defaults + plugin.logInfo("No projectiles loaded - loading default projectiles"); + copyDefaultProjectiles(); + } + + //get list of all files in /projectiles/ + ArrayList projectileFileList = getProjectilesFiles(); + + // stop if there are no files found + if (projectileFileList == null || projectileFileList.isEmpty()) + return; + + for (String file : projectileFileList) { + //load .yml + BukkitProjectile projectile = loadYml(file); + if (projectile != null) { + plugin.logDebug("load projectile " + file + " item " + projectile.getLoadingItem().toString()); + projectileList.add(projectile); + } + } + } + + /** + * get all projectile file names form /projectiles + * + * @return list of all projectiles files + */ + private ArrayList getProjectilesFiles() { + ArrayList projectileList = new ArrayList<>(); + + try { + // check plugin/cannons/designs for .yml and .schematic files + String ymlFile; + File folder = new File(getPath()); + + File[] listOfFiles = folder.listFiles(); + if (listOfFiles == null) { + plugin.logSevere("Projectile folder empty"); + return projectileList; + } + + for (File listOfFile : listOfFiles) { + if (listOfFile.isFile()) { + ymlFile = listOfFile.getName(); + if (ymlFile.endsWith(".yml") || ymlFile.endsWith(".yaml")) { + // there is a shematic file and a .yml file + projectileList.add(ymlFile); + } + } + } + } catch (Exception e) { + plugin.logSevere("Error while checking yml and schematic " + e); + } + return projectileList; + } + + /** + * loads the config for one cannon from the .yml file + * + * @param ymlFile of the cannon config file + */ + private BukkitProjectile loadYml(String ymlFile) { + //create a new projectile + String id = FileUtils.removeExtension(ymlFile); + BukkitProjectile projectile = new BukkitProjectile(id); + // load .yml file + + File projectileFile = new File(getPath() + ymlFile); + FileConfiguration projectileConfig = YamlConfiguration.loadConfiguration(projectileFile); + + //load it from the disk + + //general + projectile.setProjectileName(projectileConfig.getString("general.projectileName", "noProjectileName")); + projectile.setDescription(projectileConfig.getString("general.description", "no description for this projectile")); + projectile.setItemName(projectileConfig.getString("general.itemName", "noItemName")); + projectile.setLoadingItem(BukkitItemHolder.from(projectileConfig.getString("general.loadingItem", "minecraft:cobblestone"))); + projectile.setAlternativeItemList(ParseUtils.toItemHolderList(projectileConfig.getStringList("general.alternativeId"))); + + //cannonball + projectile.setProjectileEntity(getProjectileEntity(projectileConfig.getString("cannonball.entityType", "SNOWBALL"))); + projectile.setProjectileOnFire(projectileConfig.getBoolean("cannonball.isOnFire", false)); + projectile.setVelocity(projectileConfig.getDouble("cannonball.velocity", 1.0)); + if (projectile.getVelocity() < 0.01) + plugin.logDebug("Low velocity of " + projectile.getVelocity() + " for projectile detected"); + projectile.setPenetration(projectileConfig.getDouble("cannonball.penetration", 0.0)); + projectile.setPenetrationDamage(projectileConfig.getBoolean("cannonball.doesPenetrationDamage", true)); + projectile.setTimefuse(projectileConfig.getDouble("cannonball.timefuse", 0.0)); + projectile.setAutomaticFiringDelay(projectileConfig.getDouble("cannonball.automaticFiringDelay", 1.0)); + projectile.setAutomaticFiringMagazineSize(projectileConfig.getInt("cannonball.automaticFiringMagazineSize", 1)); + projectile.setNumberOfBullets(projectileConfig.getInt("cannonball.numberOfBullets", 1)); + projectile.setSpreadMultiplier(projectileConfig.getDouble("cannonball.spreadMultiplier", 1.0)); + projectile.setSentryIgnoredBlocks(projectileConfig.getInt("cannonball.sentryIgnoredBlocks", 0)); + projectile.setPropertyList(toProperties(projectileConfig.getStringList("cannonball.properties"))); + + //smokeTrail + projectile.setSmokeTrailEnabled(projectileConfig.getBoolean("smokeTrail.enabled", false)); + projectile.setSmokeTrailDistance(projectileConfig.getInt("smokeTrail.distance", 10)); + projectile.setSmokeTrailMaterial(Bukkit.createBlockData(projectileConfig.getString("smokeTrail.material", "minecraft:cobweb"))); + projectile.setSmokeTrailDuration(projectileConfig.getDouble("smokeTrail.duration", 20.0)); + projectile.setSmokeTrailParticleEnabled(projectileConfig.getBoolean("smokeTrail.particles.enabled", false)); + + //smokeTrail Particle + ParticleBuilder pb = FileReadUtils.readParticleBuilder(projectileConfig, "smokeTrail.particles"); + projectile.setSmokeTrailParticle(pb); + + //explosion + projectile.setExplosionPower((float) projectileConfig.getDouble("explosion.explosionPower", 2.)); + projectile.setExplosionPowerDependsOnVelocity(projectileConfig.getBoolean("explosion.explosionPowerDependsOnVelocity", true)); + projectile.setExplosionDamage(projectileConfig.getBoolean("explosion.doesExplosionDamage", true)); + projectile.setUnderwaterDamage(projectileConfig.getBoolean("explosion.doesUnderwaterExplosion", false)); + projectile.setDirectHitDamage(projectileConfig.getDouble("explosion.directHitDamage", 5.0)); + projectile.setPlayerDamageRange(projectileConfig.getDouble("explosion.playerDamageRange", 3.0)); + projectile.setPlayerDamage(projectileConfig.getDouble("explosion.playerDamage", 5.0)); + projectile.setPotionRange(projectileConfig.getDouble("explosion.potionRange", 1.0)); + projectile.setPotionDuration(projectileConfig.getDouble("explosion.potionDuration", 1.0)); + projectile.setPotionAmplifier(projectileConfig.getInt("explosion.potionAmplifier", 0)); + projectile.setPotionsEffectList(toPotionEffect(projectileConfig.getStringList("explosion.potionEffects"))); + projectile.setImpactIndicator(projectileConfig.getBoolean("explosion.impactIndicator", true)); + + //cluster + projectile.setClusterExplosionsEnabled(projectileConfig.getBoolean("clusterExplosion.enabled", false)); + projectile.setClusterExplosionsInBlocks(projectileConfig.getBoolean("clusterExplosion.explosionInBlocks", false)); + projectile.setClusterExplosionsAmount(projectileConfig.getInt("clusterExplosion.amount", 5)); + if (projectile.getClusterExplosionsAmount() > 100) { + Cannons.getPlugin().logSevere("Max amount for cluster explosions is >100 and was reset to 5 to prevent lag."); + projectile.setClusterExplosionsAmount(5); + } + projectile.setClusterExplosionsMinDelay(projectileConfig.getDouble("clusterExplosion.minDelay", 0.0)); + projectile.setClusterExplosionsMaxDelay(projectileConfig.getDouble("clusterExplosion.maxDelay", 5.0)); + projectile.setClusterExplosionsRadius(projectileConfig.getDouble("clusterExplosion.radius", 5.0)); + projectile.setClusterExplosionsPower(projectileConfig.getDouble("clusterExplosion.power", 5.0)); + + //spawnOnExplosion + projectile.setSpawnEnabled(projectileConfig.getBoolean("spawnOnExplosion.enabled", false)); + projectile.setSpawnBlockRadius(projectileConfig.getDouble("spawnOnExplosion.blockRadius", 1.0)); + projectile.setSpawnEntityRadius(projectileConfig.getDouble("spawnOnExplosion.entityRadius", 2.0)); + projectile.setSpawnVelocity(projectileConfig.getDouble("spawnOnExplosion.velocity", 0.1)); + projectile.setSpawnBlocks(ParseUtils.toSpawnMaterialHolderList(projectileConfig.getStringList("spawnOnExplosion.block"))); + projectile.setSpawnEntities(ParseUtils.toSpawnEntityHolderList(projectileConfig.getStringList("spawnOnExplosion.entity"))); + projectile.setSpawnProjectiles(projectileConfig.getStringList("spawnOnExplosion.projectiles")); + + //spawnFireworks + projectile.setFireworksEnabled(projectileConfig.getBoolean("spawnFireworks.enabled", false)); + FireworkEffect.Builder fw = FireworkEffect.builder() + .flicker(projectileConfig.getBoolean("spawnFireworks.flicker", false)) + .trail(projectileConfig.getBoolean("spawnFireworks.trail", false)) + .with(getFireworksType(projectileConfig.getString("spawnFireworks.type", "BALL"))) + .withColor(toColor(projectileConfig.getStringList("spawnFireworks.colors"))) + .withFade(toColor(projectileConfig.getStringList("spawnFireworks.fadeColors"))); + + projectile.setFireworkEffect(fw); + + //messages + projectile.setImpactMessage(projectileConfig.getBoolean("messages.hasImpactMessage", false)); + + //sounds + projectile.setSoundLoading(new BukkitSoundHolder(projectileConfig.getString("sounds.loading", "BLOCK_STONE_PLACE:5:0.5"))); + projectile.setSoundImpact(new BukkitSoundHolder(projectileConfig.getString("sounds.impact", "ENTITY_GENERIC_EXPLODE:10:0.5"))); + projectile.setSoundImpactProtected(new BukkitSoundHolder(projectileConfig.getString("sounds.impactProtected", "ENTITY_GENERIC_EXPLODE:10:0.5"))); + projectile.setSoundImpactWater(new BukkitSoundHolder(projectileConfig.getString("sounds.impactWater", "ENTITY_GENERIC_SPLASH:10:0.3"))); + + //loadPermissions + projectile.setPermissionLoad(projectileConfig.getStringList("loadPermission")); + + return projectile; + } + + + /** + * copys the default designs from the .jar to the disk + */ + private void copyDefaultProjectiles() { + copyFile("canistershot"); + copyFile("tnt"); + copyFile("cobblestone"); + copyFile("diamond"); + + copyFile("enderpearl"); + + copyFile("firework1"); + copyFile("firework2"); + copyFile("firework3"); + copyFile("firework4"); + } + + /** + * copies the yml file from the .jar to the projectile folder + * + * @param filename - name of the .yml file + */ + private void copyFile(String filename) { + File YmlFile = new File(plugin.getDataFolder(), "projectiles/" + filename + ".yml"); + + YmlFile.getParentFile().mkdirs(); + if (!YmlFile.exists()) { + FileUtils.copyFile(plugin.getResource("projectiles/" + filename + ".yml"), YmlFile); + } + } + + + /** + * returns the path of the projectiles folder + * + * @return + */ + private String getPath() { + // Directory path here + return "plugins/Cannons/projectiles/"; + } + + + /** + * returns a PotionEffectTypeList from a list of strings + * + * @param stringList + * @return + */ + private List toPotionEffect(List stringList) { + List effectList = new ArrayList(); + + for (String str : stringList) { + PotionEffectType effect = PotionEffectType.getByName(str); + if (effect != null) + effectList.add(effect); + else + plugin.logSevere("No potion effect found with the name: " + str); + } + return effectList; + } + + /** + * returns a PotionEffectTypeList from a list of strings + * + * @param stringList + * @return + */ + private List toProperties(List stringList) { + List projectileList = new ArrayList(); + + for (String str : stringList) { + ProjectileProperties projectile = ProjectileProperties.getByName(str); + if (projectile != null) + projectileList.add(projectile); + else + plugin.logSevere("No projectile property with the name: " + str + " found"); + } + return projectileList; + } + + + /** + * returns a list of colors in RGB integer format from a list of strings in hex format + * + * @param stringList + * @return + */ + private List toColor(List stringList) { + List colorList = new ArrayList(); + + for (String str : stringList) { + try { + Integer color = Integer.parseInt(str, 16); + colorList.add(color); + } catch (Exception ex) { + plugin.logSevere(str + " is not a hexadecimal number"); + } + } + return colorList; + } + + /** + * returns the projectile with the matching ID + * + * @param str + * @return + */ + public BukkitProjectile getByName(String str) { + for (BukkitProjectile projectile : projectileList) { + if (projectile.getProjectileID().equalsIgnoreCase(str)) + return projectile; + } + return null; + } + + /** + * converts a string into a firework effect + * + * @param str - name of the effect + * @return fittiong firework effect + */ + FireworkEffect.Type getFireworksType(String str) { + try { + return FireworkEffect.Type.valueOf(str); + } catch (Exception ex) { + plugin.logDebug(str + " is not a valid fireworks type. BALL was used instead."); + return FireworkEffect.Type.BALL; + } + } + + /** + * returns converts a string into a firework effect + * + * @param str - name of the effect + * @return fittiong firework effect + */ + EntityType getProjectileEntity(String str) { + try { + return EntityType.valueOf(str.toUpperCase()); + } catch (Exception ex) { + plugin.logSevere(str + " is not a valid entity type. SNOWBALL was used instead."); + return EntityType.SNOWBALL; + } + } } From 23eddb53b440e3ed2f89adc9f4690df8cfcf567f Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 14 Dec 2024 21:06:11 +0100 Subject: [PATCH 64/97] Cleanup FlyingProjectile --- .../at/pavlov/cannons/CreateExplosion.java | 4 +- .../cannons/projectile/FlyingProjectile.java | 164 +++++++----------- .../cannons/projectile/ProjectileManager.java | 12 +- 3 files changed, 68 insertions(+), 112 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 61b06b3b..a8dd82e7 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -806,8 +806,8 @@ public void detonate(FlyingProjectile cannonball, org.bukkit.entity.Projectile p } // reset explosion power if it is underwater and not allowed - this.plugin.logDebug("Explosion is underwater: " + cannonball.wasInWater()); - if (!projectile.isUnderwaterDamage() && cannonball.wasInWater()) { + this.plugin.logDebug("Explosion is underwater: " + cannonball.isWasInWater()); + if (!projectile.isUnderwaterDamage() && cannonball.isWasInWater()) { this.plugin.logDebug("Underwater explosion not allowed. Event cancelled"); return; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java index cce48dce..a35d4057 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java @@ -11,51 +11,68 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Entity; +import org.bukkit.entity.Projectile; import org.bukkit.util.Vector; import java.util.UUID; -public class FlyingProjectile -{ - private final long spawnTime; - - private final UUID entityUID; +public class FlyingProjectile { + @Getter + private final long spawnTime; + + @Getter + private final UUID entityUID; + @Getter private final UUID shooterUID; + @Getter private final UUID worldUID; - @Setter @Getter + @Setter + @Getter private UUID cannonUID; - private final BukkitProjectile projectile; + @Getter + private final BukkitProjectile projectile; + @Getter private final org.bukkit.projectiles.ProjectileSource source; //location of the shooterUID before firing - important for teleporting the player back - observer property + @Getter private final Location playerlocation; - @Setter @Getter + @Setter + @Getter private Location impactLocation; //block which caused the cannonball explosion - can be null - @Setter @Getter + @Setter + @Getter private Location impactBlock; - @Setter @Getter + @Setter + @Getter private Location lastSmokeTrailLocation; //Important for visual splash effect when the cannonball hits the water surface + @Getter private boolean inWater; + @Setter + @Getter private boolean wasInWater; //if the teleport was already performed - @Setter @Getter + @Setter + @Getter private boolean teleported; //was the projectile fired by a player, redstone or a sentry + @Getter private final ProjectileCause projectileCause; + @Setter + @Getter private boolean detonated; private final MovingObject predictor; - public FlyingProjectile(BukkitProjectile projectile, org.bukkit.entity.Projectile projectile_entity, UUID shooterUID, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, UUID cannonId, ProjectileCause projectileCause) - { + public FlyingProjectile(BukkitProjectile projectile, Projectile projectile_entity, UUID shooterUID, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, UUID cannonId, ProjectileCause projectileCause) { //Validate.notNull(shooterUID, "shooterUID for the projectile can't be null"); this.entityUID = projectile_entity.getUniqueId(); this.worldUID = projectile_entity.getWorld().getUID(); this.wasInWater = this.isInWater(); - this.projectile = projectile; + this.projectile = projectile; this.cannonUID = cannonId; this.shooterUID = shooterUID; this.playerlocation = playerLoc; @@ -64,7 +81,7 @@ public FlyingProjectile(BukkitProjectile projectile, org.bukkit.entity.Projectil projectile_entity.setShooter(source); this.projectileCause = projectileCause; - this.spawnTime = System.currentTimeMillis(); + this.spawnTime = System.currentTimeMillis(); this.teleported = false; //set location and speed @@ -74,11 +91,6 @@ public FlyingProjectile(BukkitProjectile projectile, org.bukkit.entity.Projectil this.lastSmokeTrailLocation = new_loc; } - public UUID getShooterUID() - { - return shooterUID; - } - /* * Returns the entity of the flying projectile * This is time consuming, the projectile should be cached @@ -86,134 +98,103 @@ public UUID getShooterUID() * * @return */ - public org.bukkit.entity.Projectile getProjectileEntity() { + public Projectile getProjectileEntity() { Entity e = Bukkit.getEntity(entityUID); if (e == null) return null; - return (org.bukkit.entity.Projectile) Bukkit.getEntity(entityUID); - } - - public BukkitProjectile getProjectile() - { - return projectile; - } - - public long getSpawnTime() - { - return spawnTime; - } - - public Location getPlayerlocation() { - return playerlocation; + return (Projectile) Bukkit.getEntity(entityUID); } /** * check if the projectile in in a liquid + * * @return true if the projectile is in a liquid */ - private boolean isInWaterCheck(org.bukkit.entity.Projectile projectile_entity) - { - if(projectile_entity!=null) - { + private boolean isInWaterCheck(Projectile projectile_entity) { + if (projectile_entity != null) { Block block = projectile_entity.getLocation().getBlock(); return block.isLiquid(); } return false; } - public boolean isInWater() { - return inWater; - } - /** * returns if the projectile has entered the water surface and updates also inWater + * * @return true if the projectile has entered water */ - public boolean updateWaterSurfaceCheck(org.bukkit.entity.Projectile projectile_entity) - { + public boolean updateWaterSurfaceCheck(Projectile projectile_entity) { inWater = isInWaterCheck(projectile_entity); boolean isSurface = !wasInWater && inWater; wasInWater = inWater; return isSurface; } - public boolean wasInWater() { - return wasInWater; - } - - public void setWasInWater(boolean wasInWater) { - this.wasInWater = wasInWater; - } - /** * searches for the projectile and checks if the projectile is still alive and valid * * @return returns false if the projectile entity is null */ - public boolean isValid() - { + public boolean isValid() { return isValid(getProjectileEntity()); } /** * if the projectile is still alive and valid * a projectile is valid if it has an entity, is not below -64 and younger than 1h (60*60*1000) + * * @return returns false if the projectile entity is null */ - public boolean isValid(org.bukkit.entity.Projectile projectile_entity) - { + public boolean isValid(Projectile projectile_entity) { return (projectile_entity != null && projectile_entity.getLocation().getBlockY() > -64 && System.currentTimeMillis() < getSpawnTime() + 3600000); } /** * updated the location and speed of the projectile to the expected values */ - public void update() - { + public void update() { predictor.updateProjectileLocation(isInWater()); } /** * revert update of the location */ - public void revertUpdate() - { + public void revertUpdate() { predictor.revertProjectileLocation(isInWater()); } /** * returns the calculated location of the projectile + * * @return the location where the projectile should be */ - public Location getExpectedLocation() - { + public Location getExpectedLocation() { return predictor.getLocation(); } /** * returns actual location of the projectile + * * @return momentary position of the projectile */ - public Location getActualLocation(org.bukkit.entity.Projectile projectile_entity) - { + public Location getActualLocation(Projectile projectile_entity) { return projectile_entity.getLocation(); } /** * returns the distance of the projectile location to the calculated location + * * @return distance of the projectile location to the calculated location */ - public double distanceToProjectile(org.bukkit.entity.Projectile projectile_entity) - { + public double distanceToProjectile(Projectile projectile_entity) { return projectile_entity.getLocation().toVector().distance(predictor.getLoc()); } /** * teleports the projectile to the predicted location */ - public void teleportToPrediction(org.bukkit.entity.Projectile projectile_entity) - { + public void teleportToPrediction(Projectile projectile_entity) { if (projectile_entity == null) return; PaperLib.teleportAsync(projectile_entity, predictor.getLocation()); @@ -222,11 +203,11 @@ public void teleportToPrediction(org.bukkit.entity.Projectile projectile_entity) /** * teleports the projectile to the given location + * * @param loc target location * @param vel velocity of the projectile */ - public void teleport(Location loc, Vector vel) - { + public void teleport(Location loc, Vector vel) { this.predictor.setLocation(loc); this.predictor.setVel(vel); teleportToPrediction(getProjectileEntity()); @@ -239,45 +220,20 @@ public int hashCode() { } @Override - public boolean equals(Object obj) - { + public boolean equals(Object obj) { //equal if the projectile entities are equal - FlyingProjectile obj2 = (FlyingProjectile) obj; - return this.getUID().equals(obj2.getUID()); - } - - public UUID getUID() - { - return entityUID; - } - - public org.bukkit.projectiles.ProjectileSource getSource() { - return source; - } + if (!(obj instanceof FlyingProjectile fp)) { + return false; + } - public UUID getWorldUID() - { - return worldUID; + return this.getEntityUID().equals(fp.getEntityUID()); } - public World getWorld() - { + public World getWorld() { return Bukkit.getWorld(worldUID); } - public ProjectileCause getProjectileCause() { - return projectileCause; - } - - public Vector getVelocity(){ + public Vector getVelocity() { return predictor.getVel().clone(); } - - public boolean hasDetonated() { - return this.detonated; - } - - public void setDetonated(boolean detonated) { - this.detonated = detonated; - } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index d37e0790..cfee2e5e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -74,7 +74,7 @@ public Projectile spawnProjectile(BukkitProjectile projectile, UUID shooter, org FlyingProjectile cannonball = new FlyingProjectile(projectile, projectileEntity, shooter, source, playerLoc, cannonId, projectileCause); - flyingProjectilesMap.put(cannonball.getUID(), cannonball); + flyingProjectilesMap.put(cannonball.getEntityUID(), cannonball); //detonate timefused projectiles detonateTimefuse(cannonball); @@ -94,7 +94,7 @@ private void detonateTimefuse(final FlyingProjectile cannonball) { } //Delayed Task - AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask(cannonball.getUID()) { + AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask(cannonball.getEntityUID()) { public void run(Object object) { //find given UID in list FlyingProjectile fproj = flyingProjectilesMap.get(object); @@ -107,7 +107,7 @@ public void run(Object object) { CreateExplosion.getInstance().detonate(cannonball, projectile_entity); projectile_entity.remove(); } - flyingProjectilesMap.remove(cannonball.getUID()); + flyingProjectilesMap.remove(cannonball.getEntityUID()); } } }, (long) (cannonball.getProjectile().getTimefuse() * 20)); @@ -127,7 +127,7 @@ public void detonateProjectile(Entity projectile) { if (fproj != null) { CreateExplosion.getInstance().detonate(fproj, (Projectile) projectile); projectile.remove(); - flyingProjectilesMap.remove(fproj.getUID()); + flyingProjectilesMap.remove(fproj.getEntityUID()); } } @@ -146,13 +146,13 @@ public void directHitProjectile(Entity cannonball, Entity target) { } Projectile projectile_entity = fproj.getProjectileEntity(); - if (!fproj.hasDetonated() && cannonball.isValid()) { + if (!fproj.isDetonated() && cannonball.isValid()) { fproj.setDetonated(true); CreateExplosion.getInstance().directHit(fproj, projectile_entity, target); projectile_entity.remove(); } - flyingProjectilesMap.remove(fproj.getUID()); + flyingProjectilesMap.remove(fproj.getEntityUID()); } /** From 3628fb88e8320eda83bf2b58516ebad30bdfa41b Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 15 Dec 2024 11:54:13 +0100 Subject: [PATCH 65/97] Abstract and fix MovingObject, and make BukkitMovingObject --- .../at/pavlov/bukkit/factory/VectorUtils.java | 4 + .../internal/container/MovingObject.java | 85 +++++++++++ .../main/java/at/pavlov/cannons/Aiming.java | 29 ++-- .../cannons/container/BukkitMovingObject.java | 63 ++++++++ .../cannons/container/MovingObject.java | 134 ------------------ .../cannons/projectile/FlyingProjectile.java | 15 +- 6 files changed, 175 insertions(+), 155 deletions(-) create mode 100644 api-internal/src/main/java/at/pavlov/internal/container/MovingObject.java create mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/container/BukkitMovingObject.java delete mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/container/MovingObject.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java b/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java index 1657aca4..2568b65f 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java @@ -10,6 +10,10 @@ public static Location toLoc(World world, CannonVector vector) { return new Location(world, vector.getX(), vector.getY(), vector.getZ()); } + public static CannonVector fromLoc(Location location) { + return new CannonVector(location.getX(), location.getY(), location.getZ()); + } + public static Vector toBaseVector(CannonVector vector) { return new Vector(vector.getX(), vector.getY(), vector.getZ()); } diff --git a/api-internal/src/main/java/at/pavlov/internal/container/MovingObject.java b/api-internal/src/main/java/at/pavlov/internal/container/MovingObject.java new file mode 100644 index 00000000..2b03d254 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/container/MovingObject.java @@ -0,0 +1,85 @@ +package at.pavlov.internal.container; + +import at.pavlov.internal.container.location.CannonVector; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; +import java.util.UUID; + +@AllArgsConstructor +@Data public abstract class MovingObject { + + //location and speed + protected UUID world; + protected CannonVector loc; + protected CannonVector vel; + protected Entity entityType; + + /** + * calculates the new position for the projectile + * @param inWater the projectile is in water + */ + public void updateProjectileLocation(boolean inWater) { + double multiplier = getDragMultiplier(inWater); + double gravity = getGravity(); + //update location + this.loc.add(this.vel); + //slow down projectile + this.vel.multiply(multiplier); + //apply gravity + this.vel.subtract(new CannonVector(0, gravity, 0)); + } + + /** + * Retrieves the drag multiplier based on the entity type and environment. + * + * @param inWater Whether the projectile is in water. + * @return The drag multiplier. + */ + protected double getDragMultiplier(boolean inWater) { + if (entityType.equals(arrow())) { + return inWater ? 0.6F : 0.99F; + } + + if (fireballs().contains(entityType)) { + return 0.95F; + } + + return inWater ? 0.8F : 0.99F; + } + + /** + * Retrieves the gravity value based on the entity type and environment. + * + * @return The gravity value. + */ + protected double getGravity() { + if (entityType.equals(arrow())) { + return 0.05000000074505806D; + } + if (fireballs().contains(entityType)) { + return 0.0; + } + return 0.03F; + } + + /** + * reverts and update of the projectile position + * @param inWater the projectile is in water + */ + public void revertProjectileLocation(boolean inWater) { + double multiplier = getDragMultiplier(inWater); + double gravity = getGravity(); + //apply gravity + this.vel.add(new CannonVector(0, gravity, 0)); + //slow down projectile + this.vel.multiply(1.0 / multiplier); + //update location + this.loc.subtract(this.vel); + } + + public abstract Entity arrow(); + public abstract List fireballs(); +} + diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index e61bd302..c4343736 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -10,7 +10,7 @@ import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.cannons.container.MovingObject; +import at.pavlov.cannons.container.BukkitMovingObject; import at.pavlov.cannons.container.Target; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.event.CannonLinkAimingEvent; @@ -869,14 +869,15 @@ private boolean verifyTargetSolution(Cannon cannon, Target target, double maxdis Location muzzle = cannon.getMuzzle(); CannonVector vel = cannon.getTargetVector(); - MovingObject predictor = new MovingObject(muzzle, vel, cannon.getProjectileEntityType()); + BukkitMovingObject predictor = new BukkitMovingObject(cannon.getWorld(), VectorUtils.fromLoc(muzzle), vel, cannon.getProjectileEntityType()); Vector start = muzzle.toVector(); int maxInterations = 500; double targetDist = 100000000000000.; //make a few iterations until we hit something - for (int i = 0; start.distance(predictor.getLoc()) < cannon.getCannonDesign().getSentryMaxRange() * 1.2 && i < maxInterations; i++) { + var predVec = VectorUtils.toBaseVector(predictor.getLoc()); + for (int i = 0; start.distance(predVec) < cannon.getCannonDesign().getSentryMaxRange() * 1.2 && i < maxInterations; i++) { //is target distance shorter than before Location predictorLoc = predictor.getLocation(); double newDist = predictorLoc.distance(target.centerLocation()); @@ -888,9 +889,9 @@ private boolean verifyTargetSolution(Cannon cannon, Target target, double maxdis targetDist = newDist; //see if we hit something, but wait until the cannonball is 1 block away (safety first) Block block = predictorLoc.getBlock(); - if (start.distance(predictor.getLoc()) > 1. && !block.isEmpty()) { + if (start.distance(predVec) > 1. && !block.isEmpty()) { predictor.revertProjectileLocation(false); - return CannonsUtil.findSurface(predictorLoc, predictor.getVel()).distance(target.centerLocation()) < maxdistance; + return CannonsUtil.findSurface(predictorLoc, predVec).distance(target.centerLocation()) < maxdistance; } predictor.updateProjectileLocation(false); } @@ -906,23 +907,23 @@ private boolean verifyTargetSolution(Cannon cannon, Target target, double maxdis * @return distance how much above/below the projectile will hit */ private double simulateShot(CannonVector vector, Location muzzle, Location target, EntityType projectileType, int maxInterations) { - MovingObject cannonball = new MovingObject(muzzle, vector, projectileType); + BukkitMovingObject cannonball = new BukkitMovingObject(muzzle.getWorld().getUID(), VectorUtils.fromLoc(muzzle), vector, projectileType); double target_distance_squared = Math.pow(target.getX() - muzzle.getX(), 2) + Math.pow(target.getZ() - muzzle.getZ(), 2); - Vector oldLoc = null; + CannonVector oldLoc = null; for (int i = 0; i < 500; i++) { cannonball.updateProjectileLocation(false); - Vector cLoc = cannonball.getLoc(); + CannonVector cLoc = cannonball.getLoc(); double calculated_distance_squared = Math.pow(cLoc.getX() - muzzle.getX(), 2) + Math.pow(cLoc.getZ() - muzzle.getZ(), 2); if (calculated_distance_squared > target_distance_squared) { //calculate intersection if (oldLoc == null) return cLoc.getY() - target.getY(); - Vector vel = cannonball.getVel().clone(); + CannonVector vel = cannonball.getVel().clone(); double dist1 = Math.sqrt(vel.getX() * vel.getX() + vel.getY() * vel.getY() + vel.getZ() * vel.getZ()); - double dist2 = oldLoc.distance(target.toVector()); - Vector inter = oldLoc.add(vel.multiply(dist2 / dist1)); + double dist2 = oldLoc.distance(VectorUtils.fromLoc(target)); + CannonVector inter = oldLoc.add(vel.multiply(dist2 / dist1)); return inter.getY() - target.getY(); } oldLoc = cLoc.clone(); @@ -1253,9 +1254,9 @@ public Location impactPredictor(Cannon cannon) { Location muzzle = cannon.getMuzzle(); CannonVector vel = cannon.getFiringVector(false, false); - MovingObject predictor = new MovingObject(muzzle, vel, cannon.getProjectileEntityType()); - Vector start = muzzle.toVector(); + BukkitMovingObject predictor = new BukkitMovingObject(cannon.getWorld(), VectorUtils.fromLoc(muzzle), vel, cannon.getProjectileEntityType()); + CannonVector start = VectorUtils.fromLoc(muzzle); //make a few iterations until we hit something for (int i = 0; start.distance(predictor.getLoc()) < config.getImitatedPredictorDistance() && i < config.getImitatedPredictorIterations(); i++) { @@ -1265,7 +1266,7 @@ public Location impactPredictor(Cannon cannon) { Block block = loc.getBlock(); if (!block.isEmpty()) { predictor.revertProjectileLocation(false); - return CannonsUtil.findSurface(loc, predictor.getVel()); + return CannonsUtil.findSurface(loc, VectorUtils.toBaseVector(predictor.getVel())); } predictor.updateProjectileLocation(false); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/BukkitMovingObject.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/BukkitMovingObject.java new file mode 100644 index 00000000..fcbdade2 --- /dev/null +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/BukkitMovingObject.java @@ -0,0 +1,63 @@ +package at.pavlov.cannons.container; + +import at.pavlov.bukkit.factory.VectorUtils; +import at.pavlov.internal.container.MovingObject; +import at.pavlov.internal.container.location.CannonVector; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.util.Vector; + +import java.util.List; +import java.util.UUID; + +public class BukkitMovingObject extends MovingObject { + + public BukkitMovingObject(UUID world, CannonVector loc, CannonVector vel, EntityType entityType) { + super(world, loc, vel, entityType); + } + + public BukkitMovingObject(Location newLoc, Vector velocity, EntityType projectileEntity) { + super(newLoc.getWorld().getUID(), VectorUtils.fromLoc(newLoc), VectorUtils.fromBaseVector(velocity), projectileEntity); + } + + /** + * teleports the projectile to this location + * @param loc the projectile will be teleported to this location + * @param vel velocity of the object + */ + public void teleport(Location loc, Vector vel) + { + this.loc = VectorUtils.fromBaseVector(loc.toVector()); + this.vel = VectorUtils.fromBaseVector(vel); + this.world = loc.getWorld().getUID(); + } + + /** + * returns the calculated location of the projectile + * @return the location where the projectile should be + */ + public Location getLocation() + { + return VectorUtils.toLoc(Bukkit.getWorld(world), loc); + } + + public void setLocation(Location loc) + { + this.loc = VectorUtils.fromBaseVector(loc.toVector()); + this.world = loc.getWorld().getUID(); + } + + + @Override + public EntityType arrow() { + return EntityType.ARROW; + } + + static private final List fireballs = List.of(EntityType.FIREBALL, EntityType.SMALL_FIREBALL); + @Override + public List fireballs() { + return fireballs; + } +} + diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/MovingObject.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/MovingObject.java deleted file mode 100644 index 1a2ad79b..00000000 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/MovingObject.java +++ /dev/null @@ -1,134 +0,0 @@ -package at.pavlov.cannons.container; - -import at.pavlov.bukkit.factory.VectorUtils; -import at.pavlov.internal.container.location.CannonVector; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.entity.EntityType; -import org.bukkit.util.Vector; - -import java.util.UUID; - -//TODO abstract this away and replace Vector with CannonVector -public class MovingObject { - - //location and speed - private UUID world; - private Vector loc; - private Vector vel; - private EntityType entityType; - - - public MovingObject(Location loc, Vector vel, EntityType entityType) - { - world = loc.getWorld().getUID(); - this.loc = loc.toVector(); - this.vel = vel; - this.entityType = entityType; - } - - public MovingObject(Location loc, CannonVector vel, EntityType entityType) - { - world = loc.getWorld().getUID(); - this.loc = loc.toVector(); - this.vel = VectorUtils.toBaseVector(vel); - this.entityType = entityType; - } - - /** - * calculates the new position for the projectile - * @param inWater the projectile is in water - */ - public void updateProjectileLocation(boolean inWater) - { - double f2 = 0.99F; - if (inWater) - f2 = 0.8F; - double f3 = 0.03F; - if (entityType.equals(EntityType.ARROW)){ - f3 = 0.05000000074505806D; - if (inWater) - f2 = 0.6F; - } - if (entityType.equals(EntityType.FIREBALL) || entityType.equals(EntityType.SMALL_FIREBALL)){ - f2 = 0.95F; - f3 = 0.0; - } - //update location - this.loc.add(this.vel); - //slow down projectile - this.vel.multiply(f2); - //apply gravity - this.vel.subtract(new Vector(0,f3,0)); - } - - /** - * reverts and update of the projectile position - * @param inWater the projectile is in water - */ - public void revertProjectileLocation(boolean inWater) - { - double f2 = 0.99F; - if (inWater) - f2 = 0.8F; - double f3 = 0.03F; - //apply gravity - this.vel.add(new Vector(0, f3, 0)); - //slow down projectile - this.vel.multiply(1.0 / f2); - //update location - this.loc.subtract(this.vel); - } - - /** - * teleports the projectile to this location - * @param loc the projectile will be teleported to this location - * @param vel velocity of the object - */ - public void teleport(Location loc, Vector vel) - { - this.loc = loc.toVector(); - this.vel = vel; - this.world = loc.getWorld().getUID(); - } - - /** - * returns the calculated location of the projectile - * @return the location where the projectile should be - */ - public Location getLocation() - { - return loc.toLocation(Bukkit.getWorld(world)); - } - - public void setLocation(Location loc) - { - this.loc = loc.toVector(); - this.world = loc.getWorld().getUID(); - } - - public UUID getWorld() { - return world; - } - - public void setWorld(UUID world) { - this.world = world; - } - - public Vector getLoc() { - return loc; - } - - public void setLoc(Vector loc) { - this.loc = loc; - } - - public Vector getVel() { - return vel; - } - - public void setVel(Vector vel) { - this.vel = vel; - } -} - diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java index a35d4057..07b6457a 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java @@ -1,7 +1,8 @@ package at.pavlov.cannons.projectile; +import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.cannons.container.MovingObject; +import at.pavlov.cannons.container.BukkitMovingObject; import at.pavlov.internal.enums.ProjectileCause; import io.papermc.lib.PaperLib; import lombok.Getter; @@ -63,7 +64,7 @@ public class FlyingProjectile { @Setter @Getter private boolean detonated; - private final MovingObject predictor; + private final BukkitMovingObject predictor; public FlyingProjectile(BukkitProjectile projectile, Projectile projectile_entity, UUID shooterUID, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, UUID cannonId, ProjectileCause projectileCause) { @@ -86,7 +87,7 @@ public FlyingProjectile(BukkitProjectile projectile, Projectile projectile_entit //set location and speed Location new_loc = projectile_entity.getLocation(); - predictor = new MovingObject(new_loc, projectile_entity.getVelocity(), projectile.getProjectileEntity()); + predictor = new BukkitMovingObject(new_loc, projectile_entity.getVelocity(), projectile.getProjectileEntity()); this.lastSmokeTrailLocation = new_loc; } @@ -188,7 +189,7 @@ public Location getActualLocation(Projectile projectile_entity) { * @return distance of the projectile location to the calculated location */ public double distanceToProjectile(Projectile projectile_entity) { - return projectile_entity.getLocation().toVector().distance(predictor.getLoc()); + return projectile_entity.getLocation().toVector().distance(VectorUtils.toBaseVector(predictor.getLoc())); } /** @@ -198,7 +199,7 @@ public void teleportToPrediction(Projectile projectile_entity) { if (projectile_entity == null) return; PaperLib.teleportAsync(projectile_entity, predictor.getLocation()); - projectile_entity.setVelocity(predictor.getVel()); + projectile_entity.setVelocity(VectorUtils.toBaseVector(predictor.getVel())); } /** @@ -209,7 +210,7 @@ public void teleportToPrediction(Projectile projectile_entity) { */ public void teleport(Location loc, Vector vel) { this.predictor.setLocation(loc); - this.predictor.setVel(vel); + this.predictor.setVel(VectorUtils.fromBaseVector(vel)); teleportToPrediction(getProjectileEntity()); } @@ -234,6 +235,6 @@ public World getWorld() { } public Vector getVelocity() { - return predictor.getVel().clone(); + return VectorUtils.toBaseVector(predictor.getVel().clone()); } } From 1027046802899c363c9b899c6e4c99d39396a3f1 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 15 Dec 2024 11:55:07 +0100 Subject: [PATCH 66/97] Move BukkitMovingObject --- .../java/at/pavlov/bukkit}/container/BukkitMovingObject.java | 2 +- cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java | 2 +- .../java/at/pavlov/cannons/projectile/FlyingProjectile.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-bukkit/src/main/java/at/pavlov/bukkit}/container/BukkitMovingObject.java (98%) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/BukkitMovingObject.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitMovingObject.java similarity index 98% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/container/BukkitMovingObject.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitMovingObject.java index fcbdade2..edb294cb 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/BukkitMovingObject.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitMovingObject.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.container; +package at.pavlov.bukkit.container; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.internal.container.MovingObject; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index c4343736..453cc861 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -10,7 +10,7 @@ import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.cannons.container.BukkitMovingObject; +import at.pavlov.bukkit.container.BukkitMovingObject; import at.pavlov.cannons.container.Target; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.event.CannonLinkAimingEvent; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java index 07b6457a..d1641f5b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java @@ -2,7 +2,7 @@ import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.cannons.container.BukkitMovingObject; +import at.pavlov.bukkit.container.BukkitMovingObject; import at.pavlov.internal.enums.ProjectileCause; import io.papermc.lib.PaperLib; import lombok.Getter; From 4a609d42401a1374f74cd2d0b52b138863caf1ee Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 15 Dec 2024 16:41:22 +0100 Subject: [PATCH 67/97] Abstract FakeBlockEntry and make BukkitFakeBlockEntry --- .../container/BukkitFakeBlockEntry.java | 33 ++++++++++++ .../internal}/container/FakeBlockEntry.java | 50 ++++++------------- .../cannons/scheduler/FakeBlockHandler.java | 16 +++--- 3 files changed, 56 insertions(+), 43 deletions(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitFakeBlockEntry.java rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-internal/src/main/java/at/pavlov/internal}/container/FakeBlockEntry.java (59%) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitFakeBlockEntry.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitFakeBlockEntry.java new file mode 100644 index 00000000..d95d093b --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitFakeBlockEntry.java @@ -0,0 +1,33 @@ +package at.pavlov.bukkit.container; + +import at.pavlov.bukkit.factory.VectorUtils; +import at.pavlov.internal.container.FakeBlockEntry; +import at.pavlov.internal.enums.FakeBlockType; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; + +public class BukkitFakeBlockEntry extends FakeBlockEntry { + + public BukkitFakeBlockEntry(Location loc, Player player, FakeBlockType type, long duration) { + super(VectorUtils.fromLoc(loc), loc.getWorld().getUID(), player.getUniqueId(), type, duration); + } + + public World getWorldBukkit() { + return Bukkit.getWorld(getWorld()); + } + + public Location getLocation() { + World world = getWorldBukkit(); + if (world == null) { + return null; + } + + return new Location(world, getLocX(), getLocY(), getLocZ()); + } + + public Player getPlayerBukkit() { + return Bukkit.getPlayer(getPlayer()); + } +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java b/api-internal/src/main/java/at/pavlov/internal/container/FakeBlockEntry.java similarity index 59% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java rename to api-internal/src/main/java/at/pavlov/internal/container/FakeBlockEntry.java index 55f244d7..7205c0ab 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/FakeBlockEntry.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/FakeBlockEntry.java @@ -1,66 +1,46 @@ -package at.pavlov.cannons.container; +package at.pavlov.internal.container; +import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.FakeBlockType; import lombok.Getter; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; import java.util.UUID; @Getter -public class FakeBlockEntry { - private final int locX; - private final int locY; - private final int locZ; - private final UUID world; +public abstract class FakeBlockEntry { + protected final int locX; + protected final int locY; + protected final int locZ; + protected final UUID world; - private long startTime; + protected long startTime; //how long the block stays in ticks - private final long duration; + protected final long duration; //fake block will only be shown to this player - private final UUID player; + protected final UUID player; //only one type effect will be shown (aiming, explosion,...) - private final FakeBlockType type; + protected final FakeBlockType type; - public FakeBlockEntry(Location loc, Player player, FakeBlockType type, long duration) { + public FakeBlockEntry(CannonVector loc, UUID world, UUID player, FakeBlockType type, long duration) { this.locX = loc.getBlockX(); this.locY = loc.getBlockY(); this.locZ = loc.getBlockZ(); - this.world = loc.getWorld().getUID(); + this.world = world; - this.player = player.getUniqueId(); + this.player = player; this.type = type; this.startTime = System.currentTimeMillis(); this.duration = duration; } - - public World getWorldBukkit() { - return Bukkit.getWorld(getWorld()); - } - - public Location getLocation() { - World world = getWorldBukkit(); - if (world != null) - return new Location(world, getLocX(), getLocY(), getLocZ()); - else - return null; - } - public void updateTime() { this.startTime = System.currentTimeMillis(); } public boolean isExpired() { - return (System.currentTimeMillis() > getStartTime() + getDuration() * 50); - } - - public Player getPlayerBukkit() { - return Bukkit.getPlayer(getPlayer()); + return (System.currentTimeMillis() > startTime + duration * 50); } @Override diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java index f6bb3bcb..3d614bb6 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java @@ -2,7 +2,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.config.Config; -import at.pavlov.cannons.container.FakeBlockEntry; +import at.pavlov.bukkit.container.BukkitFakeBlockEntry; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.internal.enums.FakeBlockType; import lombok.Getter; @@ -22,7 +22,7 @@ public class FakeBlockHandler { private final Cannons plugin; - private final ArrayList list = new ArrayList<>(); + private final ArrayList list = new ArrayList<>(); private long lastAiming; private long lastImpactPredictor; @@ -62,9 +62,9 @@ public void setupScheduler() { * removes old blocks form the players vision */ private void removeOldBlocks() { - Iterator iter = list.iterator(); + Iterator iter = list.iterator(); while (iter.hasNext()) { - FakeBlockEntry next = iter.next(); + BukkitFakeBlockEntry next = iter.next(); Player player = next.getPlayerBukkit(); //if player is offline remove this one @@ -93,9 +93,9 @@ private void removeOldBlocks() { * removes previous entries for this type of fake blocks */ private void removeOldBlockType() { - Iterator iter = list.iterator(); + Iterator iter = list.iterator(); while (iter.hasNext()) { - FakeBlockEntry next = iter.next(); + BukkitFakeBlockEntry next = iter.next(); final long start = next.getStartTime(); final FakeBlockType type = next.getType(); //if older and if the type matches @@ -226,10 +226,10 @@ private CompletableFuture processBlockData(final Player player, final return CompletableFuture.completedFuture(null); } - FakeBlockEntry fakeBlockEntry = new FakeBlockEntry(loc, player, type, (long) (duration * 20.0)); + BukkitFakeBlockEntry fakeBlockEntry = new BukkitFakeBlockEntry(loc, player, type, (long) (duration * 20.0)); boolean found = false; - for (FakeBlockEntry block : list) { + for (BukkitFakeBlockEntry block : list) { if (block.equals(fakeBlockEntry)) { block.updateTime(); found = true; From f8aab9a8d8c2f0cc55553e291607569bdf7283b5 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 15 Dec 2024 18:19:58 +0100 Subject: [PATCH 68/97] Add platform independent location --- .../pavlov/bukkit/factory/CoordinateUtil.java | 19 +++++++++++++++++++ .../container/location/Coordinate.java | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/factory/CoordinateUtil.java create mode 100644 api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/factory/CoordinateUtil.java b/api-bukkit/src/main/java/at/pavlov/bukkit/factory/CoordinateUtil.java new file mode 100644 index 00000000..6141ffd5 --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/factory/CoordinateUtil.java @@ -0,0 +1,19 @@ +package at.pavlov.bukkit.factory; + +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; + +public class CoordinateUtil { + public static Location toLoc(Coordinate coordinate) { + CannonVector vector = coordinate.getVector(); + World world = Bukkit.getWorld(coordinate.getWorld()); + return new Location(world, vector.getX(), vector.getY(), vector.getZ()); + } + + public static Coordinate fromLoc(Location location) { + return new Coordinate(location.getWorld().getUID(), location.getX(), location.getY(), location.getZ()); + } +} diff --git a/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java b/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java new file mode 100644 index 00000000..fc1551ce --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java @@ -0,0 +1,18 @@ +package at.pavlov.internal.container.location; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.UUID; + +@Data +@AllArgsConstructor +public class Coordinate { + private CannonVector vector; + private UUID world; + + public Coordinate(UUID world, double x, double y, double z) { + this.world = world; + this.vector = new CannonVector(x, y, z); + } +} From 2d50e557cd15fb6ce0cd1f6f9876a91751b38528 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 15 Dec 2024 19:15:30 +0100 Subject: [PATCH 69/97] Abstract Target and make BukkitTarget --- .../pavlov/bukkit/container/BukkitTarget.java | 53 +++++++++++ .../cannons/holders/CannonPositionHolder.java | 3 + .../at/pavlov/internal/container/Target.java | 94 +++++++++++++++++++ .../container/location/Coordinate.java | 13 ++- .../main/java/at/pavlov/cannons/Aiming.java | 20 ++-- .../java/at/pavlov/cannons/TargetManager.java | 20 ++-- .../java/at/pavlov/cannons/cannon/Cannon.java | 7 ++ .../at/pavlov/cannons/container/Target.java | 68 -------------- .../cannons/event/CannonTargetEvent.java | 8 +- .../at/pavlov/cannons/utils/CannonsUtil.java | 19 ++-- 10 files changed, 201 insertions(+), 104 deletions(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitTarget.java create mode 100644 api-internal/src/main/java/at/pavlov/internal/container/Target.java delete mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitTarget.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitTarget.java new file mode 100644 index 00000000..61846302 --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitTarget.java @@ -0,0 +1,53 @@ +package at.pavlov.bukkit.container; + +import at.pavlov.bukkit.factory.CoordinateUtil; +import at.pavlov.bukkit.factory.VectorUtils; +import at.pavlov.internal.cannons.holders.CannonMainDataHolder; +import at.pavlov.internal.cannons.holders.CannonPositionHolder; +import at.pavlov.internal.container.Target; +import at.pavlov.internal.enums.TargetType; +import org.bukkit.entity.Animals; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Monster; +import org.bukkit.entity.Player; + +public final class BukkitTarget extends Target { + + public static TargetType entityToTarget(Entity entity) { + if (entity instanceof Player) { + return TargetType.PLAYER; + } + + if (entity instanceof Monster) { + return TargetType.MONSTER; + } + + if (entity instanceof Animals) { + return TargetType.ANIMAL; + } + + return TargetType.OTHER; + } + + public BukkitTarget(Entity entity) { + super( + entity.getName(), + entityToTarget(entity), + entity.getType(), + entity.getUniqueId(), + CoordinateUtil.fromLoc(entity.getLocation().clone()), + CoordinateUtil.fromLoc( + entity instanceof LivingEntity livingEntity ? + livingEntity.getEyeLocation().clone().add(0.0, -0.5, 0.0) : + entity.getLocation().clone().add(0.0, 0.5, 0.0) + ), + VectorUtils.fromBaseVector(entity.getVelocity()) + ); + } + + public > BukkitTarget(T cannon) { + super(cannon); + } +} \ No newline at end of file diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java index dac7682f..81661815 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonPositionHolder.java @@ -3,6 +3,7 @@ import at.pavlov.internal.cannons.data.CannonPosition; import at.pavlov.internal.cannons.functionalities.Updatable; import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; import java.util.UUID; @@ -61,4 +62,6 @@ default void setWorld(UUID world) { * @param moved - how far the cannon has been moved */ void move(CannonVector moved); + + Coordinate getRandomCoordinate(); } diff --git a/api-internal/src/main/java/at/pavlov/internal/container/Target.java b/api-internal/src/main/java/at/pavlov/internal/container/Target.java new file mode 100644 index 00000000..8d4e59fa --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/container/Target.java @@ -0,0 +1,94 @@ +package at.pavlov.internal.container; + +import at.pavlov.internal.cannons.holders.CannonMainDataHolder; +import at.pavlov.internal.cannons.holders.CannonPositionHolder; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; +import at.pavlov.internal.enums.TargetType; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.experimental.Accessors; + +import java.util.Objects; +import java.util.UUID; + +@Accessors(fluent = true) +@Getter +@AllArgsConstructor +public abstract class Target { + protected final String name; + protected final TargetType targetType; + protected final Entity type; + protected final UUID uniqueId; + protected final Coordinate groundLocation; + protected final Coordinate centerLocation; + protected final CannonVector velocity; + + /* + public Target(Entity entity) { + this( + entity.getName(), + entityTrasformer(entity), + entity.getType(), + entity.getUniqueId(), + entity.getLocation().clone(), + entity instanceof LivingEntity livingEntity ? + livingEntity.getEyeLocation().clone().add(0.0, -0.5, 0.0) : + entity.getLocation().clone().add(0.0, 0.5, 0.0), + entity.getVelocity() + ); + }*/ + + public > Target(T cannon) { + this( + cannon.getCannonName(), + TargetType.CANNON, + null, // No EntityType for a cannon + cannon.getUID(), + getCannonRandom(cannon, 0.5, 0.0, 0.5), //ground + getCannonRandom(cannon, 0.5, 0.5, 0.5), //center + cannon.getVelocity() + ); + } + + protected static > Coordinate getCannonRandom(T cannon, double x, double y, double z) { + var center = cannon.getRandomCoordinate().clone(); + center.getVector().add(new CannonVector(x, y, z)); + return center; + } + + @Override + public boolean equals(Object obj) { + if (obj == this) return true; + if (obj == null) return false; + if (!(obj instanceof Target target)) { + return false; + } + + return Objects.equals(this.name, target.name) && + Objects.equals(this.targetType, target.targetType) && + Objects.equals(this.type, target.type) && + Objects.equals(this.uniqueId, target.uniqueId) && + Objects.equals(this.groundLocation, target.groundLocation) && + Objects.equals(this.centerLocation, target.centerLocation) && + Objects.equals(this.velocity, target.velocity); + } + + @Override + public int hashCode() { + return Objects.hash(name, targetType, type, uniqueId, groundLocation, centerLocation, velocity); + } + + @Override + public String toString() { + return "Target[" + + "name=" + name + ", " + + "targetType=" + targetType + ", " + + "type=" + type + ", " + + "uniqueId=" + uniqueId + ", " + + "groundLocation=" + groundLocation + ", " + + "centerLocation=" + centerLocation + ", " + + "velocity=" + velocity + ']'; + } + +} \ No newline at end of file diff --git a/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java b/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java index fc1551ce..5e4c7792 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/location/Coordinate.java @@ -7,7 +7,7 @@ @Data @AllArgsConstructor -public class Coordinate { +public class Coordinate implements Cloneable { private CannonVector vector; private UUID world; @@ -15,4 +15,15 @@ public Coordinate(UUID world, double x, double y, double z) { this.world = world; this.vector = new CannonVector(x, y, z); } + + @Override + public Coordinate clone() { + try { + Coordinate clone = (Coordinate) super.clone(); + // TODO: copy mutable state here, so the clone can't change the internals of the original + return clone; + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index 453cc861..faa9a65a 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -11,7 +11,7 @@ import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.bukkit.container.BukkitMovingObject; -import at.pavlov.cannons.container.Target; +import at.pavlov.bukkit.container.BukkitTarget; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.event.CannonLinkAimingEvent; import at.pavlov.cannons.event.CannonTargetEvent; @@ -594,14 +594,14 @@ private boolean scoreboardCheck(Player p, Cannon cannon) { return team != null && team.hasPlayer(Bukkit.getOfflinePlayer(cannon.getOwner())); } - private boolean isOldTargetValid(Cannon cannon, HashMap targets) { + private boolean isOldTargetValid(Cannon cannon, HashMap targets) { //old target - is this still valid? if (!cannon.hasSentryEntity()) { return false; } CannonDesign design = cannon.getCannonDesign(); - Target target = targets.get(cannon.getSentryEntity()); + BukkitTarget target = targets.get(cannon.getSentryEntity()); if (System.currentTimeMillis() > cannon.getSentryTargetingTime() + design.getSentrySwapTime() || !targets.containsKey(cannon.getSentryEntity())) { cannon.setSentryEntity(null); @@ -641,14 +641,14 @@ private void calculateFiringSolution(Cannon cannon) { cannon.setLastSentryUpdate(System.currentTimeMillis()); - HashMap targets = CannonsUtil.getNearbyTargets(cannon.getMuzzle(), design.getSentryMinRange(), design.getSentryMaxRange()); + HashMap targets = CannonsUtil.getNearbyTargets(cannon.getMuzzle(), design.getSentryMinRange(), design.getSentryMaxRange()); //old target - is this still valid? if (isOldTargetValid(cannon, targets)) return; // find a suitable target - ArrayList possibleTargets = new ArrayList<>(); - for (Target t : targets.values()) { + ArrayList possibleTargets = new ArrayList<>(); + for (BukkitTarget t : targets.values()) { switch (t.targetType()) { case MONSTER -> { if (cannon.isTargetMob() && canFindTargetSolution(cannon, t, t.centerLocation())) { @@ -720,7 +720,7 @@ private void calculateFiringSolution(Cannon cannon) { return; } - for (Target t : possibleTargets) { + for (BukkitTarget t : possibleTargets) { //select one target if (cannon.wasSentryTarget(t.uniqueId())) { continue; @@ -743,7 +743,7 @@ private void calculateFiringSolution(Cannon cannon) { * @param loctarget lcoation of the target * @return true if the cannon can fire on this target */ - private boolean canFindTargetSolution(Cannon cannon, Target target, Location loctarget) { + private boolean canFindTargetSolution(Cannon cannon, BukkitTarget target, Location loctarget) { if (!cannon.getWorld().equals(loctarget.getWorld().getUID())) return false; @@ -789,7 +789,7 @@ private boolean canFindTargetSolution(Cannon cannon, Target target, Location loc * @param target lcoation of the target * @return true if a solution was found */ - private boolean calculateTargetSolution(Cannon cannon, Target target, boolean addSpread) { + private boolean calculateTargetSolution(Cannon cannon, BukkitTarget target, boolean addSpread) { Location targetLoc = target.centerLocation(); //aim for the center of the target if there is an area effect of the projectile if (cannon.getLoadedProjectile() != null && (cannon.getLoadedProjectile().getExplosionPower() > 2. || (cannon.getLoadedProjectile().getPlayerDamage() > 1. && cannon.getLoadedProjectile().getPlayerDamageRange() > 2.))) @@ -865,7 +865,7 @@ private boolean calculateTargetSolution(Cannon cannon, Target target, boolean ad * @param maxdistance allowed distance of the target to the impact location * @return true if the target is not blocked or close to the impact */ - private boolean verifyTargetSolution(Cannon cannon, Target target, double maxdistance) { + private boolean verifyTargetSolution(Cannon cannon, BukkitTarget target, double maxdistance) { Location muzzle = cannon.getMuzzle(); CannonVector vel = cannon.getTargetVector(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java index 17f7760b..64fcbf1f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java @@ -1,6 +1,6 @@ package at.pavlov.cannons; -import at.pavlov.cannons.container.Target; +import at.pavlov.bukkit.container.BukkitTarget; import org.bukkit.Location; import org.bukkit.util.Vector; @@ -13,30 +13,30 @@ * Class used by other plugins in order to add targets */ public class TargetManager { - private static HashMap targets = new HashMap<>(); + private static HashMap targets = new HashMap<>(); - public static void addTarget(Target target){ + public static void addTarget(BukkitTarget target){ targets.put(target.uniqueId(), target); } - public static Target getTarget(UUID uid){ + public static BukkitTarget getTarget(UUID uid){ return targets.get(uid); } - public static HashSet getTargetsInSphere(Location center, double radius){ - HashSet newTargetList = new HashSet<>(); + public static HashSet getTargetsInSphere(Location center, double radius){ + HashSet newTargetList = new HashSet<>(); - for (Target target : targets.values()) { + for (BukkitTarget target : targets.values()) { if (target.centerLocation().distanceSquared(center) < radius * radius) newTargetList.add(target); } return newTargetList; } - public static HashSet getTargetsInBox(Location center, double lengthX, double lengthY, double lengthZ){ - HashSet newTargetList = new HashSet<>(); + public static HashSet getTargetsInBox(Location center, double lengthX, double lengthY, double lengthZ){ + HashSet newTargetList = new HashSet<>(); - for (Target target : targets.values()) { + for (BukkitTarget target : targets.values()) { Location newLoc = target.centerLocation(); Vector box = newLoc.subtract(center).toVector(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index 5b5552cb..29dd0177 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -6,6 +6,7 @@ import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.event.CannonDestroyedEvent; @@ -27,6 +28,7 @@ import at.pavlov.internal.cannons.data.WhitelistData; import at.pavlov.internal.cannons.functionalities.Rotational; import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.BreakCause; import at.pavlov.internal.enums.CannonRotation; import at.pavlov.internal.enums.InteractAction; @@ -1818,6 +1820,11 @@ public void setCannonMainData(CannonMainData data) { this.mainData = data; } + @Override + public Coordinate getRandomCoordinate() { + return CoordinateUtil.fromLoc(getRandomBarrelBlock()); + } + @Override public LinkingData getLinkingData() { this.hasUpdated(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java deleted file mode 100644 index 744f2d3e..00000000 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/Target.java +++ /dev/null @@ -1,68 +0,0 @@ -package at.pavlov.cannons.container; - -import at.pavlov.bukkit.factory.VectorUtils; -import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.internal.enums.TargetType; -import org.bukkit.Location; -import org.bukkit.entity.Animals; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Monster; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - -import java.util.UUID; - -public record Target( - String name, - TargetType targetType, - EntityType type, - UUID uniqueId, - Location groundLocation, - Location centerLocation, - Vector velocity -) { - - public static TargetType entityToTarget(Entity entity) { - if (entity instanceof Player) { - return TargetType.PLAYER; - } - - if (entity instanceof Monster) { - return TargetType.MONSTER; - } - - if (entity instanceof Animals) { - return TargetType.ANIMAL; - } - - return TargetType.OTHER; - } - - public Target(Entity entity) { - this( - entity.getName(), - entityToTarget(entity), - entity.getType(), - entity.getUniqueId(), - entity.getLocation().clone(), - entity instanceof LivingEntity livingEntity ? - livingEntity.getEyeLocation().clone().add(0.0, -0.5, 0.0) : - entity.getLocation().clone().add(0.0, 0.5, 0.0), - entity.getVelocity() - ); - } - - public Target(Cannon cannon) { - this( - cannon.getCannonName(), - TargetType.CANNON, - null, // No EntityType for a cannon - cannon.getUID(), - cannon.getRandomBarrelBlock().clone().add(0.5, 0.0, 0.5), - cannon.getRandomBarrelBlock().clone().add(0.5, 0.5, 0.5), - VectorUtils.toBaseVector(cannon.getVelocity()) - ); - } -} \ No newline at end of file diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonTargetEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonTargetEvent.java index 6bacf655..1ec078a1 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonTargetEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonTargetEvent.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.event; import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.container.Target; +import at.pavlov.bukkit.container.BukkitTarget; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; @@ -12,10 +12,10 @@ public class CannonTargetEvent extends Event { private static final HandlerList handlers = new HandlerList(); private final Cannon cannon; - private final Target target; + private final BukkitTarget target; private boolean cancelled; - public CannonTargetEvent(Cannon cannon, Target player) + public CannonTargetEvent(Cannon cannon, BukkitTarget player) { this.cannon = cannon; this.target = player; @@ -26,7 +26,7 @@ public Cannon getCannon() { return cannon; } - public Target getPlayer() { + public BukkitTarget getPlayer() { return target; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index fa3c538b..39e7b894 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -1,11 +1,12 @@ package at.pavlov.cannons.utils; +import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.TargetManager; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.cannons.container.Target; +import at.pavlov.bukkit.container.BukkitTarget; import at.pavlov.cannons.projectile.FlyingProjectile; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.enums.ProjectileProperties; @@ -26,10 +27,6 @@ import org.bukkit.util.BlockIterator; import org.bukkit.util.Vector; -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.Random; @@ -353,9 +350,9 @@ public static HashMap getNearbyEntities(Location l, int minRadius, * @param maxRadius radius for search * @return array of Entities in area */ - public static HashMap getNearbyTargets(Location l, int minRadius, int maxRadius){ + public static HashMap getNearbyTargets(Location l, int minRadius, int maxRadius){ int chunkTargets = maxRadius < 16 ? 1 : (maxRadius - (maxRadius % 16))/16; - HashMap radiusTargets = new HashMap<>(); + HashMap radiusTargets = new HashMap<>(); for (int chX = -chunkTargets; chX <= chunkTargets; chX++){ for (int chZ = -chunkTargets; chZ <= chunkTargets; chZ++){ @@ -382,17 +379,17 @@ public static HashMap getNearbyTargets(Location l, int minRadius, continue; } - radiusTargets.put(e.getUniqueId(), new Target(e)); + radiusTargets.put(e.getUniqueId(), new BukkitTarget(e)); } } } for (Cannon cannon : CannonManager.getCannonsInSphere(l, maxRadius)) if (cannon.getRandomBarrelBlock().distanceSquared(l) > minRadius * minRadius) - radiusTargets.put(cannon.getUID(), new Target(cannon)); + radiusTargets.put(cannon.getUID(), new BukkitTarget(cannon)); // additional targets from different plugins e.g. ships - for (Target target : TargetManager.getTargetsInSphere(l, maxRadius)) - if (target.centerLocation().distanceSquared(l) > minRadius * minRadius) + for (BukkitTarget target : TargetManager.getTargetsInSphere(l, maxRadius)) + if (target.centerLocation().getVector().distanceSquared(VectorUtils.fromLoc(l)) > minRadius * minRadius) radiusTargets.put(target.uniqueId(), target); return radiusTargets; } From f2fed94ad7c343fdec719d69f9703a42083f57b9 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 15 Dec 2024 21:25:58 +0100 Subject: [PATCH 70/97] Fix stuff --- .../main/java/at/pavlov/cannons/Aiming.java | 19 +++++++++++++------ .../java/at/pavlov/cannons/TargetManager.java | 12 +++++++++--- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index faa9a65a..dc8c245e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -1,6 +1,7 @@ package at.pavlov.cannons; import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.aim.GunAngles; @@ -20,6 +21,7 @@ import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.FakeBlockType; import at.pavlov.internal.enums.InteractAction; import at.pavlov.internal.enums.MessageEnum; @@ -736,6 +738,10 @@ private void calculateFiringSolution(Cannon cannon) { } + + private boolean canFindTargetSolution(Cannon cannon, BukkitTarget target, Coordinate loctarget) { + return canFindTargetSolution(cannon, target, CoordinateUtil.toLoc(loctarget)); + } /** * find a possible solution to fire the cannon - this is just an estimation * @@ -752,7 +758,7 @@ private boolean canFindTargetSolution(Cannon cannon, BukkitTarget target, Locati Location muzzle = cannon.getMuzzle(); int maxSentryRange = cannon.getCannonDesign().getSentryMaxRange(); - if (target.centerLocation().distanceSquared(muzzle) > maxSentryRange * maxSentryRange) { + if (target.centerLocation().getVector().distanceSquared(VectorUtils.fromLoc(muzzle)) > maxSentryRange * maxSentryRange) { return false; } @@ -790,7 +796,7 @@ private boolean canFindTargetSolution(Cannon cannon, BukkitTarget target, Locati * @return true if a solution was found */ private boolean calculateTargetSolution(Cannon cannon, BukkitTarget target, boolean addSpread) { - Location targetLoc = target.centerLocation(); + Coordinate targetLoc = target.centerLocation(); //aim for the center of the target if there is an area effect of the projectile if (cannon.getLoadedProjectile() != null && (cannon.getLoadedProjectile().getExplosionPower() > 2. || (cannon.getLoadedProjectile().getPlayerDamage() > 1. && cannon.getLoadedProjectile().getPlayerDamageRange() > 2.))) targetLoc = target.groundLocation(); @@ -818,7 +824,7 @@ private boolean calculateTargetSolution(Cannon cannon, BukkitTarget target, bool for (int i = 0; i < 100; i++) { CannonVector fvector = CannonsUtil.directionToVector(cannon.getAimingYaw(), cannon.getAimingPitch(), cannon.getCannonballVelocity()); - double diffY = simulateShot(fvector, cannon.getMuzzle(), targetLoc, cannon.getProjectileEntityType(), maxInterations); + double diffY = simulateShot(fvector, cannon.getMuzzle(), CoordinateUtil.toLoc(targetLoc), cannon.getProjectileEntityType(), maxInterations); if (!cannon.getCannonDesign().isSentryIndirectFire() && Math.abs(diffY) > 1000.0) { // plugin.logDebug("diffY too large: " + diffY); @@ -880,7 +886,8 @@ private boolean verifyTargetSolution(Cannon cannon, BukkitTarget target, double for (int i = 0; start.distance(predVec) < cannon.getCannonDesign().getSentryMaxRange() * 1.2 && i < maxInterations; i++) { //is target distance shorter than before Location predictorLoc = predictor.getLocation(); - double newDist = predictorLoc.distance(target.centerLocation()); + var center = CoordinateUtil.toLoc(target.centerLocation()); + double newDist = predictorLoc.distance(center); if (!(newDist < targetDist)) { // missed the target @@ -888,10 +895,10 @@ private boolean verifyTargetSolution(Cannon cannon, BukkitTarget target, double } targetDist = newDist; //see if we hit something, but wait until the cannonball is 1 block away (safety first) - Block block = predictorLoc.getBlock(); + Block block = CoordinateUtil.toLoc(target.centerLocation()).getBlock(); if (start.distance(predVec) > 1. && !block.isEmpty()) { predictor.revertProjectileLocation(false); - return CannonsUtil.findSurface(predictorLoc, predVec).distance(target.centerLocation()) < maxdistance; + return CannonsUtil.findSurface(predictorLoc, predVec).distance(center) < maxdistance; } predictor.updateProjectileLocation(false); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java index 64fcbf1f..4319e8dc 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java @@ -1,8 +1,12 @@ package at.pavlov.cannons; import at.pavlov.bukkit.container.BukkitTarget; +import at.pavlov.bukkit.factory.VectorUtils; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; import org.bukkit.Location; import org.bukkit.util.Vector; +import org.jetbrains.annotations.NotNull; import java.util.HashMap; import java.util.HashSet; @@ -25,9 +29,10 @@ public static BukkitTarget getTarget(UUID uid){ public static HashSet getTargetsInSphere(Location center, double radius){ HashSet newTargetList = new HashSet<>(); + CannonVector vector = VectorUtils.fromLoc(center); for (BukkitTarget target : targets.values()) { - if (target.centerLocation().distanceSquared(center) < radius * radius) + if (target.centerLocation().getVector().distanceSquared(vector) < radius * radius) newTargetList.add(target); } return newTargetList; @@ -35,10 +40,11 @@ public static HashSet getTargetsInSphere(Location center, double r public static HashSet getTargetsInBox(Location center, double lengthX, double lengthY, double lengthZ){ HashSet newTargetList = new HashSet<>(); + CannonVector vector = VectorUtils.fromLoc(center); for (BukkitTarget target : targets.values()) { - Location newLoc = target.centerLocation(); - Vector box = newLoc.subtract(center).toVector(); + Coordinate newLoc = target.centerLocation(); + CannonVector box = newLoc.getVector().subtract(vector); if (Objects.equals(newLoc.getWorld(), center.getWorld()) && Math.abs(box.getX()) Date: Sun, 15 Dec 2024 21:33:21 +0100 Subject: [PATCH 71/97] Abstract DeathCause and make BukkitDeathCause --- .../bukkit/container/BukkitDeathCause.java | 12 +++++ .../pavlov/internal/container/DeathCause.java | 49 +++++++++++++++++++ .../at/pavlov/cannons/CreateExplosion.java | 8 +-- .../pavlov/cannons/container/DeathCause.java | 9 ---- 4 files changed, 65 insertions(+), 13 deletions(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitDeathCause.java create mode 100644 api-internal/src/main/java/at/pavlov/internal/container/DeathCause.java delete mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitDeathCause.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitDeathCause.java new file mode 100644 index 00000000..fe0755a2 --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitDeathCause.java @@ -0,0 +1,12 @@ +package at.pavlov.bukkit.container; + +import at.pavlov.bukkit.projectile.BukkitProjectile; +import at.pavlov.internal.container.DeathCause; + +import java.util.UUID; + +public final class BukkitDeathCause extends DeathCause { + public BukkitDeathCause(BukkitProjectile projectile, UUID cannonUID, UUID shooterUID) { + super(projectile, cannonUID, shooterUID); + } +} diff --git a/api-internal/src/main/java/at/pavlov/internal/container/DeathCause.java b/api-internal/src/main/java/at/pavlov/internal/container/DeathCause.java new file mode 100644 index 00000000..608ad25f --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/container/DeathCause.java @@ -0,0 +1,49 @@ +package at.pavlov.internal.container; + +import at.pavlov.internal.projectile.Projectile; +import lombok.Getter; +import lombok.experimental.Accessors; + +import java.util.Objects; +import java.util.UUID; + +@Accessors(fluent = true) +@Getter +public abstract class DeathCause> { + protected final Proj projectile; + protected final UUID cannonUID; + protected final UUID shooterUID; + + public DeathCause(Proj projectile, UUID cannonUID, UUID shooterUID) { + this.projectile = projectile; + this.cannonUID = cannonUID; + this.shooterUID = shooterUID; + } + + @Override + public boolean equals(Object obj) { + if (obj == this) return true; + if (obj == null) return false; + + if (!(obj instanceof DeathCause deathCause)) { + return false; + } + + return Objects.equals(this.projectile, deathCause.projectile) && + Objects.equals(this.cannonUID, deathCause.cannonUID) && + Objects.equals(this.shooterUID, deathCause.shooterUID); + } + + @Override + public int hashCode() { + return Objects.hash(projectile, cannonUID, shooterUID); + } + + @Override + public String toString() { + return "DeathCause[" + + "projectile=" + projectile + ", " + + "cannonUID=" + cannonUID + ", " + + "shooterUID=" + shooterUID + ']'; + } +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index a8dd82e7..3f799b9c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -5,7 +5,7 @@ import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.config.Config; -import at.pavlov.cannons.container.DeathCause; +import at.pavlov.bukkit.container.BukkitDeathCause; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.DelayedTask; import at.pavlov.cannons.event.CannonDamageEvent; @@ -81,7 +81,7 @@ public class CreateExplosion { // the entity is used in 1 tick. There should be no garbage collector problem private final HashMap damageMap = new HashMap<>(); // players killed by cannons - private final HashMap killedPlayers = new HashMap<>(); + private final HashMap killedPlayers = new HashMap<>(); private final AsyncTaskManager taskManager = AsyncTaskManager.get(); private final Random r = new Random(); @@ -898,7 +898,7 @@ private void fireEntityDeathEvent(FlyingProjectile cannonball) { lEntities.add((LivingEntity) entity); if (entity instanceof Player) { - this.killedPlayers.put(entity.getUniqueId(), new DeathCause(cannonball.getProjectile(), + this.killedPlayers.put(entity.getUniqueId(), new BukkitDeathCause(cannonball.getProjectile(), cannonball.getCannonUID(), cannonball.getShooterUID())); } } @@ -1273,7 +1273,7 @@ public boolean isKilledByCannons(UUID playerUID) { * @param playerUID killed player * @return death cause */ - public DeathCause getDeathCause(UUID playerUID) { + public BukkitDeathCause getDeathCause(UUID playerUID) { return this.killedPlayers.get(playerUID); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java deleted file mode 100644 index bef662cb..00000000 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/container/DeathCause.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.pavlov.cannons.container; - -import at.pavlov.bukkit.projectile.BukkitProjectile; - -import java.util.UUID; - -public record DeathCause(BukkitProjectile projectile, UUID cannonUID, UUID shooterUID) { - -} From 7214d90c1c8bf1c12bfe58670d817ba249e4c6d0 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 16 Dec 2024 13:39:35 +0100 Subject: [PATCH 72/97] Abstract CannonDesign --- .../pavlov/bukkit/container/BukkitBlock.java | 7 - .../internal/cannons/data/CannonDesign.java | 536 ++++++++++++++++++ .../internal/container/SimpleBlock.java | 7 + 3 files changed, 543 insertions(+), 7 deletions(-) create mode 100644 api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java index eb24ccc6..0f0b6c29 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java @@ -194,13 +194,6 @@ public void rotate90() { this.locX = newx; } - /** - * SimpleBlock to Vector - */ - public CannonVector toVector() { - return new CannonVector(locX, locY, locZ); - } - public static BlockData rotateBlockFacingClockwise(BlockData blockData) { if (blockData instanceof org.bukkit.block.data.Directional directional) { directional.setFacing(rotateFace(directional.getFacing())); diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java new file mode 100644 index 00000000..66cb0de9 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java @@ -0,0 +1,536 @@ +package at.pavlov.internal.cannons.data; + +import at.pavlov.internal.CannonLogger; +import at.pavlov.internal.cannons.holders.CannonMainDataHolder; +import at.pavlov.internal.cannons.holders.CannonPositionHolder; +import at.pavlov.internal.container.CannonBlocks; +import at.pavlov.internal.container.ItemHolder; +import at.pavlov.internal.container.SimpleBlock; +import at.pavlov.internal.container.SoundHolder; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; +import at.pavlov.internal.projectile.Projectile; +import lombok.Data; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +@Data public class CannonDesign < + Block, + Facing, + Material, + IH extends ItemHolder, + SH extends SoundHolder, + SB extends SimpleBlock, + CB extends CannonBlocks + > { + //general + protected String designID; + protected String designName; + protected String messageName; + protected String description; + protected boolean lastUserBecomesOwner; + + //sign + protected boolean signRequired; + + //ammunition_consumption + protected String gunpowderName; + protected IH gunpowderType; + protected boolean gunpowderNeeded; + protected boolean gunpowderConsumption; + protected boolean projectileConsumption; + protected boolean ammoInfiniteForPlayer; + protected boolean ammoInfiniteForRedstone; + protected boolean autoreloadRedstone; + protected boolean removeChargeAfterFiring; + protected boolean autoloadChargeWhenLoadingProjectile; + protected boolean preloaded; + + //barrelProperties + protected int maxLoadableGunpowder; + protected double multiplierVelocity; + protected double spreadOfCannon; + + //timings + protected double blastConfusion; + protected double fuseBurnTime; + protected double fuseBurnTimeRandomness; + protected double barrelCooldownTime; + protected double loadTime; + + //angles + protected Facing defaultHorizontalFacing; + protected double defaultVerticalAngle; + protected double maxHorizontalAngle; + protected double minHorizontalAngle; + protected double maxVerticalAngle; + protected double minVerticalAngle; + protected double maxHorizontalAngleOnShip; + protected double minHorizontalAngleOnShip; + protected double maxVerticalAngleOnShip; + protected double minVerticalAngleOnShip; + protected double angleStepSize; + protected double angleLargeStepSize; + protected int angleUpdateSpeed; + protected boolean angleUpdateMessage; + + //impactPredictor + protected boolean predictorEnabled; + protected int predictorDelay; //in ms + protected int predictorUpdate; //in ms + + //sentry + protected boolean sentry; + protected boolean sentryIndirectFire; + protected int sentryMinRange; + protected int sentryMaxRange; + protected double sentrySpread; + protected int sentryUpdateTime; //in ms + protected int sentrySwapTime; //in ms + + //linkCannons + protected boolean linkCannonsEnabled; + protected int linkCannonsDistance; + + //heatManagment + protected boolean heatManagementEnabled; + protected boolean automaticTemperatureControl; + protected double burnDamage; + protected double burnSlowing; + protected double heatIncreasePerGunpowder; + protected double coolingCoefficient; + protected double coolingAmount; + protected boolean automaticCooling; + protected double warningTemperature; + protected double criticalTemperature; + protected double maximumTemperature; + protected List itemCooling = new ArrayList<>(); + protected List itemCoolingUsed = new ArrayList<>(); + + //Overloading stuff + protected boolean overloadingEnabled; + protected boolean overloadingRealMode; + protected double overloadingExponent; + protected double overloadingChanceInc; + protected int overloadingMaxOverloadableGunpowder; + protected double overloadingChanceOfExplosionPerGunpowder; + protected boolean overloadingDependsOfTemperature; + + protected double economyBuildingCost; + protected double economyDismantlingRefund; + protected double economyDestructionRefund; + + //realisticBehaviour + protected boolean FiringItemRequired; + protected double sootPerGunpowder; + protected int projectilePushing; + protected boolean hasRecoil; + protected boolean frontloader; + protected boolean rotable; + protected int massOfCannon; + protected int startingSoot; + protected double explodingLoadedCannons; + protected boolean fireAfterLoading; + protected double dismantlingDelay; + + //permissions + protected String permissionBuild; + protected String permissionDismantle; + protected String permissionRename; + protected String permissionLoad; + protected String permissionFire; + protected String permissionAdjust; + protected String permissionAutoaim; + protected String permissionObserver; + protected String permissionTargetTracking; + protected String permissionRedstone; + protected String permissionThermometer; + protected String permissionRamrod; + protected String permissionAutoreload; + protected String permissionSpreadMultiplier; + + //accessRestriction + protected boolean accessForOwnerOnly; + + //allowedProjectile + protected List allowedProjectiles; + + //sounds + protected SH soundCreate; + protected SH soundDestroy; + protected SH soundDismantle; + protected SH soundAdjust; + protected SH soundIgnite; + protected SH soundFiring; + protected SH soundGunpowderLoading; + protected SH soundGunpowderOverloading; + protected SH soundCool; + protected SH soundHot; + protected SH soundRamrodCleaning; + protected SH soundRamrodCleaningDone; + protected SH soundRamrodPushing; + protected SH soundRamrodPushingDone; + protected SH soundThermometer; + protected SH soundEnableAimingMode; + protected SH soundDisableAimingMode; + protected SH soundSelected; + + + //constructionblocks: + protected Block schematicBlockTypeIgnore; //this block this is ignored in the schematic file + protected Block schematicBlockTypeMuzzle; //location of the muzzle + protected Block schematicBlockTypeRotationCenter; //location of the roatation + protected Block schematicBlockTypeChestAndSign; //locations of the chest and sign + protected Block schematicBlockTypeRedstoneTorch; //locations of the redstone torches + protected Block schematicBlockTypeRedstoneWireAndRepeater; //locations of the redstone wires and repeaters + protected Block schematicBlockTypeRedstoneTrigger; //locations of button or levers + protected Block ingameBlockTypeRedstoneTrigger; //block which is placed instead of the place holder + protected Block schematicBlockTypeRightClickTrigger; //locations of the right click trigger + protected Block ingameBlockTypeRightClickTrigger; //block type of the tigger in game + protected Block schematicBlockTypeFiringIndicator; //location of the firing indicator + protected List schematicBlockTypeProtected; //list of blocks that are protected from explosions (e.g. buttons) + + //cannon design block lists for every direction (NORTH, EAST, SOUTH, WEST) + protected final HashMap cannonBlockMap = new HashMap<>(); + protected final HashSet allowedMaterials = new HashSet<>(); + + + + /** + * returns the rotation center of a cannon design + */ + public & CannonMainDataHolder> Coordinate getRotationCenter(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + if (cannonBlocks != null) + { + CannonVector vector = cannonBlocks.getRotationCenter().clone().add(cannon.getOffset()); + return new Coordinate(vector, cannon.getWorld()); + } + + CannonLogger.getLogger().info("missing rotation center for cannon design " + cannon.getCannonName()); + return new Coordinate(cannon.getOffset(), cannon.getWorld()); + } + + + /** + * returns the muzzle location + */ + public & CannonMainDataHolder> Coordinate getMuzzle(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + if (cannonBlocks != null) + { + CannonVector vector = cannonBlocks.getMuzzle().clone().add(cannon.getOffset()); + return new Coordinate(vector, cannon.getWorld()); + } + + CannonLogger.getLogger().info("missing muzzle location for cannon design " + cannon.getCannonName()); + return new Coordinate(cannon.getOffset(), cannon.getWorld()); + } + + /** + * returns one trigger location + * @param cannon the used cannon + * @return the firing trigger of the cannon - can be null if the cannon has no trigger + */ + public & CannonMainDataHolder> Coordinate getFiringTrigger(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + if (cannonBlocks != null && cannonBlocks.getFiringTrigger() != null) + { + CannonVector vector = cannonBlocks.getFiringTrigger().clone().add(cannon.getOffset()); + return new Coordinate(vector, cannon.getWorld()); + } + return null; + } + + /** + * returns a list of all cannonBlocks + * @param cannonDirection - the direction the cannon is facing + * @return List of cannon blocks + */ + public List getAllCannonBlocks(Facing cannonDirection) + { + CB cannonBlocks = cannonBlockMap.get(cannonDirection); + if (cannonBlocks != null) + { + return cannonBlocks.getAllCannonBlocks(); + } + + return new ArrayList<>(); + } + + + /** + * returns a list of all cannonBlocks + */ + public & CannonMainDataHolder> List getAllCannonBlocks(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + List locList = new ArrayList<>(); + if (cannonBlocks != null) + { + for (SB block : cannonBlocks.getAllCannonBlocks()) + { + CannonVector vect = block.toVector(); + CannonVector calc = vect.clone().add(cannon.getOffset()); + locList.add(new Coordinate(calc, cannon.getWorld())); + } + } + return locList; + } + + /** + * returns a list of all destructible blocks + */ + public & CannonMainDataHolder> List getDestructibleBlocks(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + List locList = new ArrayList<>(); + if (cannonBlocks != null) + { + for (CannonVector vect : cannonBlocks.getDestructibleBlocks()) + { + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(new Coordinate(vector, cannon.getWorld())); + } + } + return locList; + } + + + /** + * returns a list of all firingIndicator blocks + */ + public & CannonMainDataHolder> List getFiringIndicator(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + List locList = new ArrayList<>(); + if (cannonBlocks != null) + { + for (CannonVector vect : cannonBlocks.getFiringIndicator()) + { + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(new Coordinate(vector, cannon.getWorld())); + } + } + return locList; + } + + /** + * returns a list of all loading interface blocks + */ + public & CannonMainDataHolder> List getLoadingInterface(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + List locList = new ArrayList<>(); + if (cannonBlocks != null) + { + for (CannonVector vect : cannonBlocks.getBarrelBlocks()) + { + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(new Coordinate(vector, cannon.getWorld())); + } + } + return locList; + } + + /** + * returns a list of all barrel blocks + */ + public & CannonMainDataHolder> List getBarrelBlocks(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + List locList = new ArrayList<>(); + if (cannonBlocks != null) + { + for (CannonVector vect : cannonBlocks.getBarrelBlocks()) + { + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(new Coordinate(vector, cannon.getWorld())); + } + } + return locList; + } + + /** + * returns a list of all right click trigger blocks + */ + public & CannonMainDataHolder> List getRightClickTrigger(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + List locList = new ArrayList<>(); + if (cannonBlocks != null) + { + for (CannonVector vect : cannonBlocks.getRightClickTrigger()) + { + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(new Coordinate(vector, cannon.getWorld())); + } + } + return locList; + } + + /** + * returns a list of all redstone trigger blocks + */ + public & CannonMainDataHolder> List getRedstoneTrigger(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + List locList = new ArrayList<>(); + if (cannonBlocks != null) + { + for (CannonVector vect : cannonBlocks.getRedstoneTrigger()) + { + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(new Coordinate(vector, cannon.getWorld())); + } + } + return locList; + } + + + /** + * returns a list of all chest/sign blocks + */ + public & CannonMainDataHolder> List getChestsAndSigns(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + List locList = new ArrayList<>(); + if (cannonBlocks != null) + { + for (SB block : cannonBlocks.getChestsAndSigns()) + { + var vector = block.toVector().add(cannon.getOffset()); + locList.add(new Coordinate(vector, cannon.getWorld())); + } + } + return locList; + } + + /** + * returns a list of all redstone torch blocks + */ + public & CannonMainDataHolder> List getRedstoneTorches(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + List locList = new ArrayList<>(); + if (cannonBlocks != null) + { + for (CannonVector vect : cannonBlocks.getRedstoneTorches()) + { + CannonVector vector = vect.clone().add(cannon.getOffset()); + locList.add(new Coordinate(vector, cannon.getWorld())); + } + } + return locList; + } + + /** + * returns a list of all redstone wire/repeater blocks + */ + public & CannonMainDataHolder> List getRedstoneWireAndRepeater(T cannon) + { + CB cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + List locList = new ArrayList<>(); + if (cannonBlocks != null) + { + for (SB block : cannonBlocks.getRedstoneWiresAndRepeater()) + { + var vector = cannon.getOffset().add(block.toVector()); + locList.add(new Coordinate(vector, cannon.getWorld())); + } + } + return locList; + } + + /** + * returns true if the projectile has the same Id of a allowed projectile + * @param projectile projectile to load + * @return true if the projectile can be loaded in this type of cannon + */ + public > boolean canLoad(T projectile) + { + for (String p : allowedProjectiles) + { + if (projectile.getProjectileID().equals(p)) + return true; + } + + return false; + } + + /** + * Normal means without overloading stuff + * @return maxLoadableGunpowder + */ + public int getMaxLoadableGunpowderNormal() + { + return maxLoadableGunpowder; + } + /** + * Absolute means maximum loadable gunpowder + * @return if overloading stuff is enabled for this cannon, returns maxLoadableGunpowder+overloading_maxOverloadableGunpowder, else returns maxLoadableGunpowder + */ + public int getMaxLoadableGunpowderOverloaded() + { + if(overloadingEnabled) + return maxLoadableGunpowder+overloadingMaxOverloadableGunpowder; + else + return getMaxLoadableGunpowderNormal(); + } + + /* TODO: Link block data and material ? + public void putCannonBlockMap(Facing cannonDirection, CB blocks) { + for (var block : blocks.getAllCannonBlocks()) { + allowedMaterials.add(block.getBlockData().getMaterial()); + } + + cannonBlockMap.put(cannonDirection, blocks); + }*/ + + public boolean isAllowedMaterial(Material m) { + return allowedMaterials.contains(m); + } + + + /* + * is this Item a cooling tool to cool down a cannon + * @param item - item to check + * @return - true if this item is in the list of cooling items + */ + /* + public boolean isCoolingTool(ItemStack item) + { + //todo rework tool properties + for (BukkitItemHolder mat : itemCooling) + { + if (mat.equalsFuzzy(item)) + return true; + } + return false; + }*/ + + /* + * returns the used used item. E.g. a water bucket will be an empty bucket. + * @param item - the item used for the event + * @return the new item which replaces the old one + */ + /* + public ItemStack getCoolingToolUsed(ItemStack item) + { + for (int i=0; i < itemCooling.size(); i++) + { + //todo rework tool properties + if (itemCooling.get(i).equalsFuzzy(item)) + { + return itemCoolingUsed.get(i).toItemStack(item.getAmount()); + } + } + return null; + }*/ +} diff --git a/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java b/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java index 1797be47..1379ccfb 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java @@ -1,6 +1,7 @@ package at.pavlov.internal.container; +import at.pavlov.internal.container.location.CannonVector; import lombok.Data; import java.util.function.Function; @@ -31,6 +32,12 @@ public SimpleBlock(int x, int y, int z, Block blockData) { */ public abstract boolean compareMaterial(Block block); + /** + * SimpleBlock to Vector + */ + public CannonVector toVector() { + return new CannonVector(locX, locY, locZ); + } /** * compares material and facing From 5437e37e0dfcb4b9a56c036715417573f8b66ddf Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 16 Dec 2024 21:31:55 +0100 Subject: [PATCH 73/97] Rename BukkitCannonDesign --- .../pavlov/bukkit/cannons/CannonDesign.java | 531 ------------------ .../bukkit/cannons/CannonDesignHolder.java | 7 +- .../cannons/data/BukkitCannonDesign.java | 94 ++++ .../main/java/at/pavlov/cannons/Aiming.java | 18 +- .../java/at/pavlov/cannons/FireCannon.java | 14 +- .../java/at/pavlov/cannons/cannon/Cannon.java | 12 +- .../pavlov/cannons/cannon/CannonManager.java | 8 +- .../pavlov/cannons/cannon/DesignStorage.java | 28 +- .../at/pavlov/cannons/commands/Commands.java | 4 +- .../at/pavlov/cannons/dao/LoadCannonTask.java | 4 +- .../cannons/listener/PlayerListener.java | 8 +- .../cannons/utils/DesignComparator.java | 8 +- 12 files changed, 150 insertions(+), 586 deletions(-) delete mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java deleted file mode 100644 index 70fcab60..00000000 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesign.java +++ /dev/null @@ -1,531 +0,0 @@ -package at.pavlov.bukkit.cannons; - -import at.pavlov.bukkit.container.BukkitBlock; -import at.pavlov.bukkit.container.BukkitCannonBlocks; -import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.factory.VectorUtils; -import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.internal.CannonLogger; -import at.pavlov.internal.container.location.CannonVector; -import lombok.Data; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.BlockFace; -import org.bukkit.block.data.BlockData; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.List; - -@Data public class CannonDesign { - //general - private String designID; - private String designName; - private String messageName; - private String description; - private boolean lastUserBecomesOwner; - - //sign - private boolean signRequired; - - //ammunition_consumption - private String gunpowderName; - private BukkitItemHolder gunpowderType; - private boolean gunpowderNeeded; - private boolean gunpowderConsumption; - private boolean projectileConsumption; - private boolean ammoInfiniteForPlayer; - private boolean ammoInfiniteForRedstone; - private boolean autoreloadRedstone; - private boolean removeChargeAfterFiring; - private boolean autoloadChargeWhenLoadingProjectile; - private boolean preloaded; - - //barrelProperties - private int maxLoadableGunpowder; - private double multiplierVelocity; - private double spreadOfCannon; - - //timings - private double blastConfusion; - private double fuseBurnTime; - private double fuseBurnTimeRandomness; - private double barrelCooldownTime; - private double loadTime; - - //angles - private BlockFace defaultHorizontalFacing; - private double defaultVerticalAngle; - private double maxHorizontalAngle; - private double minHorizontalAngle; - private double maxVerticalAngle; - private double minVerticalAngle; - private double maxHorizontalAngleOnShip; - private double minHorizontalAngleOnShip; - private double maxVerticalAngleOnShip; - private double minVerticalAngleOnShip; - private double angleStepSize; - private double angleLargeStepSize; - private int angleUpdateSpeed; - private boolean angleUpdateMessage; - - //impactPredictor - private boolean predictorEnabled; - private int predictorDelay; //in ms - private int predictorUpdate; //in ms - - //sentry - private boolean sentry; - private boolean sentryIndirectFire; - private int sentryMinRange; - private int sentryMaxRange; - private double sentrySpread; - private int sentryUpdateTime; //in ms - private int sentrySwapTime; //in ms - - //linkCannons - private boolean linkCannonsEnabled; - private int linkCannonsDistance; - - //heatManagment - private boolean heatManagementEnabled; - private boolean automaticTemperatureControl; - private double burnDamage; - private double burnSlowing; - private double heatIncreasePerGunpowder; - private double coolingCoefficient; - private double coolingAmount; - private boolean automaticCooling; - private double warningTemperature; - private double criticalTemperature; - private double maximumTemperature; - private List itemCooling = new ArrayList<>(); - private List itemCoolingUsed = new ArrayList<>(); - - //Overloading stuff - private boolean overloadingEnabled; - private boolean overloadingRealMode; - private double overloadingExponent; - private double overloadingChanceInc; - private int overloadingMaxOverloadableGunpowder; - private double overloadingChanceOfExplosionPerGunpowder; - private boolean overloadingDependsOfTemperature; - - private double economyBuildingCost; - private double economyDismantlingRefund; - private double economyDestructionRefund; - - //realisticBehaviour - private boolean FiringItemRequired; - private double sootPerGunpowder; - private int projectilePushing; - private boolean hasRecoil; - private boolean frontloader; - private boolean rotable; - private int massOfCannon; - private int startingSoot; - private double explodingLoadedCannons; - private boolean fireAfterLoading; - private double dismantlingDelay; - - //permissions - private String permissionBuild; - private String permissionDismantle; - private String permissionRename; - private String permissionLoad; - private String permissionFire; - private String permissionAdjust; - private String permissionAutoaim; - private String permissionObserver; - private String permissionTargetTracking; - private String permissionRedstone; - private String permissionThermometer; - private String permissionRamrod; - private String permissionAutoreload; - private String permissionSpreadMultiplier; - - //accessRestriction - private boolean accessForOwnerOnly; - - //allowedProjectile - private List allowedProjectiles; - - //sounds - private BukkitSoundHolder soundCreate; - private BukkitSoundHolder soundDestroy; - private BukkitSoundHolder soundDismantle; - private BukkitSoundHolder soundAdjust; - private BukkitSoundHolder soundIgnite; - private BukkitSoundHolder soundFiring; - private BukkitSoundHolder soundGunpowderLoading; - private BukkitSoundHolder soundGunpowderOverloading; - private BukkitSoundHolder soundCool; - private BukkitSoundHolder soundHot; - private BukkitSoundHolder soundRamrodCleaning; - private BukkitSoundHolder soundRamrodCleaningDone; - private BukkitSoundHolder soundRamrodPushing; - private BukkitSoundHolder soundRamrodPushingDone; - private BukkitSoundHolder soundThermometer; - private BukkitSoundHolder soundEnableAimingMode; - private BukkitSoundHolder soundDisableAimingMode; - private BukkitSoundHolder soundSelected; - - - //constructionblocks: - private BlockData schematicBlockTypeIgnore; //this block this is ignored in the schematic file - private BlockData schematicBlockTypeMuzzle; //location of the muzzle - private BlockData schematicBlockTypeRotationCenter; //location of the roatation - private BlockData schematicBlockTypeChestAndSign; //locations of the chest and sign - private BlockData schematicBlockTypeRedstoneTorch; //locations of the redstone torches - private BlockData schematicBlockTypeRedstoneWireAndRepeater; //locations of the redstone wires and repeaters - private BlockData schematicBlockTypeRedstoneTrigger; //locations of button or levers - private BlockData ingameBlockTypeRedstoneTrigger; //block which is placed instead of the place holder - private BlockData schematicBlockTypeRightClickTrigger; //locations of the right click trigger - private BlockData ingameBlockTypeRightClickTrigger; //block type of the tigger in game - private BlockData schematicBlockTypeFiringIndicator; //location of the firing indicator - private List schematicBlockTypeProtected; //list of blocks that are protected from explosions (e.g. buttons) - - //cannon design block lists for every direction (NORTH, EAST, SOUTH, WEST) - private final HashMap cannonBlockMap = new HashMap<>(); - private final EnumSet allowedMaterials = EnumSet.noneOf(Material.class); - - - - /** - * returns the rotation center of a cannon design - */ - public Location getRotationCenter(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - if (cannonBlocks != null) - { - CannonVector vector = cannonBlocks.getRotationCenter().clone().add(cannon.getOffset()); - return VectorUtils.toLoc(cannon.getWorldBukkit(), vector); - } - - CannonLogger.getLogger().info("missing rotation center for cannon design " + cannon.getCannonName()); - return VectorUtils.toLoc(cannon.getWorldBukkit(), cannon.getOffset()); - } - - - /** - * returns the muzzle location - */ - public Location getMuzzle(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - if (cannonBlocks != null) - { - CannonVector vector = cannonBlocks.getMuzzle().clone().add(cannon.getOffset()); - return VectorUtils.toLoc(cannon.getWorldBukkit(), vector); - } - - CannonLogger.getLogger().info("missing muzzle location for cannon design " + cannon.getCannonName()); - return VectorUtils.toLoc(cannon.getWorldBukkit(), cannon.getOffset()); - } - - /** - * returns one trigger location - * @param cannon the used cannon - * @return the firing trigger of the cannon - can be null if the cannon has no trigger - */ - public Location getFiringTrigger(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - if (cannonBlocks != null && cannonBlocks.getFiringTrigger() != null) - { - CannonVector vector = cannonBlocks.getFiringTrigger().clone().add(cannon.getOffset()); - return VectorUtils.toLoc(cannon.getWorldBukkit(), vector); - } - return null; - } - - /** - * returns a list of all cannonBlocks - * @param cannonDirection - the direction the cannon is facing - * @return List of cannon blocks - */ - public List getAllCannonBlocks(BlockFace cannonDirection) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannonDirection); - if (cannonBlocks != null) - { - return cannonBlocks.getAllCannonBlocks(); - } - - return new ArrayList<>(); - } - - - /** - * returns a list of all cannonBlocks - */ - public List getAllCannonBlocks(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - List locList = new ArrayList<>(); - if (cannonBlocks != null) - { - for (BukkitBlock block : cannonBlocks.getAllCannonBlocks()) - { - CannonVector vect = block.toVector(); - CannonVector calc = vect.clone().add(cannon.getOffset()); - locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), calc)); - } - } - return locList; - } - - /** - * returns a list of all destructible blocks - */ - public List getDestructibleBlocks(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - List locList = new ArrayList<>(); - if (cannonBlocks != null) - { - for (CannonVector vect : cannonBlocks.getDestructibleBlocks()) - { - CannonVector vector = vect.clone().add(cannon.getOffset()); - locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); - } - } - return locList; - } - - - /** - * returns a list of all firingIndicator blocks - */ - public List getFiringIndicator(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - List locList = new ArrayList<>(); - if (cannonBlocks != null) - { - for (CannonVector vect : cannonBlocks.getFiringIndicator()) - { - CannonVector vector = vect.clone().add(cannon.getOffset()); - locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); - } - } - return locList; - } - - /** - * returns a list of all loading interface blocks - */ - public List getLoadingInterface(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - List locList = new ArrayList<>(); - if (cannonBlocks != null) - { - for (CannonVector vect : cannonBlocks.getBarrelBlocks()) - { - CannonVector vector = vect.clone().add(cannon.getOffset()); - locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); - } - } - return locList; - } - - /** - * returns a list of all barrel blocks - */ - public List getBarrelBlocks(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - List locList = new ArrayList<>(); - if (cannonBlocks != null) - { - for (CannonVector vect : cannonBlocks.getBarrelBlocks()) - { - CannonVector vector = vect.clone().add(cannon.getOffset()); - locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); - } - } - return locList; - } - - /** - * returns a list of all right click trigger blocks - */ - public List getRightClickTrigger(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - List locList = new ArrayList<>(); - if (cannonBlocks != null) - { - for (CannonVector vect : cannonBlocks.getRightClickTrigger()) - { - CannonVector vector = vect.clone().add(cannon.getOffset()); - locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); - } - } - return locList; - } - - /** - * returns a list of all redstone trigger blocks - */ - public List getRedstoneTrigger(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - List locList = new ArrayList<>(); - if (cannonBlocks != null) - { - for (CannonVector vect : cannonBlocks.getRedstoneTrigger()) - { - CannonVector vector = vect.clone().add(cannon.getOffset()); - locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); - } - } - return locList; - } - - - /** - * returns a list of all chest/sign blocks - */ - public List getChestsAndSigns(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - List locList = new ArrayList<>(); - if (cannonBlocks != null) - { - for (BukkitBlock block : cannonBlocks.getChestsAndSigns()) - { - locList.add(block.toLocation(cannon.getWorldBukkit(), cannon.getOffset())); - } - } - return locList; - } - - /** - * returns a list of all redstone torch blocks - */ - public List getRedstoneTorches(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - List locList = new ArrayList<>(); - if (cannonBlocks != null) - { - for (CannonVector vect : cannonBlocks.getRedstoneTorches()) - { - CannonVector vector = vect.clone().add(cannon.getOffset()); - locList.add(VectorUtils.toLoc(cannon.getWorldBukkit(), vector)); - } - } - return locList; - } - - /** - * returns a list of all redstone wire/repeater blocks - */ - public List getRedstoneWireAndRepeater(CannonBukkit cannon) - { - BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); - List locList = new ArrayList<>(); - if (cannonBlocks != null) - { - for (BukkitBlock block : cannonBlocks.getRedstoneWiresAndRepeater()) - { - locList.add(block.toLocation(cannon.getWorldBukkit(),cannon.getOffset())); - } - } - return locList; - } - - /** - * returns true if the projectile has the same Id of a allowed projectile - * @param projectile projectile to load - * @return true if the projectile can be loaded in this type of cannon - */ - public boolean canLoad(BukkitProjectile projectile) - { - for (String p : allowedProjectiles) - { - if (projectile.getProjectileID().equals(p)) - return true; - } - - return false; - } - - /** - * Normal means without overloading stuff - * @return maxLoadableGunpowder - */ - public int getMaxLoadableGunpowderNormal() - { - return maxLoadableGunpowder; - } - /** - * Absolute means maximum loadable gunpowder - * @return if overloading stuff is enabled for this cannon, returns maxLoadableGunpowder+overloading_maxOverloadableGunpowder, else returns maxLoadableGunpowder - */ - public int getMaxLoadableGunpowderOverloaded() - { - if(overloadingEnabled) - return maxLoadableGunpowder+overloadingMaxOverloadableGunpowder; - else - return getMaxLoadableGunpowderNormal(); - } - - public void putCannonBlockMap(BlockFace cannonDirection, BukkitCannonBlocks blocks) { - for (var block : blocks.getAllCannonBlocks()) { - allowedMaterials.add(block.getBlockData().getMaterial()); - } - - cannonBlockMap.put(cannonDirection, blocks); - } - - public boolean isAllowedMaterial(Material m) { - return allowedMaterials.contains(m); - } - - @Override - public String toString() - { - return "designID:" + designID + " name:" + designName + " blocks:" + getAllCannonBlocks(BlockFace.NORTH).size(); - } - - /** - * is this Item a cooling tool to cool down a cannon - * @param item - item to check - * @return - true if this item is in the list of cooling items - */ - public boolean isCoolingTool(ItemStack item) - { - //todo rework tool properties - for (BukkitItemHolder mat : itemCooling) - { - if (mat.equalsFuzzy(item)) - return true; - } - return false; - } - - /** - * returns the used used item. E.g. a water bucket will be an empty bucket. - * @param item - the item used for the event - * @return the new item which replaces the old one - */ - public ItemStack getCoolingToolUsed(ItemStack item) - { - for (int i=0; i < itemCooling.size(); i++) - { - //todo rework tool properties - if (itemCooling.get(i).equalsFuzzy(item)) - { - return itemCoolingUsed.get(i).toItemStack(item.getAmount()); - } - } - return null; - } -} diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesignHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesignHolder.java index 9de1600b..d366e016 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesignHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDesignHolder.java @@ -1,17 +1,18 @@ package at.pavlov.bukkit.cannons; +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.internal.cannons.functionalities.Updatable; public interface CannonDesignHolder extends Updatable { - void setCannonDesign(CannonDesign design); + void setCannonDesign(BukkitCannonDesign design); - CannonDesign getCannonDesign(); + BukkitCannonDesign getCannonDesign(); default boolean sameDesign(CannonBukkit cannon) { return sameDesign(cannon.getCannonDesign()); } - default boolean sameDesign(CannonDesign cannonDesign) { + default boolean sameDesign(BukkitCannonDesign cannonDesign) { return getCannonDesign().equals(cannonDesign); } diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java new file mode 100644 index 00000000..b271c982 --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java @@ -0,0 +1,94 @@ +package at.pavlov.bukkit.cannons.data; + +import at.pavlov.bukkit.cannons.CannonBukkit; +import at.pavlov.bukkit.container.BukkitBlock; +import at.pavlov.bukkit.container.BukkitCannonBlocks; +import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.container.BukkitSoundHolder; +import at.pavlov.bukkit.factory.VectorUtils; +import at.pavlov.internal.CannonLogger; +import at.pavlov.internal.cannons.data.CannonDesign; +import at.pavlov.internal.container.location.CannonVector; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; + +public class BukkitCannonDesign extends CannonDesign< + BlockData, + BlockFace, + Material, + BukkitItemHolder, + BukkitSoundHolder, + BukkitBlock, + BukkitCannonBlocks + > { + + /** + * returns the rotation center of a cannon design + */ + public Location getRotationCenter(CannonBukkit cannon) + { + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + if (cannonBlocks != null) + { + CannonVector vector = cannonBlocks.getRotationCenter().clone().add(cannon.getOffset()); + return VectorUtils.toLoc(cannon.getWorldBukkit(), vector); + } + + CannonLogger.getLogger().info("missing rotation center for cannon design " + cannon.getCannonName()); + return VectorUtils.toLoc(cannon.getWorldBukkit(), cannon.getOffset()); + } + + + /** + * returns the muzzle location + */ + public Location getMuzzle(CannonBukkit cannon) + { + BukkitCannonBlocks cannonBlocks = cannonBlockMap.get(cannon.getCannonDirection()); + if (cannonBlocks != null) + { + CannonVector vector = cannonBlocks.getMuzzle().clone().add(cannon.getOffset()); + return VectorUtils.toLoc(cannon.getWorldBukkit(), vector); + } + + CannonLogger.getLogger().info("missing muzzle location for cannon design " + cannon.getCannonName()); + return VectorUtils.toLoc(cannon.getWorldBukkit(), cannon.getOffset()); + } + + /** + * is this Item a cooling tool to cool down a cannon + * @param item - item to check + * @return - true if this item is in the list of cooling items + */ + public boolean isCoolingTool(ItemStack item) + { + //todo rework tool properties + for (BukkitItemHolder mat : itemCooling) + { + if (mat.equalsFuzzy(item)) + return true; + } + return false; + } + + /** + * returns the used used item. E.g. a water bucket will be an empty bucket. + * @param item - the item used for the event + * @return the new item which replaces the old one + */ + public ItemStack getCoolingToolUsed(ItemStack item) + { + for (int i=0; i < itemCooling.size(); i++) + { + //todo rework tool properties + if (itemCooling.get(i).equalsFuzzy(item)) + { + return itemCoolingUsed.get(i).toItemStack(item.getAmount()); + } + } + return null; + } +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index dc8c245e..e1e8a588 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -1,6 +1,6 @@ package at.pavlov.cannons; -import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; @@ -164,7 +164,7 @@ private MessageEnum updateAngle(Player player, Cannon cannon, BlockFace clickedF if (cannon == null) return null; - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); boolean isSentry = design.isSentry(); //both horizontal and vertical angle will be displayed in one message @@ -211,7 +211,7 @@ private MessageEnum checkPermissions(Player player, Cannon cannon) { return null; UUID owner = cannon.getOwner(); - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); //if the player is not the owner of this gun if (owner != null && !owner.equals(player.getUniqueId()) && design.isAccessForOwnerOnly()) return MessageEnum.ErrorNotTheOwner; @@ -223,7 +223,7 @@ private MessageEnum checkPermissions(Player player, Cannon cannon) { } private MessageEnum adjustAngles(GunAnglesWrapper wrapper, Cannon cannon) { - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); boolean largeChange = false; MessageEnum message = null; @@ -321,7 +321,7 @@ private GunAnglesWrapper determineGunAngles(Player player, Cannon cannon, BlockF playerLoc = player.getLocation(); } - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); if (action == InteractAction.ADJUST_SENTRY && isSentry) { if (cannon.isChunkLoaded()) @@ -431,7 +431,7 @@ public boolean distanceCheck(Player player, Cannon cannon) { return false; //check if player is far away from the cannon - CannonDesign design = DesignStorage.getInstance().getDesign(cannon); + BukkitCannonDesign design = DesignStorage.getInstance().getDesign(cannon); //go to trigger location Location locCannon = design.getFiringTrigger(cannon); //if there is no trigger - set the muzzle a location @@ -602,7 +602,7 @@ private boolean isOldTargetValid(Cannon cannon, HashMap targ return false; } - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); BukkitTarget target = targets.get(cannon.getSentryEntity()); if (System.currentTimeMillis() > cannon.getSentryTargetingTime() + design.getSentrySwapTime() || !targets.containsKey(cannon.getSentryEntity())) { @@ -635,7 +635,7 @@ private boolean isOldTargetValid(Cannon cannon, HashMap targ private void calculateFiringSolution(Cannon cannon) { - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); if (!cannon.isChunkLoaded() || System.currentTimeMillis() <= (cannon.getLastSentryUpdate() + design.getSentryUpdateTime())) { return; @@ -1297,7 +1297,7 @@ public void updateImpactPredictor() { continue; } - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); if (last.getValue() + design.getPredictorDelay() >= System.currentTimeMillis()) { continue; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index 7e975a6f..7ba54a27 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -1,6 +1,6 @@ package at.pavlov.cannons; -import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.cannon.Cannon; @@ -65,7 +65,7 @@ public FireCannon(Cannons plugin) { * @return message for the player */ private MessageEnum getPrepareFireMessage(Cannon cannon, Player player) { - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); if (design == null) return null; //if the player is not the owner of this gun if (player != null && cannon.getOwner() != null && !cannon.getOwner().equals(player.getUniqueId()) && design.isAccessForOwnerOnly()) @@ -125,7 +125,7 @@ private MessageEnum getPrepareFireMessage(Cannon cannon, Player player) { * @return - message for the player */ public MessageEnum redstoneFiring(Cannon cannon, InteractAction action) { - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); return this.fire(cannon, null, cannon.getCannonDesign().isAutoreloadRedstone(), !design.isAmmoInfiniteForRedstone(), action); } @@ -139,7 +139,7 @@ public MessageEnum redstoneFiring(Cannon cannon, InteractAction action) { * @return - message for the player */ public MessageEnum playerFiring(Cannon cannon, Player player, InteractAction action) { - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); boolean autoreload = player.isSneaking() && player.hasPermission(design.getPermissionAutoreload()); //todo add firing of multiple cannons @@ -182,7 +182,7 @@ public MessageEnum playerFiring(Cannon cannon, Player player, InteractAction act * @return - message for the player */ public MessageEnum sentryFiring(Cannon cannon) { - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); return this.fire(cannon, null, true, !design.isAmmoInfiniteForPlayer(), InteractAction.FIRE_SENTRY); } @@ -210,7 +210,7 @@ public MessageEnum fire(Cannon cannon, UUID playerUid, boolean autoload, boolean if (useEvent.isCancelled()) return null; - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); //if there is no gunpowder needed we set it to the maximum if (!design.isGunpowderNeeded() && cannon.getLoadedGunpowder() == 0) @@ -324,7 +324,7 @@ public void run(Object object) { * @param projectileCause - how the projectile was fired (by a player, redstone, or sentry) */ private void fireTask(Cannon cannon, UUID shooter, boolean removeCharge, ProjectileCause projectileCause) { - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); BukkitProjectile projectile = cannon.getLoadedProjectile(); //the player might be null if not online diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index 29dd0177..8c061a3d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.cannon; import at.pavlov.bukkit.cannons.CannonBukkit; -import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.bukkit.cannons.CannonDesignHolder; import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; @@ -83,13 +83,13 @@ public class Cannon implements CannonBukkit, CannonDesignHolder, Rotational { @Getter private boolean updated; - private CannonDesign design; + private BukkitCannonDesign design; private final Random random = new Random(); //TODO make a vector util class and add this there private final static CannonVector noVelocity = new CannonVector(0,0,0); - public Cannon(CannonDesign design, UUID world, CannonVector cannonOffset, BlockFace cannonDirection, UUID owner) { + public Cannon(BukkitCannonDesign design, UUID world, CannonVector cannonOffset, BlockFace cannonDirection, UUID owner) { this.design = design; this.cannonPosition = new CannonPosition(cannonDirection, cannonOffset, world, false, noVelocity.clone()); @@ -1305,7 +1305,7 @@ public int getNumberCannonSigns() { * @param cannonDesign * @return result */ - public boolean equals(CannonDesign cannonDesign) { + public boolean equals(BukkitCannonDesign cannonDesign) { return this.sameDesign(cannonDesign); } @@ -1380,12 +1380,12 @@ public double getMinVerticalAngle() { return (isOnShip()) ? design.getMinVerticalAngleOnShip() : design.getMinVerticalAngle(); } - public void setCannonDesign(CannonDesign design) { + public void setCannonDesign(BukkitCannonDesign design) { this.design = design; this.hasUpdated(); } - public CannonDesign getCannonDesign() { + public BukkitCannonDesign getCannonDesign() { return this.design; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 1efdfd9b..e6f99fec 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.cannon; -import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.container.BukkitItemHolder; import at.pavlov.bukkit.factory.VectorUtils; @@ -264,7 +264,7 @@ private String newCannonName(Cannon cannon) { return "missing Owner"; String name; - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); if (design != null) name = design.getDesignName(); else @@ -651,7 +651,7 @@ private Cannon checkCannon(Location cannonBlock, UUID owner) { designList = designList.stream().filter(it -> it.isAllowedMaterial(block.getType())).toList(); // check all cannon design if this block is part of the design - for (CannonDesign cannonDesign : designList) { + for (BukkitCannonDesign cannonDesign : designList) { // check of all directions for (BlockFace cannonDirection : blockFaces) { // for all blocks for the design @@ -811,7 +811,7 @@ public int getNewBuildLimit(Player player) { * checks if the player can build a cannon, checks permission and builtLimit */ private MessageEnum canBuildCannon(Cannon cannon, UUID owner) { - CannonDesign design = cannon.getCannonDesign(); + BukkitCannonDesign design = cannon.getCannonDesign(); //get the player from the server if (owner == null) return null; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index d354d6f7..12425a0f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.cannon; -import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; import at.pavlov.bukkit.container.BukkitItemHolder; @@ -44,7 +44,7 @@ public class DesignStorage @Getter private static DesignStorage instance = null; - private final List cannonDesignList; + private final List cannonDesignList; private final Cannons plugin; private final List cannonBlockMaterials; @@ -68,7 +68,7 @@ private DesignStorage(Cannons cannons) { */ public ArrayList getDesignIds(){ ArrayList list = new ArrayList<>(); - for (CannonDesign design : cannonDesignList){ + for (BukkitCannonDesign design : cannonDesignList){ list.add(design.getDesignID()); } return list; @@ -100,7 +100,7 @@ public void loadCannonDesigns() for (DesignFileName designFile : designFileList) { plugin.logDebug("loading cannon " + designFile.getYmlString()); - CannonDesign cannonDesign = new CannonDesign(); + BukkitCannonDesign cannonDesign = new BukkitCannonDesign(); //load .yml loadDesignYml(cannonDesign, designFile.getYmlString()); //load .shematic and add to list if valid @@ -110,10 +110,10 @@ public void loadCannonDesigns() //sort the list so the designs with more cannon blocks comes first //important if there is a design with one block less but else identically - Comparator comparator = new DesignComparator(); + Comparator comparator = new DesignComparator(); cannonDesignList.sort(comparator); - for (CannonDesign cannonDesign : getCannonDesignList()) { + for (BukkitCannonDesign cannonDesign : getCannonDesignList()) { for (BukkitBlock sBlock : cannonDesign.getAllCannonBlocks(BlockFace.NORTH)){ Material material = sBlock.getBlockData().getMaterial(); if (material != Material.AIR && !cannonBlockMaterials.contains(material)) { @@ -123,7 +123,7 @@ public void loadCannonDesigns() } - for (CannonDesign design : cannonDesignList) + for (BukkitCannonDesign design : cannonDesignList) { plugin.logDebug("design " + design.toString()); } @@ -135,7 +135,7 @@ public void loadCannonDesigns() * @param cannonDesign design of the cannon * @param ymlFile of the cannon config file */ - private void loadDesignYml(CannonDesign cannonDesign, String ymlFile) + private void loadDesignYml(BukkitCannonDesign cannonDesign, String ymlFile) { // load .yml file File cannonDesignFile = new File(getPath() + ymlFile); @@ -345,7 +345,7 @@ private Clipboard loadSchematic(String schematicFile) { * @param cannonDesign design of the cannon * @param schematicFile path of the schematic file */ - private boolean loadDesignSchematic(CannonDesign cannonDesign, String schematicFile) { + private boolean loadDesignSchematic(BukkitCannonDesign cannonDesign, String schematicFile) { long startTime = System.nanoTime(); // load schematic with worldedit @@ -618,7 +618,7 @@ private String getPath() return "plugins/Cannons/designs/"; } - public List getCannonDesignList() + public List getCannonDesignList() { return cannonDesignList; } @@ -628,7 +628,7 @@ public List getCannonDesignList() * @param cannon the cannon * @return design of cannon */ - public CannonDesign getDesign(Cannon cannon) + public BukkitCannonDesign getDesign(Cannon cannon) { return getDesign(cannon.getDesignID()); } @@ -638,9 +638,9 @@ public CannonDesign getDesign(Cannon cannon) * @param designId Name of the design * @return cannon design */ - public CannonDesign getDesign(String designId) + public BukkitCannonDesign getDesign(String designId) { - for (CannonDesign cannonDesign : cannonDesignList) + for (BukkitCannonDesign cannonDesign : cannonDesignList) { if (cannonDesign.getDesignID().equals(designId)) return cannonDesign; @@ -654,7 +654,7 @@ public CannonDesign getDesign(String designId) * @return true if there is a cannon design with this name */ public boolean hasDesign(String name){ - for (CannonDesign design : cannonDesignList){ + for (BukkitCannonDesign design : cannonDesignList){ if (design.getDesignID().equalsIgnoreCase(name)) { return true; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java index 9cba1467..d8409747 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.commands; -import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Aiming; @@ -179,7 +179,7 @@ public static void onCreate(Player player, String arg) { } sendMessage(player, ChatColor.GREEN + tag + "Create design: " + ChatColor.GOLD + arg); - CannonDesign cannonDesign = designStorage.getDesign(arg); + BukkitCannonDesign cannonDesign = designStorage.getDesign(arg); CannonVector vector = VectorUtils.fromBaseVector(player.getLocation().toVector()); Cannon cannon = new Cannon(cannonDesign, player.getWorld().getUID(), vector, BlockFace.NORTH, player.getUniqueId()); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java index ea079d7d..6c00a5b5 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.dao; -import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.DesignStorage; @@ -37,7 +37,7 @@ public void run() { while (rs.next()) { UUID cannon_id = UUID.fromString(rs.getString("id")); //check if cannon design exists - CannonDesign design = DesignStorage.getInstance().getDesign(rs.getString("design_id")); + BukkitCannonDesign design = DesignStorage.getInstance().getDesign(rs.getString("design_id")); if (design == null) { Cannons.getPlugin().logDebug("Design " + rs.getString("design_id") + " not found in plugin/designs"); invalid.add(cannon_id); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java index 51081ac4..ac655cec 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.listener; -import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; @@ -317,7 +317,7 @@ private boolean isRamrod(Cannon cannon, ItemStack eventitem, Block clickedBlock, MessageEnum message = cannon.useRamRod(player); userMessages.sendMessage(message, player, cannon); - final CannonDesign design = cannon.getCannonDesign(); + final BukkitCannonDesign design = cannon.getCannonDesign(); if (design.isLinkCannonsEnabled() ) { int d = design.getLinkCannonsDistance() * 2; for (Cannon fcannon : CannonManager.getCannonsInBox(cannon.getLocation(), d, d, d)) { @@ -399,7 +399,7 @@ else if (cannon != null){ } private void handleBurningTouch(Cannon cannon, Player player, BlockFace clickedFace, Block clickedBlock) { - final CannonDesign design = cannon.getCannonDesign(); + final BukkitCannonDesign design = cannon.getCannonDesign(); if (!(cannon.getTemperature() > design.getWarningTemperature())) { return; } @@ -437,7 +437,7 @@ private boolean isHandleCooling(Cannon cannon, ItemStack eventitem, Block clicke private boolean isMeasureTemperature(Cannon cannon, ItemStack eventitem, PlayerInteractEvent event) { final Player player = event.getPlayer(); - final CannonDesign design = cannon.getCannonDesign(); + final BukkitCannonDesign design = cannon.getCannonDesign(); if (!config.getToolThermometer().equalsFuzzy(eventitem)) { return false; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java index d4328d56..c562e31d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/DesignComparator.java @@ -1,17 +1,17 @@ package at.pavlov.cannons.utils; -import at.pavlov.bukkit.cannons.CannonDesign; +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.cannons.Cannons; import org.bukkit.block.BlockFace; import java.util.Comparator; import java.util.logging.Level; -public class DesignComparator implements Comparator +public class DesignComparator implements Comparator { @Override - public int compare(CannonDesign design1, CannonDesign design2) + public int compare(BukkitCannonDesign design1, BukkitCannonDesign design2) { int amount1 = getCannonBlockAmount(design1); int amount2 = getCannonBlockAmount(design2); @@ -19,7 +19,7 @@ public int compare(CannonDesign design1, CannonDesign design2) return amount2 - amount1; } - private Integer getCannonBlockAmount(CannonDesign design) + private Integer getCannonBlockAmount(BukkitCannonDesign design) { if (design == null) return 0; //if the design is invalid something goes wrong, message the user From 20c59954887caa8a8203450d9b402d540ce26761 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 16 Dec 2024 21:36:50 +0100 Subject: [PATCH 74/97] Add Bukkit specific implementation --- .../cannons/CannonDataHolderBukkit.java | 3 ++- .../cannons/holders/CannonDesignHBukkit.java | 7 ++++++ .../cannons/holders/CannonDesignHolder.java | 24 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonDesignHBukkit.java create mode 100644 api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonDesignHolder.java diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java index 937f4bb9..6905bf8d 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java @@ -1,5 +1,6 @@ package at.pavlov.bukkit.cannons; +import at.pavlov.bukkit.cannons.holders.CannonDesignHBukkit; import at.pavlov.bukkit.cannons.holders.CannonPositionHBukkit; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.cannons.holders.AimingDataHolder; @@ -24,5 +25,5 @@ public interface CannonDataHolderBukkit extends ObserverMapHolder, SentryDataHolder, WhitelistDataHolder, - CannonDesignHolder + CannonDesignHBukkit {} diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonDesignHBukkit.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonDesignHBukkit.java new file mode 100644 index 00000000..ad63488b --- /dev/null +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/holders/CannonDesignHBukkit.java @@ -0,0 +1,7 @@ +package at.pavlov.bukkit.cannons.holders; + +import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; +import at.pavlov.internal.cannons.holders.CannonDesignHolder; + +public interface CannonDesignHBukkit extends CannonDesignHolder { +} diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonDesignHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonDesignHolder.java new file mode 100644 index 00000000..18492d52 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/holders/CannonDesignHolder.java @@ -0,0 +1,24 @@ +package at.pavlov.internal.cannons.holders; + +import at.pavlov.internal.cannons.data.CannonDesign; +import at.pavlov.internal.cannons.functionalities.Updatable; + +public interface CannonDesignHolder> extends Updatable { + void setCannonDesign(T design); + T getCannonDesign(); + + default > boolean sameDesign(D cannon) { + return sameDesign(cannon.getCannonDesign()); + } + + default > boolean sameDesign(D cannonDesign) { + return getCannonDesign().equals(cannonDesign); + } + + default String getDesignID() { + return getCannonDesign().getDesignID(); + } + + void setDesignID(String designID); + +} From 3ea24c4144e5f3b0d63283136ed23cad96261123 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 17 Dec 2024 20:27:37 +0100 Subject: [PATCH 75/97] Add null checks --- .../at/pavlov/bukkit/factory/CoordinateUtil.java | 8 ++++++++ .../at/pavlov/bukkit/factory/VectorUtils.java | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/factory/CoordinateUtil.java b/api-bukkit/src/main/java/at/pavlov/bukkit/factory/CoordinateUtil.java index 6141ffd5..c0795215 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/factory/CoordinateUtil.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/factory/CoordinateUtil.java @@ -8,12 +8,20 @@ public class CoordinateUtil { public static Location toLoc(Coordinate coordinate) { + if (coordinate == null) { + return null; + } + CannonVector vector = coordinate.getVector(); World world = Bukkit.getWorld(coordinate.getWorld()); return new Location(world, vector.getX(), vector.getY(), vector.getZ()); } public static Coordinate fromLoc(Location location) { + if (location == null) { + return null; + } + return new Coordinate(location.getWorld().getUID(), location.getX(), location.getY(), location.getZ()); } } diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java b/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java index 2568b65f..5d0dc188 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/factory/VectorUtils.java @@ -7,18 +7,34 @@ public class VectorUtils { public static Location toLoc(World world, CannonVector vector) { + if ( vector == null) { + return null; + } + return new Location(world, vector.getX(), vector.getY(), vector.getZ()); } public static CannonVector fromLoc(Location location) { + if (location == null) { + return null; + } + return new CannonVector(location.getX(), location.getY(), location.getZ()); } public static Vector toBaseVector(CannonVector vector) { + if (vector == null) { + return null; + } + return new Vector(vector.getX(), vector.getY(), vector.getZ()); } public static CannonVector fromBaseVector(Vector vector) { + if (vector == null) { + return null; + } + return new CannonVector(vector.getX(), vector.getY(), vector.getZ()); } } From 771decc28733365e811a35d15022243d2e9b7293 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 17 Dec 2024 20:33:44 +0100 Subject: [PATCH 76/97] Fix errors --- .../cannons/data/BukkitCannonDesign.java | 9 ++ .../internal/cannons/data/CannonDesign.java | 13 +-- .../main/java/at/pavlov/cannons/Aiming.java | 2 +- .../java/at/pavlov/cannons/FireCannon.java | 8 +- .../java/at/pavlov/cannons/cannon/Cannon.java | 95 ++++++++++++------- .../pavlov/cannons/cannon/CannonManager.java | 9 +- 6 files changed, 86 insertions(+), 50 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java index b271c982..a855c75e 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java @@ -91,4 +91,13 @@ public ItemStack getCoolingToolUsed(ItemStack item) } return null; } + + @Override + public void putCannonBlockMap(BlockFace cannonDirection, BukkitCannonBlocks blocks) { + for (var block : blocks.getAllCannonBlocks()) { + allowedMaterials.add(block.getBlockData().getMaterial()); + } + + cannonBlockMap.put(cannonDirection, blocks); + } } diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java index 66cb0de9..70017bf9 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java @@ -17,7 +17,7 @@ import java.util.HashSet; import java.util.List; -@Data public class CannonDesign < +@Data public abstract class CannonDesign < Block, Facing, Material, @@ -484,15 +484,6 @@ public int getMaxLoadableGunpowderOverloaded() return getMaxLoadableGunpowderNormal(); } - /* TODO: Link block data and material ? - public void putCannonBlockMap(Facing cannonDirection, CB blocks) { - for (var block : blocks.getAllCannonBlocks()) { - allowedMaterials.add(block.getBlockData().getMaterial()); - } - - cannonBlockMap.put(cannonDirection, blocks); - }*/ - public boolean isAllowedMaterial(Material m) { return allowedMaterials.contains(m); } @@ -533,4 +524,6 @@ public ItemStack getCoolingToolUsed(ItemStack item) } return null; }*/ + + public abstract void putCannonBlockMap(Facing cannonDirection, CB blocks); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index e1e8a588..069b304c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -433,7 +433,7 @@ public boolean distanceCheck(Player player, Cannon cannon) { //check if player is far away from the cannon BukkitCannonDesign design = DesignStorage.getInstance().getDesign(cannon); //go to trigger location - Location locCannon = design.getFiringTrigger(cannon); + Location locCannon = CoordinateUtil.toLoc(design.getFiringTrigger(cannon)); //if there is no trigger - set the muzzle a location if (locCannon == null) locCannon = cannon.getMuzzle(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index 7ba54a27..ac016fbe 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -1,6 +1,7 @@ package at.pavlov.cannons; import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; +import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.cannon.Cannon; @@ -259,7 +260,12 @@ public MessageEnum fire(Cannon cannon, UUID playerUid, boolean autoload, boolean cannon.setLastPlayerSpreadMultiplier(player); //Set up smoke effects on the torch - for (Location torchLoc : design.getFiringIndicator(cannon)) { + List locations = design.getFiringIndicator(cannon) + .stream() + .map(CoordinateUtil::toLoc) + .toList(); + + for (Location torchLoc : locations) { torchLoc.setX(torchLoc.getX() + 0.5); torchLoc.setY(torchLoc.getY() + 1); torchLoc.setZ(torchLoc.getZ() + 0.5); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index 8c061a3d..90f150af 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -2,7 +2,6 @@ import at.pavlov.bukkit.cannons.CannonBukkit; import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; -import at.pavlov.bukkit.cannons.CannonDesignHolder; import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; import at.pavlov.bukkit.container.BukkitItemHolder; @@ -58,7 +57,7 @@ import java.util.Random; import java.util.UUID; -public class Cannon implements CannonBukkit, CannonDesignHolder, Rotational { +public class Cannon implements CannonBukkit, Rotational { private CannonMainData mainData; private CannonPosition cannonPosition; @@ -133,7 +132,7 @@ public Cannon(BukkitCannonDesign design, UUID world, CannonVector cannonOffset, * @return location of the cannon */ public Location getLocation() { - return design.getAllCannonBlocks(this).get(0); + return CoordinateUtil.toLoc(design.getAllCannonBlocks(this).get(0)); } /** @@ -150,12 +149,13 @@ public Location getMuzzle() { * * @return location of the barrel block */ + @Deprecated public Location getRandomBarrelBlock() { - List barrel = design.getBarrelBlocks(this); + List barrel = design.getBarrelBlocks(this); if (!barrel.isEmpty()) - return barrel.get(random.nextInt(barrel.size())); - List all = design.getAllCannonBlocks(this); - return all.get(random.nextInt(all.size())); + return CoordinateUtil.toLoc(barrel.get(random.nextInt(barrel.size()))); + List all = design.getAllCannonBlocks(this); + return CoordinateUtil.toLoc(all.get(random.nextInt(all.size()))); } @@ -303,7 +303,12 @@ public boolean automaticCooling() { public List getInventoryList() { //get the inventories of all attached chests List invlist = new ArrayList<>(); - for (Location loc : getCannonDesign().getChestsAndSigns(this)) { + List locations = design.getChestsAndSigns(this) + .stream() + .map(CoordinateUtil::toLoc) + .toList(); + + for (Location loc : locations) { // check if block is a chest invlist = InventoryManagement.getInventories(loc.getBlock(), invlist); } @@ -758,10 +763,11 @@ public void hide() { * breaks all cannon blocks of the cannon */ private void breakAllCannonBlocks() { - List locList = design.getAllCannonBlocks(this); - for (Location loc : locList) { - loc.getBlock().breakNaturally(); - } + design.getAllCannonBlocks(this) + .stream() + .map(CoordinateUtil::toLoc) + .map(Location::getBlock) + .forEach(Block::breakNaturally); } @@ -791,8 +797,9 @@ public boolean isCannonBlock(Block block) { * @return - true if the block can be destroyed */ public boolean isDestructibleBlock(Location block) { - for (Location loc : design.getDestructibleBlocks(this)) { - if (loc.equals(block)) { + Coordinate blockCoord = CoordinateUtil.fromLoc(block); + for (Coordinate loc : design.getDestructibleBlocks(this)) { + if (loc.equals(blockCoord)) { return true; } } @@ -807,8 +814,9 @@ public boolean isDestructibleBlock(Location block) { * @return true if this block is a part of the loading interface */ public boolean isLoadingBlock(Location block) { - for (Location loc : design.getLoadingInterface(this)) { - if (loc.equals(block)) { + Coordinate blockCoord = CoordinateUtil.fromLoc(block); + for (Coordinate loc : design.getLoadingInterface(this)) { + if (loc.equals(blockCoord)) { return true; } } @@ -823,8 +831,9 @@ public boolean isLoadingBlock(Location block) { * @return true if this location where the torch interacts with the cannon */ public boolean isChestInterface(Location block) { - for (Location loc : design.getChestsAndSigns(this)) { - if (loc.equals(block)) { + Coordinate blockCoord = CoordinateUtil.fromLoc(block); + for (Coordinate loc : design.getChestsAndSigns(this)) { + if (loc.equals(blockCoord)) { return true; } } @@ -867,8 +876,9 @@ public boolean isCannonSign(Location loc) { * @return true if this is a right click trigger block */ public boolean isRightClickTrigger(Location block) { - for (Location loc : design.getRightClickTrigger(this)) { - if (loc.equals(block)) { + Coordinate coordBlock = CoordinateUtil.fromLoc(block); + for (Coordinate loc : design.getRightClickTrigger(this)) { + if (loc.equals(coordBlock)) { return true; } } @@ -880,8 +890,9 @@ public boolean isRightClickTrigger(Location block) { * @return true if this is a redstone trigger block */ public boolean isRestoneTrigger(Location block) { - for (Location loc : design.getRedstoneTrigger(this)) { - if (loc.equals(block)) { + Coordinate blockCoord = CoordinateUtil.fromLoc(block); + for (Coordinate loc : design.getRedstoneTrigger(this)) { + if (loc.equals(blockCoord)) { return true; } } @@ -893,8 +904,9 @@ public boolean isRestoneTrigger(Location block) { * @return true if this location where the torch interacts with the cannon */ public boolean isRedstoneTorchInterface(Location block) { - for (Location loc : design.getRedstoneTorches(this)) { - if (loc.equals(block)) { + Coordinate blockCoord = CoordinateUtil.fromLoc(block); + for (Coordinate loc : design.getRedstoneTorches(this)) { + if (loc.equals(blockCoord)) { return true; } } @@ -906,8 +918,9 @@ public boolean isRedstoneTorchInterface(Location block) { * @return true if this location where a redstone torch interacts with the cannon */ public boolean isRedstoneWireInterface(Location block) { - for (Location loc : design.getRedstoneWireAndRepeater(this)) { - if (loc.equals(block)) { + Coordinate blockCoord = CoordinateUtil.fromLoc(block); + for (Coordinate loc : design.getRedstoneWireAndRepeater(this)) { + if (loc.equals(blockCoord)) { return true; } } @@ -944,7 +957,8 @@ public boolean isRedstoneRepeaterInterface(Location loc) { * @return true if sentry is in automatic mode */ public boolean isSentryAutomatic() { - for (Location loc : design.getBarrelBlocks(this)) { + for (Coordinate coord : design.getBarrelBlocks(this)) { + var loc = CoordinateUtil.toLoc(coord); if (loc.getBlock().isBlockIndirectlyPowered()) return false; } @@ -987,7 +1001,8 @@ MessageEnum checkRedstonePermission(Player player) { if (player.hasPermission(design.getPermissionRedstone())) return MessageEnum.CannonCreated; // torch - for (Location loc : design.getRedstoneTorches(this)) { + for (Coordinate coord : design.getRedstoneTorches(this)) { + var loc = CoordinateUtil.toLoc(coord); Material b = loc.getBlock().getType(); if (b == Material.REDSTONE_TORCH) { removeRedstone(); @@ -996,7 +1011,8 @@ MessageEnum checkRedstonePermission(Player player) { } // wire - for (Location loc : design.getRedstoneWireAndRepeater(this)) { + for (Coordinate coord : design.getRedstoneWireAndRepeater(this)) { + var loc = CoordinateUtil.toLoc(coord); Material b = loc.getBlock().getType(); if (b == Material.REDSTONE_WIRE || b == Material.REPEATER || b == Material.COMPARATOR) { removeRedstone(); @@ -1013,7 +1029,8 @@ MessageEnum checkRedstonePermission(Player player) { */ private void removeRedstone() { // torches - for (Location loc : design.getRedstoneTorches(this)) { + for (Coordinate coord : design.getRedstoneTorches(this)) { + var loc = CoordinateUtil.toLoc(coord); Block block = loc.getBlock(); if (block.getType() == Material.REDSTONE_TORCH) { block.breakNaturally(); @@ -1021,7 +1038,8 @@ private void removeRedstone() { } // wires and repeater - for (Location loc : design.getRedstoneWireAndRepeater(this)) { + for (Coordinate coord : design.getRedstoneWireAndRepeater(this)) { + var loc = CoordinateUtil.toLoc(coord); Block block = loc.getBlock(); if (block.getType() == Material.REDSTONE_WIRE || block.getType() == Material.REPEATER || block.getType() == Material.COMPARATOR) { block.breakNaturally(); @@ -1103,7 +1121,10 @@ void playBarrelSmokeEffect(int amount) { if (amount <= 0) return; - List barrelList = design.getBarrelBlocks(this); + List barrelList = design.getBarrelBlocks(this) + .stream() + .map(CoordinateUtil::toLoc) + .toList(); //if the barrel list is 0 something is completely odd int max = barrelList.size(); @@ -1279,8 +1300,9 @@ public double getCannonballVelocity() { */ public boolean hasCannonSign() { // search all possible sign locations - for (Location signLoc : design.getChestsAndSigns(this)) { - if (signLoc.getBlock().getBlockData() instanceof WallSign) + for (Coordinate signLoc : design.getChestsAndSigns(this)) { + var loc = CoordinateUtil.toLoc(signLoc); + if (loc.getBlock().getBlockData() instanceof WallSign) return true; } return false; @@ -1292,8 +1314,9 @@ public boolean hasCannonSign() { public int getNumberCannonSigns() { // search all possible sign locations int i = 0; - for (Location signLoc : design.getChestsAndSigns(this)) { - if (signLoc.getBlock().getBlockData() instanceof WallSign) + for (Coordinate signLoc : design.getChestsAndSigns(this)) { + var loc = CoordinateUtil.toLoc(signLoc); + if (loc.getBlock().getBlockData() instanceof WallSign) i++; } return i; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index e6f99fec..3255628e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -3,6 +3,7 @@ import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; import at.pavlov.bukkit.container.BukkitBlock; import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; @@ -365,7 +366,9 @@ public static HashSet getCannonsInSphere(Location center, double sphereR continue; } - Location newLoc = cannon.getCannonDesign().getBarrelBlocks(cannon).get(0); + Location newLoc = CoordinateUtil.toLoc( + cannon.getCannonDesign().getBarrelBlocks(cannon).get(0) + ); if (newLoc.distanceSquared(center) < sphereRadius * sphereRadius) newCannonList.add(cannon); } @@ -390,7 +393,9 @@ public static HashSet getCannonsInBox(Location center, double lengthX, d continue; } - Location newLoc = cannon.getCannonDesign().getBarrelBlocks(cannon).get(0); + Location newLoc = CoordinateUtil.toLoc( + cannon.getCannonDesign().getBarrelBlocks(cannon).get(0) + ); Vector box = newLoc.subtract(center).toVector(); if (Math.abs(box.getX()) < lengthX / 2 && Math.abs(box.getY()) < lengthY / 2 && Math.abs(box.getZ()) < lengthZ / 2) newCannonList.add(cannon); From 8cf23e6c40e81732627199aa801ec83ebbd1db74 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 17 Dec 2024 21:26:39 +0100 Subject: [PATCH 77/97] Use CannonDataHolder --- .../bukkit/cannons/CannonDataHolderBukkit.java | 12 +++--------- .../cannons/functionalities/CannonDataHolder.java | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java index 6905bf8d..6a921469 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java @@ -3,6 +3,7 @@ import at.pavlov.bukkit.cannons.holders.CannonDesignHBukkit; import at.pavlov.bukkit.cannons.holders.CannonPositionHBukkit; import at.pavlov.bukkit.projectile.BukkitProjectile; +import at.pavlov.internal.cannons.functionalities.CannonDataHolder; import at.pavlov.internal.cannons.holders.AimingDataHolder; import at.pavlov.internal.cannons.holders.AmmoLoadingDataHolder; import at.pavlov.internal.cannons.holders.AngleDataHolder; @@ -12,18 +13,11 @@ import at.pavlov.internal.cannons.holders.ObserverMapHolder; import at.pavlov.internal.cannons.holders.SentryDataHolder; import at.pavlov.internal.cannons.holders.WhitelistDataHolder; +import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; public interface CannonDataHolderBukkit extends - AimingDataHolder, - AmmoLoadingDataHolder, - AngleDataHolder, - CannonMainDataHolder, + CannonDataHolder, CannonPositionHBukkit, - FiringDataHolder, - LinkingDataHolder, - ObserverMapHolder, - SentryDataHolder, - WhitelistDataHolder, CannonDesignHBukkit {} diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java index ff58cd35..7ffea210 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/functionalities/CannonDataHolder.java @@ -16,7 +16,7 @@ public interface CannonDataHolder extends AimingDataHolder, SentryDataHolder, CannonPositionHolder, - AmmoLoadingDataHolder, + AmmoLoadingDataHolder, WhitelistDataHolder, CannonMainDataHolder, LinkingDataHolder, From 6ad9844678986c4ccbe2f4644c261c54eeb5f8a0 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Wed, 18 Dec 2024 16:30:28 +0100 Subject: [PATCH 78/97] Data class GunAngles --- .../java/at/pavlov/cannons/aim/GunAngles.java | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/aim/GunAngles.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/aim/GunAngles.java index 16817b40..44a72104 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/aim/GunAngles.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/aim/GunAngles.java @@ -2,7 +2,9 @@ import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.utils.CannonsUtil; +import lombok.Data; +@Data public class GunAngles { private double horizontal; private double vertical; @@ -12,26 +14,10 @@ public GunAngles(double horizontal, double vertical) { this.setVertical(vertical); } - public double getHorizontal() { - return horizontal; - } - public double getAbsHorizontal() { return Math.abs(horizontal); } - public void setHorizontal(double horizontal) { - this.horizontal = horizontal; - } - - public double getVertical() { - return vertical; - } - public double getAbsVertical() { return Math.abs(vertical); } - public void setVertical(double vertical) { - this.vertical = vertical; - } - /** * evaluates the difference between actual cannon direction and the given direction * From 38c6ac9df6c56bfd6bbfa2a922a354131db04984 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Thu, 19 Dec 2024 18:48:06 +0100 Subject: [PATCH 79/97] Remove commented code --- .../java/at/pavlov/internal/container/Target.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/api-internal/src/main/java/at/pavlov/internal/container/Target.java b/api-internal/src/main/java/at/pavlov/internal/container/Target.java index 8d4e59fa..b7e9c5c6 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/Target.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/Target.java @@ -24,21 +24,6 @@ public abstract class Target { protected final Coordinate centerLocation; protected final CannonVector velocity; - /* - public Target(Entity entity) { - this( - entity.getName(), - entityTrasformer(entity), - entity.getType(), - entity.getUniqueId(), - entity.getLocation().clone(), - entity instanceof LivingEntity livingEntity ? - livingEntity.getEyeLocation().clone().add(0.0, -0.5, 0.0) : - entity.getLocation().clone().add(0.0, 0.5, 0.0), - entity.getVelocity() - ); - }*/ - public > Target(T cannon) { this( cannon.getCannonName(), From 3c88252bccdc56fcb690f9d0fe3aed4c6d76b727 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Thu, 19 Dec 2024 18:49:46 +0100 Subject: [PATCH 80/97] Relocate abstract holders --- .../at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java | 6 +++--- .../at/pavlov/bukkit/container/BukkitCannonBlocks.java | 1 + .../bukkit/container/{ => holders}/BukkitBlock.java | 6 +++--- .../container/{ => holders}/BukkitEntityHolder.java | 4 ++-- .../bukkit/container/{ => holders}/BukkitItemHolder.java | 4 ++-- .../bukkit/container/{ => holders}/BukkitSoundHolder.java | 4 ++-- .../{ => holders}/BukkitSpawnMaterialHolder.java | 4 ++-- .../at/pavlov/bukkit/projectile/BukkitProjectile.java | 8 ++++---- .../at/pavlov/internal/cannons/data/CannonDesign.java | 8 ++++---- .../java/at/pavlov/internal/container/CannonBlocks.java | 3 ++- .../{SimpleBlock.java => holders/BlockHolder.java} | 6 +++--- .../internal/container/{ => holders}/ItemHolder.java | 2 +- .../internal/container/{ => holders}/SoundHolder.java | 2 +- .../container/{ => holders}/SpawnEntityHolder.java | 2 +- .../container/{ => holders}/SpawnMaterialHolder.java | 2 +- .../java/at/pavlov/internal/projectile/Projectile.java | 8 ++++---- .../src/main/java/at/pavlov/cannons/CreateExplosion.java | 6 +++--- .../src/main/java/at/pavlov/cannons/cannon/Cannon.java | 4 ++-- .../main/java/at/pavlov/cannons/cannon/CannonManager.java | 4 ++-- .../main/java/at/pavlov/cannons/cannon/DesignStorage.java | 6 +++--- .../src/main/java/at/pavlov/cannons/config/Config.java | 2 +- .../pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java | 2 +- .../at/pavlov/cannons/projectile/ProjectileStorage.java | 4 ++-- .../at/pavlov/cannons/scheduler/ProjectileObserver.java | 4 ++-- .../src/main/java/at/pavlov/cannons/utils/ParseUtils.java | 6 +++--- .../src/main/java/at/pavlov/cannons/utils/SoundUtils.java | 2 +- 26 files changed, 56 insertions(+), 54 deletions(-) rename api-bukkit/src/main/java/at/pavlov/bukkit/container/{ => holders}/BukkitBlock.java (97%) rename api-bukkit/src/main/java/at/pavlov/bukkit/container/{ => holders}/BukkitEntityHolder.java (96%) rename api-bukkit/src/main/java/at/pavlov/bukkit/container/{ => holders}/BukkitItemHolder.java (98%) rename api-bukkit/src/main/java/at/pavlov/bukkit/container/{ => holders}/BukkitSoundHolder.java (74%) rename api-bukkit/src/main/java/at/pavlov/bukkit/container/{ => holders}/BukkitSpawnMaterialHolder.java (85%) rename api-internal/src/main/java/at/pavlov/internal/container/{SimpleBlock.java => holders/BlockHolder.java} (87%) rename api-internal/src/main/java/at/pavlov/internal/container/{ => holders}/ItemHolder.java (98%) rename api-internal/src/main/java/at/pavlov/internal/container/{ => holders}/SoundHolder.java (98%) rename api-internal/src/main/java/at/pavlov/internal/container/{ => holders}/SpawnEntityHolder.java (98%) rename api-internal/src/main/java/at/pavlov/internal/container/{ => holders}/SpawnMaterialHolder.java (96%) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java index a855c75e..3162ff2a 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java @@ -1,10 +1,10 @@ package at.pavlov.bukkit.cannons.data; import at.pavlov.bukkit.cannons.CannonBukkit; -import at.pavlov.bukkit.container.BukkitBlock; +import at.pavlov.bukkit.container.holders.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; -import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.BukkitSoundHolder; +import at.pavlov.bukkit.container.holders.BukkitItemHolder; +import at.pavlov.bukkit.container.holders.BukkitSoundHolder; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.internal.CannonLogger; import at.pavlov.internal.cannons.data.CannonDesign; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java index 4dc055a5..aca908d9 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitCannonBlocks.java @@ -1,5 +1,6 @@ package at.pavlov.bukkit.container; +import at.pavlov.bukkit.container.holders.BukkitBlock; import at.pavlov.internal.container.CannonBlocks; /** diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitBlock.java similarity index 97% rename from api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitBlock.java index 0f0b6c29..4ea7438c 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitBlock.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitBlock.java @@ -1,7 +1,7 @@ -package at.pavlov.bukkit.container; +package at.pavlov.bukkit.container.holders; -import at.pavlov.internal.container.SimpleBlock; +import at.pavlov.internal.container.holders.BlockHolder; import at.pavlov.internal.container.location.CannonVector; import org.bukkit.Location; import org.bukkit.Material; @@ -14,7 +14,7 @@ import java.util.function.Function; -public class BukkitBlock extends SimpleBlock { +public class BukkitBlock extends BlockHolder { public BukkitBlock(int x, int y, int z, BlockData blockData) { super(x, y, z, blockData); diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitEntityHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitEntityHolder.java similarity index 96% rename from api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitEntityHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitEntityHolder.java index b36e7c12..57bdf8e2 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitEntityHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitEntityHolder.java @@ -1,7 +1,7 @@ -package at.pavlov.bukkit.container; +package at.pavlov.bukkit.container.holders; import at.pavlov.internal.CannonLogger; -import at.pavlov.internal.container.SpawnEntityHolder; +import at.pavlov.internal.container.holders.SpawnEntityHolder; import at.pavlov.internal.enums.EntityDataType; import com.google.gson.JsonElement; import com.google.gson.JsonObject; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitItemHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitItemHolder.java similarity index 98% rename from api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitItemHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitItemHolder.java index 8e8ce955..08d6135a 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitItemHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitItemHolder.java @@ -1,7 +1,7 @@ -package at.pavlov.bukkit.container; +package at.pavlov.bukkit.container.holders; import at.pavlov.internal.CannonLogger; -import at.pavlov.internal.container.ItemHolder; +import at.pavlov.internal.container.holders.ItemHolder; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSoundHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitSoundHolder.java similarity index 74% rename from api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSoundHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitSoundHolder.java index 02b3b30a..44b150e5 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSoundHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitSoundHolder.java @@ -1,6 +1,6 @@ -package at.pavlov.bukkit.container; +package at.pavlov.bukkit.container.holders; -import at.pavlov.internal.container.SoundHolder; +import at.pavlov.internal.container.holders.SoundHolder; import org.bukkit.Sound; import java.util.function.Function; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSpawnMaterialHolder.java b/api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitSpawnMaterialHolder.java similarity index 85% rename from api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSpawnMaterialHolder.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitSpawnMaterialHolder.java index f4a434b3..6383a676 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/container/BukkitSpawnMaterialHolder.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/container/holders/BukkitSpawnMaterialHolder.java @@ -1,6 +1,6 @@ -package at.pavlov.bukkit.container; +package at.pavlov.bukkit.container.holders; -import at.pavlov.internal.container.SpawnMaterialHolder; +import at.pavlov.internal.container.holders.SpawnMaterialHolder; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.data.BlockData; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java index 3a5cdac6..fdaa2ebb 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitProjectile.java @@ -1,10 +1,10 @@ package at.pavlov.bukkit.projectile; import at.pavlov.bukkit.builders.ParticleBuilder; -import at.pavlov.bukkit.container.BukkitEntityHolder; -import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; +import at.pavlov.bukkit.container.holders.BukkitEntityHolder; +import at.pavlov.bukkit.container.holders.BukkitItemHolder; +import at.pavlov.bukkit.container.holders.BukkitSoundHolder; +import at.pavlov.bukkit.container.holders.BukkitSpawnMaterialHolder; import at.pavlov.internal.projectile.Projectile; import org.bukkit.FireworkEffect; import org.bukkit.block.data.BlockData; diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java index 70017bf9..f6794eed 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java @@ -4,9 +4,9 @@ import at.pavlov.internal.cannons.holders.CannonMainDataHolder; import at.pavlov.internal.cannons.holders.CannonPositionHolder; import at.pavlov.internal.container.CannonBlocks; -import at.pavlov.internal.container.ItemHolder; -import at.pavlov.internal.container.SimpleBlock; -import at.pavlov.internal.container.SoundHolder; +import at.pavlov.internal.container.holders.ItemHolder; +import at.pavlov.internal.container.holders.BlockHolder; +import at.pavlov.internal.container.holders.SoundHolder; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.projectile.Projectile; @@ -23,7 +23,7 @@ Material, IH extends ItemHolder, SH extends SoundHolder, - SB extends SimpleBlock, + SB extends BlockHolder, CB extends CannonBlocks > { //general diff --git a/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java b/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java index 7f999295..7f3e8373 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/CannonBlocks.java @@ -1,5 +1,6 @@ package at.pavlov.internal.container; +import at.pavlov.internal.container.holders.BlockHolder; import at.pavlov.internal.container.location.CannonVector; import lombok.Data; @@ -10,7 +11,7 @@ * it is not suggested to create new instances of it but instead * use it to get the positions of the various stuff */ -@Data public abstract class CannonBlocks> { +@Data public abstract class CannonBlocks> { private CannonVector rotationCenter; //center off all rotation blocks private CannonVector muzzle; //center off all muzzle blocks - spawing CannonVector for snowball diff --git a/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java b/api-internal/src/main/java/at/pavlov/internal/container/holders/BlockHolder.java similarity index 87% rename from api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java rename to api-internal/src/main/java/at/pavlov/internal/container/holders/BlockHolder.java index 1379ccfb..b782bd0e 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/SimpleBlock.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/holders/BlockHolder.java @@ -1,4 +1,4 @@ -package at.pavlov.internal.container; +package at.pavlov.internal.container.holders; import at.pavlov.internal.container.location.CannonVector; @@ -6,7 +6,7 @@ import java.util.function.Function; -@Data abstract public class SimpleBlock { +@Data abstract public class BlockHolder { protected int locX; protected int locY; protected int locZ; @@ -14,7 +14,7 @@ protected Block blockData; - public SimpleBlock(int x, int y, int z, Block blockData) { + public BlockHolder(int x, int y, int z, Block blockData) { locX = x; locY = y; locZ = z; diff --git a/api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/holders/ItemHolder.java similarity index 98% rename from api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java rename to api-internal/src/main/java/at/pavlov/internal/container/holders/ItemHolder.java index 61f632f0..71399bb0 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/ItemHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/holders/ItemHolder.java @@ -1,4 +1,4 @@ -package at.pavlov.internal.container; +package at.pavlov.internal.container.holders; import lombok.Getter; diff --git a/api-internal/src/main/java/at/pavlov/internal/container/SoundHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/holders/SoundHolder.java similarity index 98% rename from api-internal/src/main/java/at/pavlov/internal/container/SoundHolder.java rename to api-internal/src/main/java/at/pavlov/internal/container/holders/SoundHolder.java index 775dd010..a19ce18b 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/SoundHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/holders/SoundHolder.java @@ -1,4 +1,4 @@ -package at.pavlov.internal.container; +package at.pavlov.internal.container.holders; import at.pavlov.internal.CannonLogger; import lombok.Data; diff --git a/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/holders/SpawnEntityHolder.java similarity index 98% rename from api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java rename to api-internal/src/main/java/at/pavlov/internal/container/holders/SpawnEntityHolder.java index 3cb7f8c4..b00a8294 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/SpawnEntityHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/holders/SpawnEntityHolder.java @@ -1,4 +1,4 @@ -package at.pavlov.internal.container; +package at.pavlov.internal.container.holders; import at.pavlov.internal.CannonLogger; import at.pavlov.internal.enums.EntityDataType; diff --git a/api-internal/src/main/java/at/pavlov/internal/container/SpawnMaterialHolder.java b/api-internal/src/main/java/at/pavlov/internal/container/holders/SpawnMaterialHolder.java similarity index 96% rename from api-internal/src/main/java/at/pavlov/internal/container/SpawnMaterialHolder.java rename to api-internal/src/main/java/at/pavlov/internal/container/holders/SpawnMaterialHolder.java index c7ab3a42..2781debe 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/SpawnMaterialHolder.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/holders/SpawnMaterialHolder.java @@ -1,4 +1,4 @@ -package at.pavlov.internal.container; +package at.pavlov.internal.container.holders; import at.pavlov.internal.CannonLogger; import lombok.Data; diff --git a/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java b/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java index 002e59ef..7a5c2544 100644 --- a/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java +++ b/api-internal/src/main/java/at/pavlov/internal/projectile/Projectile.java @@ -1,9 +1,9 @@ package at.pavlov.internal.projectile; -import at.pavlov.internal.container.ItemHolder; -import at.pavlov.internal.container.SoundHolder; -import at.pavlov.internal.container.SpawnEntityHolder; -import at.pavlov.internal.container.SpawnMaterialHolder; +import at.pavlov.internal.container.holders.ItemHolder; +import at.pavlov.internal.container.holders.SoundHolder; +import at.pavlov.internal.container.holders.SpawnEntityHolder; +import at.pavlov.internal.container.holders.SpawnMaterialHolder; import at.pavlov.internal.enums.ProjectileProperties; import lombok.Data; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 3f799b9c..a319d597 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -1,8 +1,8 @@ package at.pavlov.cannons; -import at.pavlov.bukkit.container.BukkitEntityHolder; -import at.pavlov.bukkit.container.BukkitSoundHolder; -import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; +import at.pavlov.bukkit.container.holders.BukkitEntityHolder; +import at.pavlov.bukkit.container.holders.BukkitSoundHolder; +import at.pavlov.bukkit.container.holders.BukkitSpawnMaterialHolder; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.config.Config; import at.pavlov.bukkit.container.BukkitDeathCause; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index 90f150af..ebfbee93 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -2,9 +2,9 @@ import at.pavlov.bukkit.cannons.CannonBukkit; import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; -import at.pavlov.bukkit.container.BukkitBlock; +import at.pavlov.bukkit.container.holders.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; -import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.container.holders.BukkitItemHolder; import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 3255628e..2bd7d331 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -1,8 +1,8 @@ package at.pavlov.cannons.cannon; import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; -import at.pavlov.bukkit.container.BukkitBlock; -import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.container.holders.BukkitBlock; +import at.pavlov.bukkit.container.holders.BukkitItemHolder; import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.cannons.Aiming; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index 12425a0f..c58ab24c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -1,10 +1,10 @@ package at.pavlov.cannons.cannon; import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; -import at.pavlov.bukkit.container.BukkitBlock; +import at.pavlov.bukkit.container.holders.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; -import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.BukkitSoundHolder; +import at.pavlov.bukkit.container.holders.BukkitItemHolder; +import at.pavlov.bukkit.container.holders.BukkitSoundHolder; import at.pavlov.cannons.Cannons; import at.pavlov.internal.utils.FileUtils; import at.pavlov.internal.various.DesignFileName; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java index 683a3705..b3c7c2e6 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/Config.java @@ -2,7 +2,7 @@ import at.pavlov.bukkit.builders.ParticleBuilder; -import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.container.holders.BukkitItemHolder; import at.pavlov.bukkit.utils.FileReadUtils; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.multiversion.ParticleResolver; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java index 7ed3c0f0..82a7f3dd 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/hooks/papi/CannonsPAPIExpansion.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.hooks.papi; -import at.pavlov.bukkit.container.BukkitItemHolder; +import at.pavlov.bukkit.container.holders.BukkitItemHolder; import at.pavlov.cannons.Aiming; import at.pavlov.cannons.Cannons; import me.clip.placeholderapi.expansion.PlaceholderExpansion; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java index 9f1f68b2..c15cd6d0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileStorage.java @@ -1,8 +1,8 @@ package at.pavlov.cannons.projectile; import at.pavlov.bukkit.builders.ParticleBuilder; -import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.BukkitSoundHolder; +import at.pavlov.bukkit.container.holders.BukkitItemHolder; +import at.pavlov.bukkit.container.holders.BukkitSoundHolder; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.bukkit.utils.FileReadUtils; import at.pavlov.cannons.Cannons; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index f4693c9e..7fa0433e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.scheduler; -import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.BukkitSoundHolder; +import at.pavlov.bukkit.container.holders.BukkitItemHolder; +import at.pavlov.bukkit.container.holders.BukkitSoundHolder; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java index 1629763a..0424fbd0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/ParseUtils.java @@ -1,8 +1,8 @@ package at.pavlov.cannons.utils; -import at.pavlov.bukkit.container.BukkitEntityHolder; -import at.pavlov.bukkit.container.BukkitItemHolder; -import at.pavlov.bukkit.container.BukkitSpawnMaterialHolder; +import at.pavlov.bukkit.container.holders.BukkitEntityHolder; +import at.pavlov.bukkit.container.holders.BukkitItemHolder; +import at.pavlov.bukkit.container.holders.BukkitSpawnMaterialHolder; import at.pavlov.cannons.Cannons; import org.bukkit.Bukkit; import org.bukkit.Color; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java index 0e2322db..b12ed68f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java @@ -1,6 +1,6 @@ package at.pavlov.cannons.utils; -import at.pavlov.bukkit.container.BukkitSoundHolder; +import at.pavlov.bukkit.container.holders.BukkitSoundHolder; import at.pavlov.cannons.dao.AsyncTaskManager; import org.bukkit.Location; import org.bukkit.Sound; From 066101bf4a92b8826571411eb8b7bad00cfcafba Mon Sep 17 00:00:00 2001 From: Intybyte Date: Thu, 19 Dec 2024 21:14:27 +0100 Subject: [PATCH 81/97] Abstract FlyingProjectile and make BukkitFlyingProjectile --- .../internal/container/MovingObject.java | 5 + .../container/location/CannonVector.java | 8 + .../internal/projectile/FlyingProjectile.java | 162 ++++++++++++++++++ .../at/pavlov/cannons/CreateExplosion.java | 88 ++++++---- .../cannons/event/CannonDamageEvent.java | 16 +- .../cannons/listener/PlayerListener.java | 4 +- ...ctile.java => BukkitFlyingProjectile.java} | 130 ++------------ .../cannons/projectile/ProjectileManager.java | 20 +-- .../cannons/scheduler/ProjectileObserver.java | 25 ++- .../at/pavlov/cannons/utils/CannonsUtil.java | 28 ++- 10 files changed, 306 insertions(+), 180 deletions(-) create mode 100644 api-internal/src/main/java/at/pavlov/internal/projectile/FlyingProjectile.java rename cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/{FlyingProjectile.java => BukkitFlyingProjectile.java} (55%) diff --git a/api-internal/src/main/java/at/pavlov/internal/container/MovingObject.java b/api-internal/src/main/java/at/pavlov/internal/container/MovingObject.java index 2b03d254..5a58b6c3 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/MovingObject.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/MovingObject.java @@ -1,6 +1,7 @@ package at.pavlov.internal.container; import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; import lombok.AllArgsConstructor; import lombok.Data; @@ -79,6 +80,10 @@ public void revertProjectileLocation(boolean inWater) { this.loc.subtract(this.vel); } + public Coordinate getCoordinate() { + return new Coordinate(loc, world); + } + public abstract Entity arrow(); public abstract List fireballs(); } diff --git a/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java b/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java index 56140fa0..0bb45dcc 100644 --- a/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java +++ b/api-internal/src/main/java/at/pavlov/internal/container/location/CannonVector.java @@ -27,6 +27,14 @@ public CannonVector clone() { } + @NotNull + public CannonVector add(double x, double y, double z) { + this.x += x; + this.y += y; + this.z += z; + return this; + } + @NotNull public CannonVector add(@NotNull CannonVector vec) { this.x += vec.x; diff --git a/api-internal/src/main/java/at/pavlov/internal/projectile/FlyingProjectile.java b/api-internal/src/main/java/at/pavlov/internal/projectile/FlyingProjectile.java new file mode 100644 index 00000000..4bb017b6 --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/projectile/FlyingProjectile.java @@ -0,0 +1,162 @@ +package at.pavlov.internal.projectile; + +import at.pavlov.internal.container.MovingObject; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; +import at.pavlov.internal.enums.ProjectileCause; +import lombok.Getter; +import lombok.Setter; + +import java.util.UUID; + + +public abstract class FlyingProjectile < + PlatformProjectile, + Proj extends Projectile, + MO extends MovingObject, + Source + > { + @Getter + protected long spawnTime; + + @Getter + protected UUID entityUID; + @Getter + protected UUID shooterUID; + @Getter + protected UUID worldUID; + @Setter + @Getter + protected UUID cannonUID; + @Getter + protected Proj projectile; + @Getter + protected Source source; + //location of the shooterUID before firing - important for teleporting the player back - observer property + @Getter + protected Coordinate playerlocation; + @Setter + @Getter + protected Coordinate impactLocation; + //block which caused the cannonball explosion - can be null + @Setter + @Getter + protected Coordinate impactBlock; + @Setter + @Getter + protected Coordinate lastSmokeTrailLocation; + //Important for visual splash effect when the cannonball hits the water surface + @Getter + protected boolean inWater; + @Setter + @Getter + protected boolean wasInWater; + //if the teleport was already performed + @Setter + @Getter + protected boolean teleported; + //was the projectile fired by a player, redstone or a sentry + @Getter + protected ProjectileCause projectileCause; + @Setter + @Getter + protected boolean detonated; + protected MO predictor; + + /** + * Returns the entity of the flying projectile + * This is time consuming, the projectile should be cached + * + * + * @return + */ + public abstract PlatformProjectile getProjectileEntity(); + + /** + * check if the projectile in in a liquid + * + * @return true if the projectile is in a liquid + */ + protected abstract boolean isInWaterCheck(PlatformProjectile projectile_entity); + + /** + * returns if the projectile has entered the water surface and updates also inWater + * + * @return true if the projectile has entered water + */ + public boolean updateWaterSurfaceCheck(PlatformProjectile projectile_entity) { + inWater = isInWaterCheck(projectile_entity); + boolean isSurface = !wasInWater && inWater; + wasInWater = inWater; + return isSurface; + } + + /** + * searches for the projectile and checks if the projectile is still alive and valid + * + * @return returns false if the projectile entity is null + */ + public boolean isValid() { + return isValid(getProjectileEntity()); + } + + /** + * if the projectile is still alive and valid + * a projectile is valid if it has an entity, is not below -64 and younger than 1h (60*60*1000) + * + * @return returns false if the projectile entity is null + */ + public abstract boolean isValid(PlatformProjectile projectile_entity); + + /** + * updated the location and speed of the projectile to the expected values + */ + public void update() { + predictor.updateProjectileLocation(isInWater()); + } + + /** + * revert update of the location + */ + public void revertUpdate() { + predictor.revertProjectileLocation(isInWater()); + } + + /** + * returns the calculated location of the projectile + * + * @return the location where the projectile should be + */ + public Coordinate getExpectedCoordinate() { + return predictor.getCoordinate(); + } + + /** + * teleports the projectile to the predicted location + */ + public abstract void teleportToPrediction(PlatformProjectile projectile_entity); + + /** + * teleports the projectile to the given location + * + * @param loc target location + * @param vel velocity of the projectile + */ + public abstract void teleport(Coordinate loc, CannonVector vel); + + @Override + public int hashCode() { + //compare projectile entities + return entityUID.hashCode(); + } + + @Override + public boolean equals(Object obj) { + //equal if the projectile entities are equal + if (!(obj instanceof FlyingProjectile fp)) { + return false; + } + + return this.getEntityUID().equals(fp.getEntityUID()); + } +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index a319d597..ebc9f913 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -3,6 +3,8 @@ import at.pavlov.bukkit.container.holders.BukkitEntityHolder; import at.pavlov.bukkit.container.holders.BukkitSoundHolder; import at.pavlov.bukkit.container.holders.BukkitSpawnMaterialHolder; +import at.pavlov.bukkit.factory.CoordinateUtil; +import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.config.Config; import at.pavlov.bukkit.container.BukkitDeathCause; @@ -14,7 +16,7 @@ import at.pavlov.cannons.event.ProjectilePiercingEvent; import at.pavlov.cannons.multiversion.EntityTypeResolver; import at.pavlov.cannons.multiversion.EventResolver; -import at.pavlov.cannons.projectile.FlyingProjectile; +import at.pavlov.cannons.projectile.BukkitFlyingProjectile; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.scheduler.FakeBlockHandler; @@ -22,6 +24,8 @@ import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.ParseUtils; import at.pavlov.cannons.utils.SoundUtils; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.DamageType; import at.pavlov.internal.enums.EntityDataType; import at.pavlov.internal.enums.FakeBlockType; @@ -75,7 +79,7 @@ public class CreateExplosion { private final Cannons plugin; private final Config config; - private FlyingProjectile currentCannonball; + private BukkitFlyingProjectile currentCannonball; private final HashSet affectedEntities = new HashSet<>(); // the entity is used in 1 tick. There should be no garbage collector problem @@ -161,7 +165,7 @@ private boolean breakBlock(Block block, List blocklist, Boolean superBrea * @param cannonball * @return the location after the piercing event */ - private Location blockBreaker(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { + private Location blockBreaker(BukkitFlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { BukkitProjectile projectile = cannonball.getProjectile(); @@ -288,9 +292,9 @@ private void BreakBreakNaturally(Block block, float yield) { * @param entityVelocity how fast the entity is push away * @param entityHolder type of entity to spawn */ - private void spawnEntity(FlyingProjectile cannonball, Location loc, double entityVelocity, + private void spawnEntity(BukkitFlyingProjectile cannonball, Location loc, double entityVelocity, BukkitEntityHolder entityHolder) { - Location impactLoc = cannonball.getImpactLocation(); + Location impactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); World world = impactLoc.getWorld(); // move cloud to the ground @@ -450,13 +454,13 @@ private Location moveToGround(Location loc, double max_iterations) { * * @param cannonball involved projectile */ - private void spreadEntities(FlyingProjectile cannonball) { + private void spreadEntities(BukkitFlyingProjectile cannonball) { if (!cannonball.getProjectile().isSpawnEnabled()) return; BukkitProjectile projectile = cannonball.getProjectile(); - Location impactLoc = cannonball.getImpactLocation(); + Location impactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); Location placeLoc; @@ -520,12 +524,12 @@ private void spawnFallingBlock(Location impactLoc, Location placeLoc, double ent * * @param cannonball the fired cannonball */ - private void spreadBlocks(FlyingProjectile cannonball) { + private void spreadBlocks(BukkitFlyingProjectile cannonball) { if (!cannonball.getProjectile().isSpawnEnabled()) return; BukkitProjectile projectile = cannonball.getProjectile(); - Location impactLoc = cannonball.getImpactLocation(); + Location impactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); Location placeLoc; @@ -612,7 +616,7 @@ private int checkLineOfSight(Location impact, Location target) { * @param next * @param cannonball */ - private void applyPotionEffect(Location impactLoc, Entity next, FlyingProjectile cannonball) { + private void applyPotionEffect(Location impactLoc, Entity next, BukkitFlyingProjectile cannonball) { BukkitProjectile projectile = cannonball.getProjectile(); if (!(next instanceof LivingEntity living)) { @@ -657,7 +661,7 @@ private void applyPotionEffect(Location impactLoc, Entity next, FlyingProjectile * @param cannonball * @return - damage done to the entity */ - private double getExplosionDamage(Location impactLoc, Entity next, FlyingProjectile cannonball) { + private double getExplosionDamage(Location impactLoc, Entity next, BukkitFlyingProjectile cannonball) { BukkitProjectile projectile = cannonball.getProjectile(); if (!(next instanceof LivingEntity living)) { @@ -704,7 +708,7 @@ private double getExplosionDamage(Location impactLoc, Entity next, FlyingProject * @param target * @return return the amount of damage done to the living entity */ - private double getDirectHitDamage(FlyingProjectile cannonball, Entity target) { + private double getDirectHitDamage(BukkitFlyingProjectile cannonball, Entity target) { BukkitProjectile projectile = cannonball.getProjectile(); // if (cannonball.getProjectileEntity()==null) @@ -756,7 +760,7 @@ private void addAffectedEntity(Entity entity) { * @param cannonball cannonball which hit the entity * @param entity entity hit */ - public void directHit(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity, Entity entity) { + public void directHit(BukkitFlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity, Entity entity) { // add damage to map - it will be applied later to the player double directHit = this.getDirectHitDamage(cannonball, entity); this.damageMap.put(entity, directHit); @@ -771,7 +775,7 @@ public void directHit(FlyingProjectile cannonball, org.bukkit.entity.Projectile * * @param cannonball cannonball which will explode */ - public void detonate(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { + public void detonate(BukkitFlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { this.plugin.logDebug("detonate cannonball"); BukkitProjectile projectile = cannonball.getProjectile().clone(); @@ -782,14 +786,14 @@ public void detonate(FlyingProjectile cannonball, org.bukkit.entity.Projectile p // explosion Location impactLoc = this.blockBreaker(cannonball, projectile_entity); // impactLoc = projectile_entity.getLocation(); - cannonball.setImpactLocation(impactLoc); + cannonball.setImpactLocation(CoordinateUtil.fromLoc(impactLoc)); World world = impactLoc.getWorld(); // find block which caused the shell impact Location impactBlock = CannonsUtil.findFirstBlock(impactLoc, cannonball.getVelocity()); if (impactBlock != null) { - cannonball.setImpactBlock(impactBlock); + cannonball.setImpactBlock(CoordinateUtil.fromLoc(impactBlock)); //this.plugin.logDebug("todo: impact block: " + impactBlock.getBlock()); } @@ -884,7 +888,7 @@ public void detonate(FlyingProjectile cannonball, org.bukkit.entity.Projectile p this.spreadEntities(cannonball); } - private void fireEntityDeathEvent(FlyingProjectile cannonball) { + private void fireEntityDeathEvent(BukkitFlyingProjectile cannonball) { LinkedList lEntities = new LinkedList<>(); // check which entities are affected by the event for (Entity entity : this.affectedEntities) { @@ -928,7 +932,7 @@ public boolean wasAffectedByCannons(Player player) { * * @param cannonball exploding cannonball */ - private void clusterExplosions(FlyingProjectile cannonball) { + private void clusterExplosions(BukkitFlyingProjectile cannonball) { final BukkitProjectile projectile = cannonball.getProjectile(); if (!projectile.isClusterExplosionsEnabled()) { @@ -941,15 +945,20 @@ private void clusterExplosions(FlyingProjectile cannonball) { * (projectile.getClusterExplosionsMaxDelay() - projectile.getClusterExplosionsMinDelay()); - taskManager.scheduler.runTaskLater(cannonball.getImpactLocation(), + Location loc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); + + taskManager.scheduler.runTaskLater(loc, new DelayedTask(cannonball) { @Override public void run(Object object) { - FlyingProjectile cannonball = (FlyingProjectile) object; + BukkitFlyingProjectile cannonball = (BukkitFlyingProjectile) object; BukkitProjectile proj = cannonball.getProjectile(); - Location expLoc = CannonsUtil.randomPointInSphere(cannonball.getImpactLocation(), - proj.getClusterExplosionsRadius()); + Location expLoc = CannonsUtil.randomPointInSphere( + loc, + proj.getClusterExplosionsRadius() + ); + // only do if explosion in blocks are allowed if (proj.isClusterExplosionsInBlocks() || expLoc.getBlock().isEmpty() || (expLoc.getBlock().isLiquid() && proj.isUnderwaterDamage())) { @@ -970,12 +979,12 @@ public void run(Object object) { * @param cannonball the flying projectile * @param player the one to teleport */ - private void teleportPlayer(FlyingProjectile cannonball, Player player) { + private void teleportPlayer(BukkitFlyingProjectile cannonball, Player player) { if (player == null || cannonball == null) return; BukkitProjectile projectile = cannonball.getProjectile(); - Location impactLoc = cannonball.getImpactLocation(); + Location impactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); Location teleLoc = null; // teleport to impact and reset speed - make a soft landing @@ -985,7 +994,7 @@ private void teleportPlayer(FlyingProjectile cannonball, Player player) { } // teleport the player back to the location before firing else if (projectile.hasProperty(ProjectileProperties.OBSERVER)) { - teleLoc = cannonball.getPlayerlocation(); + teleLoc = CoordinateUtil.toLoc(cannonball.getPlayerlocation()); } // teleport to this location if (teleLoc == null) { @@ -1005,9 +1014,9 @@ else if (projectile.hasProperty(ProjectileProperties.OBSERVER)) { * * @param cannonball the flying projectile */ - private void damageEntity(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { + private void damageEntity(BukkitFlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { BukkitProjectile projectile = cannonball.getProjectile(); - Location impactLoc = cannonball.getImpactLocation(); + Location impactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); // explosion effect double effectRange = projectile.getPlayerDamageRange(); @@ -1075,13 +1084,13 @@ private void damageEntity(FlyingProjectile cannonball, org.bukkit.entity.Project * * @param cannonball the flying projectile */ - private boolean deflectProjectile(FlyingProjectile cannonball) { + private boolean deflectProjectile(BukkitFlyingProjectile cannonball) { // todo deflect projectiles // if (!cannonball.getProjectile().isSpawnEnabled()) // return; //Location impactLoc = cannonball.getImpactLocation(); - Location impactBlock = cannonball.getImpactBlock(); + Location impactBlock = CoordinateUtil.toLoc(cannonball.getImpactBlock()); if (impactBlock == null) return false; @@ -1105,12 +1114,14 @@ private boolean deflectProjectile(FlyingProjectile cannonball) { this.plugin.logDebug("Deflection valid"); // spawn a new deflected cannnonball - Location impactLoc = cannonball.getImpactLocation() - .subtract(cannonball.getVelocity().normalize().multiply(0.3)); + Vector subVector = cannonball.getVelocity().normalize().multiply(0.3); + Location baseImpactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); + Location impactLoc = baseImpactLoc.subtract(subVector); + taskManager.scheduler.runTaskLater(impactLoc, new DelayedTask(cannonball) { @Override public void run(Object object) { - FlyingProjectile cannonball = (FlyingProjectile) object; + BukkitFlyingProjectile cannonball = (BukkitFlyingProjectile) object; BukkitProjectile projectile = cannonball.getProjectile(); @@ -1128,7 +1139,8 @@ public void run(Object object) { CreateExplosion.this.plugin.logDebug("Deflect projectile: " + vectdeflect); ProjectileManager.getInstance().spawnProjectile(projectile, - cannonball.getShooterUID(), cannonball.getSource(), cannonball.getPlayerlocation(), + cannonball.getShooterUID(), cannonball.getSource(), + CoordinateUtil.toLoc(cannonball.getPlayerlocation()), impactLoc.clone(), vectdeflect, cannonball.getCannonUID(), ProjectileCause.DeflectedProjectile); } }, 1L); @@ -1141,15 +1153,15 @@ public void run(Object object) { * * @param cannonball the flying projectile */ - private void spawnProjectiles(FlyingProjectile cannonball) { + private void spawnProjectiles(BukkitFlyingProjectile cannonball) { if (!cannonball.getProjectile().isSpawnEnabled()) return; - Location impactLoc = cannonball.getImpactLocation(); + Location impactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); taskManager.scheduler.runTaskLater(impactLoc, new DelayedTask(cannonball) { @Override public void run(Object object) { - FlyingProjectile cannonball = (FlyingProjectile) object; + BukkitFlyingProjectile cannonball = (BukkitFlyingProjectile) object; BukkitProjectile projectile = cannonball.getProjectile(); @@ -1183,7 +1195,7 @@ public void run(Object object) { * * @param cannonball the flying projectile */ - private void spawnFireworks(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { + private void spawnFireworks(BukkitFlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { World world = cannonball.getWorld(); BukkitProjectile projectile = cannonball.getProjectile(); @@ -1286,7 +1298,7 @@ public void removeKilledPlayer(UUID playerUID) { this.killedPlayers.remove(playerUID); } - public FlyingProjectile getCurrentCannonball() { + public BukkitFlyingProjectile getCurrentCannonball() { return currentCannonball; } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java index e8117883..bc0f0789 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java @@ -1,7 +1,9 @@ package at.pavlov.cannons.event; -import at.pavlov.cannons.projectile.FlyingProjectile; +import at.pavlov.bukkit.factory.CoordinateUtil; +import at.pavlov.cannons.projectile.BukkitFlyingProjectile; import at.pavlov.internal.enums.DamageType; +import org.bukkit.Location; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; @@ -10,14 +12,14 @@ public class CannonDamageEvent extends Event { private static final HandlerList handlers = new HandlerList(); - private final FlyingProjectile cannonball; + private final BukkitFlyingProjectile cannonball; private final LivingEntity target; private double damage; private double reduction; private Double distance; private final DamageType type; - public CannonDamageEvent(FlyingProjectile cannonball, LivingEntity target, double damage, double reduction, @Nullable Double distance, DamageType type) { + public CannonDamageEvent(BukkitFlyingProjectile cannonball, LivingEntity target, double damage, double reduction, @Nullable Double distance, DamageType type) { this.cannonball = cannonball; this.target = target; this.damage = damage; @@ -35,7 +37,7 @@ public static HandlerList getHandlerList() { return handlers; } - public FlyingProjectile getCannonball() { + public BukkitFlyingProjectile getCannonball() { return cannonball; } @@ -64,8 +66,10 @@ public DamageType getType() { } public double getDistance() { - if (distance == null && type == DamageType.DIRECT) - distance = cannonball.getImpactLocation().distance(target.getLocation()); + if (distance == null && type == DamageType.DIRECT) { + Location impactLocation = CoordinateUtil.toLoc(cannonball.getImpactLocation()); + distance = impactLocation.distance(target.getLocation()); + } return distance; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java index ac655cec..2c1028c2 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java @@ -11,7 +11,7 @@ import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.multiversion.PotionTypeResolver; -import at.pavlov.cannons.projectile.FlyingProjectile; +import at.pavlov.cannons.projectile.BukkitFlyingProjectile; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.utils.CannonSelector; @@ -76,7 +76,7 @@ public void PlayerDeath(PlayerDeathEvent event) // if (cause.getShooterUID() != null) // shooter = Bukkit.getPlayer(cause.getShooterUID()); // Cannon cannon = plugin.getCannon(cause.getCannonUID()); - FlyingProjectile c = explosion.getCurrentCannonball(); + BukkitFlyingProjectile c = explosion.getCurrentCannonball(); Cannon cannon = CannonManager.getCannon(c.getCannonUID()); String message = userMessages.getDeathMessage(killedUID, c.getShooterUID(), cannon, c.getProjectile()); if (message != null && !message.equals(" ")) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/BukkitFlyingProjectile.java similarity index 55% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java rename to cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/BukkitFlyingProjectile.java index d1641f5b..73e72f11 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/FlyingProjectile.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/BukkitFlyingProjectile.java @@ -1,73 +1,29 @@ package at.pavlov.cannons.projectile; +import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.bukkit.container.BukkitMovingObject; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.ProjectileCause; +import at.pavlov.internal.projectile.FlyingProjectile; import io.papermc.lib.PaperLib; -import lombok.Getter; -import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.Projectile; +import org.bukkit.projectiles.ProjectileSource; import org.bukkit.util.Vector; import java.util.UUID; -public class FlyingProjectile { - @Getter - private final long spawnTime; - - @Getter - private final UUID entityUID; - @Getter - private final UUID shooterUID; - @Getter - private final UUID worldUID; - @Setter - @Getter - private UUID cannonUID; - @Getter - private final BukkitProjectile projectile; - @Getter - private final org.bukkit.projectiles.ProjectileSource source; - //location of the shooterUID before firing - important for teleporting the player back - observer property - @Getter - private final Location playerlocation; - @Setter - @Getter - private Location impactLocation; - //block which caused the cannonball explosion - can be null - @Setter - @Getter - private Location impactBlock; - @Setter - @Getter - private Location lastSmokeTrailLocation; - //Important for visual splash effect when the cannonball hits the water surface - @Getter - private boolean inWater; - @Setter - @Getter - private boolean wasInWater; - //if the teleport was already performed - @Setter - @Getter - private boolean teleported; - //was the projectile fired by a player, redstone or a sentry - @Getter - private final ProjectileCause projectileCause; - @Setter - @Getter - private boolean detonated; - private final BukkitMovingObject predictor; - - - public FlyingProjectile(BukkitProjectile projectile, Projectile projectile_entity, UUID shooterUID, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, UUID cannonId, ProjectileCause projectileCause) { +public class BukkitFlyingProjectile extends FlyingProjectile { + + public BukkitFlyingProjectile(BukkitProjectile projectile, Projectile projectile_entity, UUID shooterUID, org.bukkit.projectiles.ProjectileSource source, Location playerLoc, UUID cannonId, ProjectileCause projectileCause) { //Validate.notNull(shooterUID, "shooterUID for the projectile can't be null"); this.entityUID = projectile_entity.getUniqueId(); this.worldUID = projectile_entity.getWorld().getUID(); @@ -76,7 +32,7 @@ public FlyingProjectile(BukkitProjectile projectile, Projectile projectile_entit this.projectile = projectile; this.cannonUID = cannonId; this.shooterUID = shooterUID; - this.playerlocation = playerLoc; + this.playerlocation = CoordinateUtil.fromLoc(playerLoc); this.source = source; if (source != null) projectile_entity.setShooter(source); @@ -89,16 +45,10 @@ public FlyingProjectile(BukkitProjectile projectile, Projectile projectile_entit Location new_loc = projectile_entity.getLocation(); predictor = new BukkitMovingObject(new_loc, projectile_entity.getVelocity(), projectile.getProjectileEntity()); - this.lastSmokeTrailLocation = new_loc; + this.lastSmokeTrailLocation = CoordinateUtil.fromLoc(new_loc); } - /* - * Returns the entity of the flying projectile - * This is time consuming, the projectile should be cached - * - * - * @return - */ + @Override public Projectile getProjectileEntity() { Entity e = Bukkit.getEntity(entityUID); if (e == null) @@ -112,7 +62,7 @@ public Projectile getProjectileEntity() { * * @return true if the projectile is in a liquid */ - private boolean isInWaterCheck(Projectile projectile_entity) { + public boolean isInWaterCheck(Projectile projectile_entity) { if (projectile_entity != null) { Block block = projectile_entity.getLocation().getBlock(); return block.isLiquid(); @@ -120,27 +70,6 @@ private boolean isInWaterCheck(Projectile projectile_entity) { return false; } - /** - * returns if the projectile has entered the water surface and updates also inWater - * - * @return true if the projectile has entered water - */ - public boolean updateWaterSurfaceCheck(Projectile projectile_entity) { - inWater = isInWaterCheck(projectile_entity); - boolean isSurface = !wasInWater && inWater; - wasInWater = inWater; - return isSurface; - } - - /** - * searches for the projectile and checks if the projectile is still alive and valid - * - * @return returns false if the projectile entity is null - */ - public boolean isValid() { - return isValid(getProjectileEntity()); - } - /** * if the projectile is still alive and valid * a projectile is valid if it has an entity, is not below -64 and younger than 1h (60*60*1000) @@ -151,20 +80,6 @@ public boolean isValid(Projectile projectile_entity) { return (projectile_entity != null && projectile_entity.getLocation().getBlockY() > -64 && System.currentTimeMillis() < getSpawnTime() + 3600000); } - /** - * updated the location and speed of the projectile to the expected values - */ - public void update() { - predictor.updateProjectileLocation(isInWater()); - } - - /** - * revert update of the location - */ - public void revertUpdate() { - predictor.revertProjectileLocation(isInWater()); - } - /** * returns the calculated location of the projectile * @@ -202,6 +117,11 @@ public void teleportToPrediction(Projectile projectile_entity) { projectile_entity.setVelocity(VectorUtils.toBaseVector(predictor.getVel())); } + @Override + public void teleport(Coordinate loc, CannonVector vel) { + teleport(CoordinateUtil.toLoc(loc), VectorUtils.toBaseVector(vel)); + } + /** * teleports the projectile to the given location * @@ -214,22 +134,6 @@ public void teleport(Location loc, Vector vel) { teleportToPrediction(getProjectileEntity()); } - @Override - public int hashCode() { - //compare projectile entities - return entityUID.hashCode(); - } - - @Override - public boolean equals(Object obj) { - //equal if the projectile entities are equal - if (!(obj instanceof FlyingProjectile fp)) { - return false; - } - - return this.getEntityUID().equals(fp.getEntityUID()); - } - public World getWorld() { return Bukkit.getWorld(worldUID); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index cfee2e5e..7df927c8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -24,7 +24,7 @@ public class ProjectileManager { private static ProjectileManager instance = null; private final Cannons plugin; - private final ConcurrentHashMap flyingProjectilesMap = new ConcurrentHashMap<>(); + private final ConcurrentHashMap flyingProjectilesMap = new ConcurrentHashMap<>(); public static void initialize(Cannons plugin) { if (instance != null) @@ -71,7 +71,7 @@ public Projectile spawnProjectile(BukkitProjectile projectile, UUID shooter, org //create a new flying projectile container - FlyingProjectile cannonball = new FlyingProjectile(projectile, projectileEntity, shooter, source, playerLoc, cannonId, projectileCause); + BukkitFlyingProjectile cannonball = new BukkitFlyingProjectile(projectile, projectileEntity, shooter, source, playerLoc, cannonId, projectileCause); flyingProjectilesMap.put(cannonball.getEntityUID(), cannonball); @@ -88,7 +88,7 @@ public Projectile spawnProjectile(BukkitProjectile projectile, UUID shooter, org * * @param cannonball - the cannonball to detonate */ - private void detonateTimefuse(final FlyingProjectile cannonball) { + private void detonateTimefuse(final BukkitFlyingProjectile cannonball) { if (cannonball.getProjectile().getTimefuse() <= 0) { return; } @@ -97,7 +97,7 @@ private void detonateTimefuse(final FlyingProjectile cannonball) { AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask(cannonball.getEntityUID()) { public void run(Object object) { //find given UID in list - FlyingProjectile fproj = flyingProjectilesMap.get(object); + BukkitFlyingProjectile fproj = flyingProjectilesMap.get(object); if (fproj != null) { //detonate timefuse @@ -123,7 +123,7 @@ public void detonateProjectile(Entity projectile) { if (projectile == null || !(projectile instanceof Projectile)) return; - FlyingProjectile fproj = flyingProjectilesMap.get(projectile.getUniqueId()); + BukkitFlyingProjectile fproj = flyingProjectilesMap.get(projectile.getUniqueId()); if (fproj != null) { CreateExplosion.getInstance().detonate(fproj, (Projectile) projectile); projectile.remove(); @@ -140,7 +140,7 @@ public void detonateProjectile(Entity projectile) { public void directHitProjectile(Entity cannonball, Entity target) { if (cannonball == null || target == null) return; - FlyingProjectile fproj = flyingProjectilesMap.get(cannonball.getUniqueId()); + BukkitFlyingProjectile fproj = flyingProjectilesMap.get(cannonball.getUniqueId()); if (fproj == null) { return; } @@ -162,7 +162,7 @@ public void directHitProjectile(Entity cannonball, Entity target) { * @return true if cannonball projectile */ public boolean isFlyingProjectile(Entity projectile) { - FlyingProjectile fproj = flyingProjectilesMap.get(projectile.getUniqueId()); + BukkitFlyingProjectile fproj = flyingProjectilesMap.get(projectile.getUniqueId()); return fproj != null; } @@ -172,7 +172,7 @@ public boolean isFlyingProjectile(Entity projectile) { * * @return - the list of all flying projectiles */ - public ConcurrentHashMap getFlyingProjectiles() { + public ConcurrentHashMap getFlyingProjectiles() { return flyingProjectilesMap; } @@ -183,12 +183,12 @@ public ConcurrentHashMap getFlyingProjectiles() { * @param player is the passenger * @return the projectile or null */ - public FlyingProjectile getAttachedProjectile(Player player) { + public BukkitFlyingProjectile getAttachedProjectile(Player player) { if (player == null) { return null; } - for (FlyingProjectile proj : flyingProjectilesMap.values()) + for (BukkitFlyingProjectile proj : flyingProjectilesMap.values()) if (proj.getShooterUID().equals(player.getUniqueId())) return proj; return null; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index 7fa0433e..2bd0cdc0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -6,10 +6,12 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; import at.pavlov.cannons.dao.AsyncTaskManager; -import at.pavlov.cannons.projectile.FlyingProjectile; +import at.pavlov.cannons.projectile.BukkitFlyingProjectile; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; +import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.FakeBlockType; import at.pavlov.internal.enums.ProjectileProperties; import io.papermc.lib.PaperLib; @@ -52,7 +54,7 @@ public void setupScheduler() .getFlyingProjectiles(); for(var entry : projectiles.entrySet()) { - FlyingProjectile cannonball = entry.getValue(); + BukkitFlyingProjectile cannonball = entry.getValue(); org.bukkit.entity.Projectile projectile_entity = cannonball.getProjectileEntity(); Executor executor = (task) -> { @@ -101,7 +103,7 @@ public void setupScheduler() * if cannonball enters water it will spawn a splash effect * @param cannonball the projectile to check */ - private void checkWaterImpact(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { + private void checkWaterImpact(BukkitFlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { //the projectile has passed the water surface, make a splash if (!cannonball.updateWaterSurfaceCheck(projectile_entity)) { @@ -151,7 +153,7 @@ public void sendSplashToPlayers(Location loc, BukkitItemHolder liquid, BukkitSou * teleports the player to new position of the cannonball * @param cannonball the FlyingProjectile to check */ - private void updateTeleporter(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) + private void updateTeleporter(BukkitFlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { //do nothing if the teleport was already performed if (cannonball.isTeleported()) @@ -197,7 +199,7 @@ private void updateTeleporter(FlyingProjectile cannonball, org.bukkit.entity.Pro * @param cannonball projectile to update * @return true if the projectile must be removed */ - private boolean updateProjectileLocation(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) + private boolean updateProjectileLocation(BukkitFlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { if (!plugin.getMyConfig().isKeepAliveEnabled()) return false; @@ -231,18 +233,25 @@ private boolean updateProjectileLocation(FlyingProjectile cannonball, org.bukkit * @param cannonball the cannonball entity entry of cannons * @param projectile_entity the entity of the projectile */ - private void updateSmokeTrail(FlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { + private void updateSmokeTrail(BukkitFlyingProjectile cannonball, org.bukkit.entity.Projectile projectile_entity) { BukkitProjectile proj = cannonball.getProjectile(); int maxDist = plugin.getMyConfig().getImitatedBlockMaximumDistance(); double smokeDist = proj.getSmokeTrailDistance()*(0.5 + random.nextDouble()); double smokeDuration = proj.getSmokeTrailDuration()*(0.5 + random.nextGaussian()); - if (!proj.isSmokeTrailEnabled() || !(cannonball.getExpectedLocation().distance(cannonball.getLastSmokeTrailLocation()) > smokeDist)) { + + if (!proj.isSmokeTrailEnabled()) { + return; + } + + CannonVector expectedVector = cannonball.getExpectedCoordinate().getVector(); + CannonVector smokeTrailVector = cannonball.getLastSmokeTrailLocation().getVector(); + if (!(expectedVector.distance(smokeTrailVector) > smokeDist)) { return; } //create a new smoke trail cloud Location newLoc = cannonball.getExpectedLocation(); - cannonball.setLastSmokeTrailLocation(newLoc); + cannonball.setLastSmokeTrailLocation(cannonball.getExpectedCoordinate()); plugin.logDebug("smoke trail at: " + newLoc.getBlockX() + "," + newLoc.getBlockY() + "," + newLoc.getBlockZ()); if (proj.isSmokeTrailParticleEnabled()) { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index 39e7b894..437a7aa8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -1,5 +1,6 @@ package at.pavlov.cannons.utils; +import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; @@ -7,8 +8,9 @@ import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.bukkit.container.BukkitTarget; -import at.pavlov.cannons.projectile.FlyingProjectile; +import at.pavlov.cannons.projectile.BukkitFlyingProjectile; import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.ProjectileProperties; import io.papermc.lib.PaperLib; import org.bukkit.Bukkit; @@ -276,6 +278,26 @@ public static Location randomPointInSphere(Location center, double radius) { return center.clone().add(x,z,y); } + /** + * returns a random point in a sphere + * @param center center location + * @param radius radius of the sphere + * @return returns a random point in a sphere + */ + public static Coordinate randomPointInSphere(Coordinate center, double radius) { + double r = radius*random.nextDouble(); + double polar = Math.PI*random.nextDouble(); + double azi = Math.PI*(random.nextDouble()*2.0-1.0); + //sphere coordinates + double x = r*Math.sin(polar)*Math.cos(azi); + double y = r*Math.sin(polar)*Math.sin(azi); + double z = r*Math.cos(polar); + + Coordinate coordinate = center.clone(); + coordinate.getVector().add(x,z,y); + return coordinate; + } + /** * returns a random number in the given range @@ -292,7 +314,7 @@ public static int getRandomInt(int min, int max) * teleports the player back to the starting point if the cannonball has the property 'observer' * @param cannonball the flying projectile */ - public static void teleportBack(FlyingProjectile cannonball) { + public static void teleportBack(BukkitFlyingProjectile cannonball) { if (cannonball == null) return; @@ -305,7 +327,7 @@ public static void teleportBack(FlyingProjectile cannonball) { Location teleLoc = null; //teleport the player back to the location before firing if(projectile.hasProperty(ProjectileProperties.OBSERVER)) { - teleLoc = cannonball.getPlayerlocation(); + teleLoc = CoordinateUtil.toLoc(cannonball.getPlayerlocation()); } //teleport to this location if (teleLoc == null) { From 5433eed6349f5df3480ea92592e9039fe5101b44 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Thu, 19 Dec 2024 21:14:58 +0100 Subject: [PATCH 82/97] Optimize imports --- .../at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java | 9 --------- .../pavlov/bukkit/cannons/data/BukkitCannonDesign.java | 2 +- .../at/pavlov/internal/cannons/data/CannonDesign.java | 2 +- .../src/main/java/at/pavlov/cannons/Aiming.java | 4 ++-- .../src/main/java/at/pavlov/cannons/CreateExplosion.java | 5 +---- .../src/main/java/at/pavlov/cannons/TargetManager.java | 2 -- .../src/main/java/at/pavlov/cannons/cannon/Cannon.java | 2 +- .../java/at/pavlov/cannons/cannon/DesignStorage.java | 6 +++--- .../main/java/at/pavlov/cannons/config/UserMessages.java | 1 - .../java/at/pavlov/cannons/event/CannonTargetEvent.java | 2 +- .../cannons/projectile/BukkitFlyingProjectile.java | 2 +- .../at/pavlov/cannons/scheduler/FakeBlockHandler.java | 2 +- .../at/pavlov/cannons/scheduler/ProjectileObserver.java | 1 - .../main/java/at/pavlov/cannons/utils/CannonsUtil.java | 2 +- 14 files changed, 13 insertions(+), 29 deletions(-) diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java index 6a921469..291325e6 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/CannonDataHolderBukkit.java @@ -4,15 +4,6 @@ import at.pavlov.bukkit.cannons.holders.CannonPositionHBukkit; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.cannons.functionalities.CannonDataHolder; -import at.pavlov.internal.cannons.holders.AimingDataHolder; -import at.pavlov.internal.cannons.holders.AmmoLoadingDataHolder; -import at.pavlov.internal.cannons.holders.AngleDataHolder; -import at.pavlov.internal.cannons.holders.CannonMainDataHolder; -import at.pavlov.internal.cannons.holders.FiringDataHolder; -import at.pavlov.internal.cannons.holders.LinkingDataHolder; -import at.pavlov.internal.cannons.holders.ObserverMapHolder; -import at.pavlov.internal.cannons.holders.SentryDataHolder; -import at.pavlov.internal.cannons.holders.WhitelistDataHolder; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; diff --git a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java index 3162ff2a..fd7e8837 100644 --- a/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/cannons/data/BukkitCannonDesign.java @@ -1,8 +1,8 @@ package at.pavlov.bukkit.cannons.data; import at.pavlov.bukkit.cannons.CannonBukkit; -import at.pavlov.bukkit.container.holders.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; +import at.pavlov.bukkit.container.holders.BukkitBlock; import at.pavlov.bukkit.container.holders.BukkitItemHolder; import at.pavlov.bukkit.container.holders.BukkitSoundHolder; import at.pavlov.bukkit.factory.VectorUtils; diff --git a/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java index f6794eed..49c2f3f0 100644 --- a/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java +++ b/api-internal/src/main/java/at/pavlov/internal/cannons/data/CannonDesign.java @@ -4,8 +4,8 @@ import at.pavlov.internal.cannons.holders.CannonMainDataHolder; import at.pavlov.internal.cannons.holders.CannonPositionHolder; import at.pavlov.internal.container.CannonBlocks; -import at.pavlov.internal.container.holders.ItemHolder; import at.pavlov.internal.container.holders.BlockHolder; +import at.pavlov.internal.container.holders.ItemHolder; import at.pavlov.internal.container.holders.SoundHolder; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.container.location.Coordinate; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index 069b304c..be301ee5 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -1,6 +1,8 @@ package at.pavlov.cannons; import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; +import at.pavlov.bukkit.container.BukkitMovingObject; +import at.pavlov.bukkit.container.BukkitTarget; import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; @@ -11,8 +13,6 @@ import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.bukkit.container.BukkitMovingObject; -import at.pavlov.bukkit.container.BukkitTarget; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.event.CannonLinkAimingEvent; import at.pavlov.cannons.event.CannonTargetEvent; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index ebc9f913..8a3146c0 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -1,13 +1,12 @@ package at.pavlov.cannons; +import at.pavlov.bukkit.container.BukkitDeathCause; import at.pavlov.bukkit.container.holders.BukkitEntityHolder; import at.pavlov.bukkit.container.holders.BukkitSoundHolder; import at.pavlov.bukkit.container.holders.BukkitSpawnMaterialHolder; import at.pavlov.bukkit.factory.CoordinateUtil; -import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.config.Config; -import at.pavlov.bukkit.container.BukkitDeathCause; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.DelayedTask; import at.pavlov.cannons.event.CannonDamageEvent; @@ -24,8 +23,6 @@ import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.ParseUtils; import at.pavlov.cannons.utils.SoundUtils; -import at.pavlov.internal.container.location.CannonVector; -import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.DamageType; import at.pavlov.internal.enums.EntityDataType; import at.pavlov.internal.enums.FakeBlockType; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java index 4319e8dc..17537484 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/TargetManager.java @@ -5,8 +5,6 @@ import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.container.location.Coordinate; import org.bukkit.Location; -import org.bukkit.util.Vector; -import org.jetbrains.annotations.NotNull; import java.util.HashMap; import java.util.HashSet; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java index ebfbee93..14c97af4 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/Cannon.java @@ -2,8 +2,8 @@ import at.pavlov.bukkit.cannons.CannonBukkit; import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; -import at.pavlov.bukkit.container.holders.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; +import at.pavlov.bukkit.container.holders.BukkitBlock; import at.pavlov.bukkit.container.holders.BukkitItemHolder; import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.projectile.BukkitProjectile; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java index c58ab24c..918260b4 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/DesignStorage.java @@ -1,17 +1,17 @@ package at.pavlov.cannons.cannon; import at.pavlov.bukkit.cannons.data.BukkitCannonDesign; -import at.pavlov.bukkit.container.holders.BukkitBlock; import at.pavlov.bukkit.container.BukkitCannonBlocks; +import at.pavlov.bukkit.container.holders.BukkitBlock; import at.pavlov.bukkit.container.holders.BukkitItemHolder; import at.pavlov.bukkit.container.holders.BukkitSoundHolder; import at.pavlov.cannons.Cannons; -import at.pavlov.internal.utils.FileUtils; -import at.pavlov.internal.various.DesignFileName; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.DesignComparator; import at.pavlov.cannons.utils.ParseUtils; import at.pavlov.internal.container.location.CannonVector; +import at.pavlov.internal.utils.FileUtils; +import at.pavlov.internal.various.DesignFileName; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java index fa3100dc..810b392e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/config/UserMessages.java @@ -4,7 +4,6 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.internal.enums.MessageEnum; import at.pavlov.internal.utils.FileUtils; import lombok.Getter; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonTargetEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonTargetEvent.java index 1ec078a1..dc05fe74 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonTargetEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonTargetEvent.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.event; -import at.pavlov.cannons.cannon.Cannon; import at.pavlov.bukkit.container.BukkitTarget; +import at.pavlov.cannons.cannon.Cannon; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/BukkitFlyingProjectile.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/BukkitFlyingProjectile.java index 73e72f11..f18d1b84 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/BukkitFlyingProjectile.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/BukkitFlyingProjectile.java @@ -1,9 +1,9 @@ package at.pavlov.cannons.projectile; +import at.pavlov.bukkit.container.BukkitMovingObject; import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; -import at.pavlov.bukkit.container.BukkitMovingObject; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.ProjectileCause; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java index 3d614bb6..a0ca935e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java @@ -1,8 +1,8 @@ package at.pavlov.cannons.scheduler; +import at.pavlov.bukkit.container.BukkitFakeBlockEntry; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.config.Config; -import at.pavlov.bukkit.container.BukkitFakeBlockEntry; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.internal.enums.FakeBlockType; import lombok.Getter; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index 2bd0cdc0..4d7c0aea 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -11,7 +11,6 @@ import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; import at.pavlov.internal.container.location.CannonVector; -import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.FakeBlockType; import at.pavlov.internal.enums.ProjectileProperties; import io.papermc.lib.PaperLib; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index 437a7aa8..0a82e98e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -1,5 +1,6 @@ package at.pavlov.cannons.utils; +import at.pavlov.bukkit.container.BukkitTarget; import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; @@ -7,7 +8,6 @@ import at.pavlov.cannons.TargetManager; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.bukkit.container.BukkitTarget; import at.pavlov.cannons.projectile.BukkitFlyingProjectile; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.container.location.Coordinate; From 3d6520294272548a17a9d995aa4365e92c052926 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 21 Dec 2024 19:56:27 +0100 Subject: [PATCH 83/97] Move BukkitFlyingProjectile --- .../at/pavlov/bukkit}/projectile/BukkitFlyingProjectile.java | 3 +-- .../src/main/java/at/pavlov/cannons/CreateExplosion.java | 2 +- .../main/java/at/pavlov/cannons/event/CannonDamageEvent.java | 2 +- .../main/java/at/pavlov/cannons/listener/PlayerListener.java | 2 +- .../java/at/pavlov/cannons/projectile/ProjectileManager.java | 1 + .../java/at/pavlov/cannons/scheduler/ProjectileObserver.java | 2 +- .../src/main/java/at/pavlov/cannons/utils/CannonsUtil.java | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-bukkit/src/main/java/at/pavlov/bukkit}/projectile/BukkitFlyingProjectile.java (98%) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/BukkitFlyingProjectile.java b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitFlyingProjectile.java similarity index 98% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/BukkitFlyingProjectile.java rename to api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitFlyingProjectile.java index f18d1b84..82b3ae92 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/BukkitFlyingProjectile.java +++ b/api-bukkit/src/main/java/at/pavlov/bukkit/projectile/BukkitFlyingProjectile.java @@ -1,9 +1,8 @@ -package at.pavlov.cannons.projectile; +package at.pavlov.bukkit.projectile; import at.pavlov.bukkit.container.BukkitMovingObject; import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.factory.VectorUtils; -import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.ProjectileCause; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 8a3146c0..aec0ddad 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -15,7 +15,7 @@ import at.pavlov.cannons.event.ProjectilePiercingEvent; import at.pavlov.cannons.multiversion.EntityTypeResolver; import at.pavlov.cannons.multiversion.EventResolver; -import at.pavlov.cannons.projectile.BukkitFlyingProjectile; +import at.pavlov.bukkit.projectile.BukkitFlyingProjectile; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.scheduler.FakeBlockHandler; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java index bc0f0789..9247e8f9 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/event/CannonDamageEvent.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.event; import at.pavlov.bukkit.factory.CoordinateUtil; -import at.pavlov.cannons.projectile.BukkitFlyingProjectile; +import at.pavlov.bukkit.projectile.BukkitFlyingProjectile; import at.pavlov.internal.enums.DamageType; import org.bukkit.Location; import org.bukkit.entity.LivingEntity; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java index 2c1028c2..9acdd7f2 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java @@ -11,7 +11,7 @@ import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.multiversion.PotionTypeResolver; -import at.pavlov.cannons.projectile.BukkitFlyingProjectile; +import at.pavlov.bukkit.projectile.BukkitFlyingProjectile; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.utils.CannonSelector; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index 7df927c8..ac670ce4 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -1,5 +1,6 @@ package at.pavlov.cannons.projectile; +import at.pavlov.bukkit.projectile.BukkitFlyingProjectile; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index 4d7c0aea..6bec874e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -6,7 +6,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; import at.pavlov.cannons.dao.AsyncTaskManager; -import at.pavlov.cannons.projectile.BukkitFlyingProjectile; +import at.pavlov.bukkit.projectile.BukkitFlyingProjectile; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index 0a82e98e..f926b853 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -8,7 +8,7 @@ import at.pavlov.cannons.TargetManager; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.cannons.projectile.BukkitFlyingProjectile; +import at.pavlov.bukkit.projectile.BukkitFlyingProjectile; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.ProjectileProperties; From 555f7372ed06d4481723f157fd47ff157f061e76 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 21 Dec 2024 20:03:27 +0100 Subject: [PATCH 84/97] Move dependency --- api-bukkit/pom.xml | 10 ++++++++++ cannons-bukkit/pom.xml | 6 ------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/api-bukkit/pom.xml b/api-bukkit/pom.xml index 44dd3c76..a10a0b06 100644 --- a/api-bukkit/pom.xml +++ b/api-bukkit/pom.xml @@ -16,6 +16,10 @@ + + papermc + https://papermc.io/repo/repository/maven-public/ + spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ @@ -35,6 +39,12 @@ 1.21.1-R0.1-SNAPSHOT provided + + io.papermc + paperlib + 1.0.7 + compile + diff --git a/cannons-bukkit/pom.xml b/cannons-bukkit/pom.xml index fe42837b..fe7ffdd2 100644 --- a/cannons-bukkit/pom.xml +++ b/cannons-bukkit/pom.xml @@ -126,12 +126,6 @@ acf-paper 0.5.1-SNAPSHOT - - io.papermc - paperlib - 1.0.7 - compile - net.countercraft movecraft From 621fd4326324d5f507b9d1f23519facd5950a991 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 21 Dec 2024 20:33:19 +0100 Subject: [PATCH 85/97] Cleanup dao --- .../pavlov/cannons/cannon/CannonManager.java | 4 +- .../pavlov/cannons/dao/CreateTableTask.java | 3 +- .../cannons/dao/wrappers/FireTaskWrapper.java | 46 ++----------- .../dao/wrappers/RemoveTaskWrapper.java | 64 ++----------------- 4 files changed, 13 insertions(+), 104 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 2bd7d331..2f429be8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -215,7 +215,7 @@ public void run(Object object) { } } - MessageEnum message = cannon.destroyCannon(task.breakCannon(), task.canExplode(), cause); + MessageEnum message = cannon.destroyCannon(task.isBreakCannon(), task.isCanExplode(), cause); if (player != null) userMessages.sendMessage(message, player, cannon); @@ -230,7 +230,7 @@ public void run(Object object) { Aiming.getInstance().removeCannon(cannon); //remove entry - if (task.removeEntry()) + if (task.isRemoveEntry()) cannonList.remove(cannon.getUID()); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java index c7a47253..81c58c8f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java @@ -1,11 +1,10 @@ package at.pavlov.cannons.dao; import at.pavlov.cannons.Cannons; -import org.bukkit.scheduler.BukkitRunnable; import java.sql.Statement; -public class CreateTableTask extends BukkitRunnable { +public class CreateTableTask implements Runnable { @Override public void run() { String sql1 = String.format("CREATE TABLE IF NOT EXISTS %s (" + diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java index 08c74e4c..7e527382 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/FireTaskWrapper.java @@ -2,49 +2,15 @@ import at.pavlov.cannons.cannon.Cannon; import at.pavlov.internal.enums.ProjectileCause; +import lombok.AllArgsConstructor; +import lombok.Data; import java.util.UUID; - -public class FireTaskWrapper{ - private Cannon cannon; +@AllArgsConstructor +@Data public class FireTaskWrapper { + private Cannon cannon; private UUID player; private boolean removeCharge; - private ProjectileCause projectileCause; - - public FireTaskWrapper(Cannon cannon, UUID player, boolean removeCharge, ProjectileCause projectileCause) - { - this.cannon = cannon; - this.player = player; - this.removeCharge = removeCharge; - this.projectileCause = projectileCause; - } - - public Cannon getCannon() { - return cannon; - } - - public void setCannon(Cannon cannon) { - this.cannon = cannon; - } - - public UUID getPlayer() { - return player; - } - - public void setPlayer(UUID player) { - this.player = player; - } - - public boolean isRemoveCharge() { - return removeCharge; - } - - public void setRemoveCharge(boolean removeCharge) { - this.removeCharge = removeCharge; - } - - public ProjectileCause getProjectileCause() { - return projectileCause; - } + private final ProjectileCause projectileCause; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java index 35390f4b..f264b5c2 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/wrappers/RemoveTaskWrapper.java @@ -2,71 +2,15 @@ import at.pavlov.cannons.cannon.Cannon; import at.pavlov.internal.enums.BreakCause; +import lombok.AllArgsConstructor; +import lombok.Data; - -public class RemoveTaskWrapper { +@AllArgsConstructor +@Data public class RemoveTaskWrapper { private Cannon cannon; private boolean breakCannon; private boolean canExplode; private BreakCause cause; private boolean removeEntry; private boolean ignoreInvalid; - - public RemoveTaskWrapper(Cannon cannon, boolean breakCannon, boolean canExplode, BreakCause cause, boolean removeEntry, boolean ignoreInvalid) - { - this.cannon = cannon; - this.breakCannon = breakCannon; - this.canExplode = canExplode; - this.cause = cause; - this.removeEntry = removeEntry; - this.ignoreInvalid = ignoreInvalid; - } - - public Cannon getCannon() { - return cannon; - } - - public void setCannon(Cannon cannon) { - this.cannon = cannon; - } - - public boolean breakCannon() { - return breakCannon; - } - - public void setBreakCannon(boolean breakCannon) { - this.breakCannon = breakCannon; - } - - public boolean canExplode() { - return canExplode; - } - - public void setCanExplode(boolean canExplode) { - this.canExplode = canExplode; - } - - public BreakCause getCause() { - return cause; - } - - public void setCause(BreakCause cause) { - this.cause = cause; - } - - public boolean removeEntry() { - return removeEntry; - } - - public void setRemoveEntry(boolean removeEntry) { - this.removeEntry = removeEntry; - } - - public boolean ignoreInvalid() { - return ignoreInvalid; - } - - public void setIgnoreInvalid(boolean ignoreInvalid) { - this.ignoreInvalid = ignoreInvalid; - } } From a6157bccfe7434fb8fb98d678226a8bb567b3fa3 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 21 Dec 2024 20:37:51 +0100 Subject: [PATCH 86/97] Beautify --- .../pavlov/cannons/dao/DeleteCannonTask.java | 8 +- .../pavlov/cannons/dao/LoadWhitelistTask.java | 8 +- .../cannons/dao/PersistenceDatabase.java | 125 +++++++++--------- .../at/pavlov/cannons/dao/SaveCannonTask.java | 47 +++---- 4 files changed, 93 insertions(+), 95 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java index 2384bced..ef66ed7a 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java @@ -29,13 +29,11 @@ public DeleteCannonTask(UUID playerId, boolean player) { @Override public void run() { try (Statement statement = Cannons.getPlugin().getConnection().createStatement()) { - if (cannonId == null && playerId == null){ + if (cannonId == null && playerId == null) { statement.executeUpdate(String.format("DELETE FROM %s", Cannons.getPlugin().getCannonDatabase())); - } - else if (cannonId != null) { + } else if (cannonId != null) { statement.executeUpdate(String.format("DELETE FROM %s WHERE id='%s'", Cannons.getPlugin().getCannonDatabase(), cannonId)); - } - else{ + } else { statement.executeUpdate(String.format("DELETE FROM %s WHERE owner='%s'", Cannons.getPlugin().getCannonDatabase(), playerId)); } } catch (Exception e) { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java index e50ac5c6..ff1a415f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java @@ -10,9 +10,9 @@ import java.util.UUID; public class LoadWhitelistTask implements RunnableAsync { - private UUID cannonId; + private final UUID cannonId; - public LoadWhitelistTask(UUID cannonId){ + public LoadWhitelistTask(UUID cannonId) { this.cannonId = cannonId; } @@ -25,12 +25,12 @@ public void run() { ); Cannon cannon = CannonManager.getCannon(cannonId); - if (cannon == null){ + if (cannon == null) { return; } while (rs.next()) { - if (rs.getString("player") !=null) + if (rs.getString("player") != null) cannon.addWhitelistPlayer(UUID.fromString(rs.getString("player"))); } rs.close(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java index 93c4120e..5d94a135 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java @@ -7,86 +7,85 @@ import java.util.UUID; import java.util.concurrent.Future; -public class PersistenceDatabase -{ - private Cannons plugin; - private Future saveTask = null; +public class PersistenceDatabase { + private final Cannons plugin; + private Future saveTask = null; - public PersistenceDatabase(Cannons _plugin) - { - plugin = _plugin; - } + public PersistenceDatabase(Cannons _plugin) { + plugin = _plugin; + } - public void createTables() { - CreateTableTask createTableTask = new CreateTableTask(); - createTableTask.run(); - } + public void createTables() { + CreateTableTask createTableTask = new CreateTableTask(); + createTableTask.run(); + } /** * loads all cannons from the database * * @return true if loading was successful */ - public void loadCannons() { - if (!plugin.hasConnection()) { + public void loadCannons() { + if (!plugin.hasConnection()) { plugin.logSevere("No connection to database"); return; } - CannonManager.getInstance().clearCannonList(); + CannonManager.getInstance().clearCannonList(); - LoadCannonTask task = new LoadCannonTask(); - task.runTaskAsynchronously(); - } + LoadCannonTask task = new LoadCannonTask(); + task.runTaskAsynchronously(); + } - public void saveAllCannons(boolean async) { - if (!plugin.hasConnection()) { - plugin.logSevere("No connection to database"); - return; - } - SaveCannonTask saveCannonTask = new SaveCannonTask(); - if (async) - saveTask = saveCannonTask.runTaskAsynchronously(); - else - saveCannonTask.run(); + public void saveAllCannons(boolean async) { + if (!plugin.hasConnection()) { + plugin.logSevere("No connection to database"); + return; + } + SaveCannonTask saveCannonTask = new SaveCannonTask(); + if (async) { + saveTask = saveCannonTask.runTaskAsynchronously(); + } else { + saveCannonTask.run(); + } } - public void saveCannon(Cannon cannon){ - if (!plugin.hasConnection()) { - plugin.logSevere("No connection to database"); - return; - } - SaveCannonTask saveCannonTask = new SaveCannonTask(cannon.getUID()); - saveTask = saveCannonTask.runTaskAsynchronously(); - } + public void saveCannon(Cannon cannon) { + if (!plugin.hasConnection()) { + plugin.logSevere("No connection to database"); + return; + } + SaveCannonTask saveCannonTask = new SaveCannonTask(cannon.getUID()); + saveTask = saveCannonTask.runTaskAsynchronously(); + } - public boolean isSaveTaskRunning() { - return saveTask != null && !saveTask.isDone(); - } + public boolean isSaveTaskRunning() { + return saveTask != null && !saveTask.isDone(); + } - public void deleteCannon(UUID cannon_id){ - if (!plugin.hasConnection()) { - plugin.logSevere("No connection to database"); - return; - } - DeleteCannonTask deleteCannonTask = new DeleteCannonTask(cannon_id); - deleteCannonTask.runTaskAsynchronously(); - } + public void deleteCannon(UUID cannon_id) { + if (!plugin.hasConnection()) { + plugin.logSevere("No connection to database"); + return; + } + DeleteCannonTask deleteCannonTask = new DeleteCannonTask(cannon_id); + deleteCannonTask.runTaskAsynchronously(); + } - public void deleteAllCannons(){ - if (!plugin.hasConnection()) { - plugin.logSevere("No connection to database"); - return; - } - DeleteCannonTask deleteCannonTask = new DeleteCannonTask(); - deleteCannonTask.runTaskAsynchronously(); - } + public void deleteAllCannons() { + if (!plugin.hasConnection()) { + plugin.logSevere("No connection to database"); + return; + } + DeleteCannonTask deleteCannonTask = new DeleteCannonTask(); + deleteCannonTask.runTaskAsynchronously(); + } - public void deleteCannons(UUID player_id){ - if (!plugin.hasConnection()) { - plugin.logSevere("No connection to database"); - return; - } - DeleteCannonTask deleteCannonTask = new DeleteCannonTask(player_id, true); - deleteCannonTask.runTaskAsynchronously(); - } + public void deleteCannons(UUID player_id) { + if (!plugin.hasConnection()) { + plugin.logSevere("No connection to database"); + return; + } + DeleteCannonTask deleteCannonTask = new DeleteCannonTask(player_id, true); + deleteCannonTask.runTaskAsynchronously(); + } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java index 60885bee..c09b524b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java @@ -12,11 +12,12 @@ public class SaveCannonTask implements RunnableAsync { private final UUID cannonId; - public SaveCannonTask(UUID cannonId){ + + public SaveCannonTask(UUID cannonId) { this.cannonId = cannonId; } - public SaveCannonTask(){ + public SaveCannonTask() { this.cannonId = null; } @@ -27,8 +28,8 @@ public void run() { return; String insert = String.format("REPLACE INTO %s " + - "(id, name, owner, world, cannon_direction, loc_x, loc_y, loc_Z, soot, gunpowder, projectile_id, projectile_pushed, cannon_temperature, cannon_temperature_timestamp, horizontal_angle, vertical_angle, design_id, fired_cannonballs, target_mob, target_player, target_cannon, target_other, paid) VALUES" + - "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" + "(id, name, owner, world, cannon_direction, loc_x, loc_y, loc_Z, soot, gunpowder, projectile_id, projectile_pushed, cannon_temperature, cannon_temperature_timestamp, horizontal_angle, vertical_angle, design_id, fired_cannonballs, target_mob, target_player, target_cannon, target_other, paid) VALUES" + + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" , Cannons.getPlugin().getCannonDatabase()); try (PreparedStatement preparedStatement = Cannons.getPlugin().getConnection().prepareStatement(insert)) { Cannons.getPlugin().logDebug("save Task start"); @@ -63,47 +64,47 @@ public void run() { preparedStatement.setString(3, cannon.getOwner().toString()); preparedStatement.setString(4, cannon.getWorld().toString()); // cannon direction - preparedStatement.setString(5,cannon.getCannonDirection().toString()); + preparedStatement.setString(5, cannon.getCannonDirection().toString()); // save offset - preparedStatement.setInt(6,cannon.getOffset().getBlockX()); - preparedStatement.setInt(7,cannon.getOffset().getBlockY()); - preparedStatement.setInt(8,cannon.getOffset().getBlockZ()); + preparedStatement.setInt(6, cannon.getOffset().getBlockX()); + preparedStatement.setInt(7, cannon.getOffset().getBlockY()); + preparedStatement.setInt(8, cannon.getOffset().getBlockZ()); // must the barrel be clean with the ramrod - preparedStatement.setDouble(9,cannon.getSoot()); + preparedStatement.setDouble(9, cannon.getSoot()); // amount of gunpowder - preparedStatement.setInt(10,cannon.getLoadedGunpowder()); + preparedStatement.setInt(10, cannon.getLoadedGunpowder()); // load projectile // if no projectile is found, set it to air BukkitProjectile projectile = cannon.getLoadedProjectile(); if (projectile != null) { - preparedStatement.setString(11,projectile.getProjectileID()); + preparedStatement.setString(11, projectile.getProjectileID()); } else { - preparedStatement.setString(11,"none"); + preparedStatement.setString(11, "none"); } //is the projectile already pushed in the barrel - preparedStatement.setInt(12,cannon.getProjectilePushed()); + preparedStatement.setInt(12, cannon.getProjectilePushed()); //temperature - preparedStatement.setDouble(13,cannon.getTemperature(false)); - preparedStatement.setLong(14,cannon.getTemperatureTimeStamp()); + preparedStatement.setDouble(13, cannon.getTemperature(false)); + preparedStatement.setLong(14, cannon.getTemperatureTimeStamp()); // angles - preparedStatement.setDouble(15,cannon.getHorizontalAngle()); - preparedStatement.setDouble(16,cannon.getVerticalAngle()); + preparedStatement.setDouble(15, cannon.getHorizontalAngle()); + preparedStatement.setDouble(16, cannon.getVerticalAngle()); // id - preparedStatement.setString(17,cannon.getDesignID()); + preparedStatement.setString(17, cannon.getDesignID()); //load fired cannonballs - preparedStatement.setLong(18,cannon.getFiredCannonballs()); + preparedStatement.setLong(18, cannon.getFiredCannonballs()); //save targets preparedStatement.setBoolean(19, cannon.isTargetMob()); - preparedStatement.setBoolean(20,cannon.isTargetPlayer()); - preparedStatement.setBoolean(21,cannon.isTargetCannon()); - preparedStatement.setBoolean(22,cannon.isTargetOther()); + preparedStatement.setBoolean(20, cannon.isTargetPlayer()); + preparedStatement.setBoolean(21, cannon.isTargetCannon()); + preparedStatement.setBoolean(22, cannon.isTargetOther()); //save paid fee - preparedStatement.setBoolean(23,cannon.isPaid()); + preparedStatement.setBoolean(23, cannon.isPaid()); preparedStatement.addBatch(); } From 5c41b9e4705c47076556b85deb73710def5863b0 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 21 Dec 2024 21:52:09 +0100 Subject: [PATCH 87/97] Refactor DelayedTask --- .../at/pavlov/cannons/CreateExplosion.java | 23 +++++++------------ .../java/at/pavlov/cannons/FireCannon.java | 5 ++-- .../pavlov/cannons/cannon/CannonManager.java | 5 ++-- .../at/pavlov/cannons/dao/DelayedTask.java | 8 +++---- .../cannons/projectile/ProjectileManager.java | 4 ++-- 5 files changed, 18 insertions(+), 27 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index aec0ddad..d6aafb37 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -945,10 +945,9 @@ private void clusterExplosions(BukkitFlyingProjectile cannonball) { Location loc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); taskManager.scheduler.runTaskLater(loc, - new DelayedTask(cannonball) { + new DelayedTask<>(cannonball) { @Override - public void run(Object object) { - BukkitFlyingProjectile cannonball = (BukkitFlyingProjectile) object; + public void run(BukkitFlyingProjectile cannonball) { BukkitProjectile proj = cannonball.getProjectile(); Location expLoc = CannonsUtil.randomPointInSphere( @@ -1115,11 +1114,9 @@ private boolean deflectProjectile(BukkitFlyingProjectile cannonball) { Location baseImpactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); Location impactLoc = baseImpactLoc.subtract(subVector); - taskManager.scheduler.runTaskLater(impactLoc, new DelayedTask(cannonball) { + taskManager.scheduler.runTaskLater(impactLoc, new DelayedTask<>(cannonball) { @Override - public void run(Object object) { - BukkitFlyingProjectile cannonball = (BukkitFlyingProjectile) object; - + public void run(BukkitFlyingProjectile cannonball) { BukkitProjectile projectile = cannonball.getProjectile(); /* @@ -1155,14 +1152,11 @@ private void spawnProjectiles(BukkitFlyingProjectile cannonball) { return; Location impactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); - taskManager.scheduler.runTaskLater(impactLoc, new DelayedTask(cannonball) { + taskManager.scheduler.runTaskLater(impactLoc, new DelayedTask<>(cannonball) { @Override - public void run(Object object) { - BukkitFlyingProjectile cannonball = (BukkitFlyingProjectile) object; - + public void run(BukkitFlyingProjectile cannonball) { BukkitProjectile projectile = cannonball.getProjectile(); - for (String strProj : projectile.getSpawnProjectiles()) { BukkitProjectile newProjectiles = ProjectileStorage.getInstance().getByName(strProj); if (newProjectiles == null) { @@ -1212,10 +1206,9 @@ private void spawnFireworks(BukkitFlyingProjectile cannonball, org.bukkit.entity // detonate firework after 1tick. This seems to works much better than // detonating instantaneously - taskManager.scheduler.runTaskLater(fw, new DelayedTask(fw) { + taskManager.scheduler.runTaskLater(fw, new DelayedTask<>(fw) { @Override - public void run(Object object) { - Firework fw = (Firework) object; + public void run(Firework object) { fw.detonate(); } }, 1L); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index ac016fbe..6cdf31e8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -306,9 +306,8 @@ public MessageEnum fire(Cannon cannon, UUID playerUid, boolean autoload, boolean double randomess = 1. + design.getFuseBurnTimeRandomness() * random.nextDouble(); long delayTime = (long) (randomess * design.getFuseBurnTime() * 20.0 + i * projectile.getAutomaticFiringDelay() * 20.0); FireTaskWrapper fireTask = new FireTaskWrapper(cannon, playerUid, lastRound, projectileCause); - scheduler.runTaskLater(cannon.getLocation(), new DelayedTask(fireTask) { - public void run(Object object) { - FireTaskWrapper fireTask = (FireTaskWrapper) object; + scheduler.runTaskLater(cannon.getLocation(), new DelayedTask<>(fireTask) { + public void run(FireTaskWrapper fireTask) { fireTask(fireTask.getCannon(), fireTask.getPlayer(), fireTask.isRemoveCharge(), projectileCause); } }, delayTime); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 2f429be8..dc92442f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -192,9 +192,8 @@ public void removeCannon(Cannon cannon, boolean breakCannon, boolean canExplode, //delay the remove task, so it fits to the sound RemoveTaskWrapper task = new RemoveTaskWrapper(cannon, breakCannon, canExplode, cause, removeEntry, ignoreInvalid); - AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask(task) { - public void run(Object object) { - RemoveTaskWrapper task = (RemoveTaskWrapper) object; + AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask<>(task) { + public void run(RemoveTaskWrapper task) { Cannon cannon = task.getCannon(); BreakCause cause = task.getCause(); UUID owner = cannon.getOwner(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DelayedTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DelayedTask.java index 3ef4a07f..c12c3cca 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DelayedTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DelayedTask.java @@ -1,9 +1,9 @@ package at.pavlov.cannons.dao; -public abstract class DelayedTask implements Runnable { - private final Object wrapper; +public abstract class DelayedTask implements Runnable { + private final Wrapped wrapper; - public DelayedTask(Object wrapper) { + public DelayedTask(Wrapped wrapper) { this.wrapper = wrapper; } @@ -12,5 +12,5 @@ public final void run() { run(wrapper); } - public abstract void run(Object wrapper2); + public abstract void run(Wrapped wrapper2); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index ac670ce4..efae0195 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -95,8 +95,8 @@ private void detonateTimefuse(final BukkitFlyingProjectile cannonball) { } //Delayed Task - AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask(cannonball.getEntityUID()) { - public void run(Object object) { + AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask<>(cannonball.getEntityUID()) { + public void run(UUID object) { //find given UID in list BukkitFlyingProjectile fproj = flyingProjectilesMap.get(object); From c079c77068306f0819ba47c2b18ac503a9084751 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 21 Dec 2024 22:00:26 +0100 Subject: [PATCH 88/97] Refactor CreateTableTask --- .../main/java/at/pavlov/internal/CannonDatabase.java | 9 +++++++++ .../src/main/java/at/pavlov/cannons/Cannons.java | 3 ++- .../java/at/pavlov/cannons/dao/CreateTableTask.java | 12 ++++++++---- .../at/pavlov/cannons/dao/PersistenceDatabase.java | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 api-internal/src/main/java/at/pavlov/internal/CannonDatabase.java diff --git a/api-internal/src/main/java/at/pavlov/internal/CannonDatabase.java b/api-internal/src/main/java/at/pavlov/internal/CannonDatabase.java new file mode 100644 index 00000000..54d54faf --- /dev/null +++ b/api-internal/src/main/java/at/pavlov/internal/CannonDatabase.java @@ -0,0 +1,9 @@ +package at.pavlov.internal; + +import java.sql.Connection; + +public interface CannonDatabase { + String getWhitelistDatabase(); + String getCannonDatabase(); + Connection getConnection(); +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java index fb919263..308fbc45 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java @@ -25,6 +25,7 @@ import at.pavlov.cannons.scheduler.FakeBlockHandler; import at.pavlov.cannons.scheduler.ProjectileObserver; import at.pavlov.cannons.utils.CannonSelector; +import at.pavlov.internal.CannonDatabase; import at.pavlov.internal.CannonLogger; import at.pavlov.internal.ModrinthUpdateChecker; import at.pavlov.internal.enums.MessageEnum; @@ -51,7 +52,7 @@ import java.util.Map; import java.util.logging.Logger; -public final class Cannons extends JavaPlugin +public final class Cannons extends JavaPlugin implements CannonDatabase { private PluginManager pm; private final Logger logger = Logger.getLogger("Minecraft"); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java index 81c58c8f..669b5602 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java @@ -1,10 +1,14 @@ package at.pavlov.cannons.dao; -import at.pavlov.cannons.Cannons; +import at.pavlov.internal.CannonDatabase; +import lombok.AllArgsConstructor; import java.sql.Statement; +@AllArgsConstructor public class CreateTableTask implements Runnable { + private final CannonDatabase cannonDatabase; + @Override public void run() { String sql1 = String.format("CREATE TABLE IF NOT EXISTS %s (" + @@ -31,7 +35,7 @@ public void run() { "target_cannon BOOLEAN," + "target_other BOOLEAN," + "paid BOOLEAN)" - , Cannons.getPlugin().getCannonDatabase()); + , cannonDatabase.getCannonDatabase()); String sql2 = String.format("CREATE TABLE IF NOT EXISTS %s (" + "cannon_bean_id VARCHAR(40) NOT NULL," + "player VARCHAR(40) NOT NULL," + @@ -40,8 +44,8 @@ public void run() { "ON UPDATE CASCADE " + "ON DELETE CASCADE" + ")" - , Cannons.getPlugin().getWhitelistDatabase(), Cannons.getPlugin().getCannonDatabase()); - try (Statement statement = Cannons.getPlugin().getConnection().createStatement()) { + , cannonDatabase.getWhitelistDatabase(), cannonDatabase.getCannonDatabase()); + try (Statement statement = cannonDatabase.getConnection().createStatement()) { statement.execute(sql1); statement.execute(sql2); } catch (Exception e) { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java index 5d94a135..134c3a60 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java @@ -16,7 +16,7 @@ public PersistenceDatabase(Cannons _plugin) { } public void createTables() { - CreateTableTask createTableTask = new CreateTableTask(); + CreateTableTask createTableTask = new CreateTableTask(plugin); createTableTask.run(); } From 2e317c3bcda6445b693e7d491aee824fdee296f4 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 21 Dec 2024 22:05:47 +0100 Subject: [PATCH 89/97] Remove DelayedTask after all it is useless, just currying up runnables is better --- .../at/pavlov/cannons/CreateExplosion.java | 95 ++++++++----------- .../java/at/pavlov/cannons/FireCannon.java | 11 +-- .../pavlov/cannons/cannon/CannonManager.java | 73 +++++++------- .../at/pavlov/cannons/dao/DelayedTask.java | 16 ---- .../cannons/projectile/ProjectileManager.java | 28 +++--- 5 files changed, 92 insertions(+), 131 deletions(-) delete mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DelayedTask.java diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index d6aafb37..9d600ad2 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -8,7 +8,6 @@ import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.dao.AsyncTaskManager; -import at.pavlov.cannons.dao.DelayedTask; import at.pavlov.cannons.event.CannonDamageEvent; import at.pavlov.cannons.event.CannonsEntityDeathEvent; import at.pavlov.cannons.event.ProjectileImpactEvent; @@ -945,9 +944,7 @@ private void clusterExplosions(BukkitFlyingProjectile cannonball) { Location loc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); taskManager.scheduler.runTaskLater(loc, - new DelayedTask<>(cannonball) { - @Override - public void run(BukkitFlyingProjectile cannonball) { + () -> { BukkitProjectile proj = cannonball.getProjectile(); Location expLoc = CannonsUtil.randomPointInSphere( @@ -962,8 +959,7 @@ public void run(BukkitFlyingProjectile cannonball) { CreateExplosion.this.sendExplosionToPlayers(null, expLoc, projectile.getSoundImpact()); } - } - }, (long) (delay * 20.0) + }, (long) (delay * 20.0) ); } } @@ -1114,29 +1110,26 @@ private boolean deflectProjectile(BukkitFlyingProjectile cannonball) { Location baseImpactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); Location impactLoc = baseImpactLoc.subtract(subVector); - taskManager.scheduler.runTaskLater(impactLoc, new DelayedTask<>(cannonball) { - @Override - public void run(BukkitFlyingProjectile cannonball) { - BukkitProjectile projectile = cannonball.getProjectile(); + taskManager.scheduler.runTaskLater(impactLoc, () -> { + BukkitProjectile projectile = cannonball.getProjectile(); - /* - Location impactBlock = cannonball.getImpactBlock(); - Vector vnormal = CannonsUtil.detectImpactSurfaceNormal(cannonball.getImpactLocation().toVector(), - cannonball.getVelocity().clone()); + /* + Location impactBlock = cannonball.getImpactBlock(); + Vector vnormal = CannonsUtil.detectImpactSurfaceNormal(cannonball.getImpactLocation().toVector(), + cannonball.getVelocity().clone()); - */ + */ - Vector vectdeflect = cannonball.getVelocity().multiply(.5); - // vectdeflect.add(new - // Vector(vectdeflect.length()*r.nextGaussian()*0.2,vectdeflect.length()*r.nextGaussian()*0.2,vectdeflect.length()*r.nextGaussian()*0.2)); - vectdeflect.setY(-vectdeflect.getY()); - CreateExplosion.this.plugin.logDebug("Deflect projectile: " + vectdeflect); + Vector vectdeflect1 = cannonball.getVelocity().multiply(.5); + // vectdeflect.add(new + // Vector(vectdeflect.length()*r.nextGaussian()*0.2,vectdeflect.length()*r.nextGaussian()*0.2,vectdeflect.length()*r.nextGaussian()*0.2)); + vectdeflect1.setY(-vectdeflect1.getY()); + CreateExplosion.this.plugin.logDebug("Deflect projectile: " + vectdeflect1); - ProjectileManager.getInstance().spawnProjectile(projectile, - cannonball.getShooterUID(), cannonball.getSource(), - CoordinateUtil.toLoc(cannonball.getPlayerlocation()), - impactLoc.clone(), vectdeflect, cannonball.getCannonUID(), ProjectileCause.DeflectedProjectile); - } + ProjectileManager.getInstance().spawnProjectile(projectile, + cannonball.getShooterUID(), cannonball.getSource(), + CoordinateUtil.toLoc(cannonball.getPlayerlocation()), + impactLoc.clone(), vectdeflect1, cannonball.getCannonUID(), ProjectileCause.DeflectedProjectile); }, 1L); return true; @@ -1152,30 +1145,27 @@ private void spawnProjectiles(BukkitFlyingProjectile cannonball) { return; Location impactLoc = CoordinateUtil.toLoc(cannonball.getImpactLocation()); - taskManager.scheduler.runTaskLater(impactLoc, new DelayedTask<>(cannonball) { - @Override - public void run(BukkitFlyingProjectile cannonball) { - BukkitProjectile projectile = cannonball.getProjectile(); - - for (String strProj : projectile.getSpawnProjectiles()) { - BukkitProjectile newProjectiles = ProjectileStorage.getInstance().getByName(strProj); - if (newProjectiles == null) { - CreateExplosion.this.plugin.logSevere( - "Can't use spawnProjectile " + strProj + " because Projectile does not exist"); - continue; - } - - for (int i = 0; i < newProjectiles.getNumberOfBullets(); i++) { - Vector vect = new Vector(r.nextDouble() - 0.5, r.nextDouble() - 0.5, r.nextDouble() - 0.5); - vect = vect.normalize().multiply(newProjectiles.getVelocity()); - - // don't spawn the projectile in the center - Location spawnLoc = impactLoc.clone().add(vect.clone().normalize().multiply(3.0)); - - ProjectileManager.getInstance().spawnProjectile(newProjectiles, - cannonball.getShooterUID(), cannonball.getSource(), null, spawnLoc, vect, - cannonball.getCannonUID(), ProjectileCause.SpawnedProjectile); - } + taskManager.scheduler.runTaskLater(impactLoc, () -> { + BukkitProjectile projectile = cannonball.getProjectile(); + + for (String strProj : projectile.getSpawnProjectiles()) { + BukkitProjectile newProjectiles = ProjectileStorage.getInstance().getByName(strProj); + if (newProjectiles == null) { + CreateExplosion.this.plugin.logSevere( + "Can't use spawnProjectile " + strProj + " because Projectile does not exist"); + continue; + } + + for (int i = 0; i < newProjectiles.getNumberOfBullets(); i++) { + Vector vect = new Vector(r.nextDouble() - 0.5, r.nextDouble() - 0.5, r.nextDouble() - 0.5); + vect = vect.normalize().multiply(newProjectiles.getVelocity()); + + // don't spawn the projectile in the center + Location spawnLoc = impactLoc.clone().add(vect.clone().normalize().multiply(3.0)); + + ProjectileManager.getInstance().spawnProjectile(newProjectiles, + cannonball.getShooterUID(), cannonball.getSource(), null, spawnLoc, vect, + cannonball.getCannonUID(), ProjectileCause.SpawnedProjectile); } } }, 1L); @@ -1206,12 +1196,7 @@ private void spawnFireworks(BukkitFlyingProjectile cannonball, org.bukkit.entity // detonate firework after 1tick. This seems to works much better than // detonating instantaneously - taskManager.scheduler.runTaskLater(fw, new DelayedTask<>(fw) { - @Override - public void run(Firework object) { - fw.detonate(); - } - }, 1L); + taskManager.scheduler.runTaskLater(fw, fw::detonate, 1L); } /** diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index 6cdf31e8..e2e8e705 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -8,7 +8,6 @@ import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.dao.AsyncTaskManager; -import at.pavlov.cannons.dao.DelayedTask; import at.pavlov.cannons.dao.wrappers.FireTaskWrapper; import at.pavlov.cannons.event.CannonFireEvent; import at.pavlov.cannons.event.CannonLinkFiringEvent; @@ -305,12 +304,10 @@ public MessageEnum fire(Cannon cannon, UUID playerUid, boolean autoload, boolean boolean lastRound = i == (projectile.getAutomaticFiringMagazineSize() - 1); double randomess = 1. + design.getFuseBurnTimeRandomness() * random.nextDouble(); long delayTime = (long) (randomess * design.getFuseBurnTime() * 20.0 + i * projectile.getAutomaticFiringDelay() * 20.0); - FireTaskWrapper fireTask = new FireTaskWrapper(cannon, playerUid, lastRound, projectileCause); - scheduler.runTaskLater(cannon.getLocation(), new DelayedTask<>(fireTask) { - public void run(FireTaskWrapper fireTask) { - fireTask(fireTask.getCannon(), fireTask.getPlayer(), fireTask.isRemoveCharge(), projectileCause); - } - }, delayTime); + final FireTaskWrapper fireTask = new FireTaskWrapper(cannon, playerUid, lastRound, projectileCause); + scheduler.runTaskLater(cannon.getLocation(), () -> + fireTask(fireTask.getCannon(), fireTask.getPlayer(), fireTask.isRemoveCharge(), projectileCause), + delayTime); } } catch (Exception e) { e.printStackTrace(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index dc92442f..2764b4c7 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -10,7 +10,6 @@ import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.dao.AsyncTaskManager; -import at.pavlov.cannons.dao.DelayedTask; import at.pavlov.cannons.dao.LoadWhitelistTask; import at.pavlov.cannons.dao.wrappers.RemoveTaskWrapper; import at.pavlov.cannons.event.CannonAfterCreateEvent; @@ -191,48 +190,46 @@ public void removeCannon(Cannon cannon, boolean breakCannon, boolean canExplode, } //delay the remove task, so it fits to the sound - RemoveTaskWrapper task = new RemoveTaskWrapper(cannon, breakCannon, canExplode, cause, removeEntry, ignoreInvalid); - AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask<>(task) { - public void run(RemoveTaskWrapper task) { - Cannon cannon = task.getCannon(); - BreakCause cause = task.getCause(); - UUID owner = cannon.getOwner(); - - // send message to the owner - Player player = null; - if (owner != null) { - player = Bukkit.getPlayer(owner); - - OfflinePlayer offplayer = Bukkit.getOfflinePlayer(owner); - // return message - if (offplayer.hasPlayedBefore() && plugin.getEconomy() != null && cannon.isPaid()) { - double funds = switch (cause) { - case OTHER, DISMANTLING -> cannon.getCannonDesign().getEconomyDismantlingRefund(); - default -> cannon.getCannonDesign().getEconomyDestructionRefund(); - }; - plugin.getEconomy().depositPlayer(offplayer, funds); - } + final RemoveTaskWrapper removeTaskWrapper = new RemoveTaskWrapper(cannon, breakCannon, canExplode, cause, removeEntry, ignoreInvalid); + AsyncTaskManager.get().scheduler.runTaskLater(() -> { + Cannon cannon1 = removeTaskWrapper.getCannon(); + BreakCause cause1 = removeTaskWrapper.getCause(); + UUID owner = cannon1.getOwner(); + + // send message to the owner + Player player = null; + if (owner != null) { + player = Bukkit.getPlayer(owner); + + OfflinePlayer offplayer = Bukkit.getOfflinePlayer(owner); + // return message + if (offplayer.hasPlayedBefore() && plugin.getEconomy() != null && cannon1.isPaid()) { + double funds = switch (cause1) { + case OTHER, DISMANTLING -> cannon1.getCannonDesign().getEconomyDismantlingRefund(); + default -> cannon1.getCannonDesign().getEconomyDestructionRefund(); + }; + plugin.getEconomy().depositPlayer(offplayer, funds); } + } - MessageEnum message = cannon.destroyCannon(task.isBreakCannon(), task.isCanExplode(), cause); - if (player != null) - userMessages.sendMessage(message, player, cannon); + MessageEnum message = cannon1.destroyCannon(removeTaskWrapper.isBreakCannon(), removeTaskWrapper.isCanExplode(), cause1); + if (player != null) + userMessages.sendMessage(message, player, cannon1); - //remove from database - plugin.getPersistenceDatabase().deleteCannon(cannon.getUID()); - //remove cannon name - cannonNameMap.remove(cannon.getCannonName()); - //remove sentry - if (cannon.getCannonDesign().isSentry()) - Aiming.getInstance().removeSentryCannon(cannon.getUID()); - //remove all entries for this cannon in the aiming class - Aiming.getInstance().removeCannon(cannon); + //remove from database + plugin.getPersistenceDatabase().deleteCannon(cannon1.getUID()); + //remove cannon name + cannonNameMap.remove(cannon1.getCannonName()); + //remove sentry + if (cannon1.getCannonDesign().isSentry()) + Aiming.getInstance().removeSentryCannon(cannon1.getUID()); + //remove all entries for this cannon in the aiming class + Aiming.getInstance().removeCannon(cannon1); - //remove entry - if (task.isRemoveEntry()) - cannonList.remove(cannon.getUID()); + //remove entry + if (removeTaskWrapper.isRemoveEntry()) + cannonList.remove(cannon1.getUID()); - } }, delay); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DelayedTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DelayedTask.java deleted file mode 100644 index c12c3cca..00000000 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DelayedTask.java +++ /dev/null @@ -1,16 +0,0 @@ -package at.pavlov.cannons.dao; - -public abstract class DelayedTask implements Runnable { - private final Wrapped wrapper; - - public DelayedTask(Wrapped wrapper) { - this.wrapper = wrapper; - } - - @Override - public final void run() { - run(wrapper); - } - - public abstract void run(Wrapped wrapper2); -} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index efae0195..f12f772d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -5,7 +5,6 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; import at.pavlov.cannons.dao.AsyncTaskManager; -import at.pavlov.cannons.dao.DelayedTask; import at.pavlov.internal.enums.ProjectileCause; import lombok.Getter; import org.apache.commons.lang3.Validate; @@ -95,21 +94,20 @@ private void detonateTimefuse(final BukkitFlyingProjectile cannonball) { } //Delayed Task - AsyncTaskManager.get().scheduler.runTaskLater(new DelayedTask<>(cannonball.getEntityUID()) { - public void run(UUID object) { - //find given UID in list - BukkitFlyingProjectile fproj = flyingProjectilesMap.get(object); - - if (fproj != null) { - //detonate timefuse - Projectile projectile_entity = fproj.getProjectileEntity(); - //the projectile might be null - if (projectile_entity != null) { - CreateExplosion.getInstance().detonate(cannonball, projectile_entity); - projectile_entity.remove(); - } - flyingProjectilesMap.remove(cannonball.getEntityUID()); + final UUID uuid = cannonball.getEntityUID(); + AsyncTaskManager.get().scheduler.runTaskLater(() -> { + //find given UID in list + BukkitFlyingProjectile fproj = flyingProjectilesMap.get(uuid); + + if (fproj != null) { + //detonate timefuse + Projectile projectile_entity = fproj.getProjectileEntity(); + //the projectile might be null + if (projectile_entity != null) { + CreateExplosion.getInstance().detonate(cannonball, projectile_entity); + projectile_entity.remove(); } + flyingProjectilesMap.remove(cannonball.getEntityUID()); } }, (long) (cannonball.getProjectile().getTimefuse() * 20)); } From 85adf74fada889bd5bf71ca9219757e043984e4f Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 21 Dec 2024 22:42:31 +0100 Subject: [PATCH 90/97] Separate MainTaskManager from AsyncTaskManager --- .../main/java/at/pavlov/cannons/Aiming.java | 3 +- .../main/java/at/pavlov/cannons/Cannons.java | 12 +++-- .../at/pavlov/cannons/CreateExplosion.java | 3 +- .../java/at/pavlov/cannons/FireCannon.java | 4 +- .../pavlov/cannons/cannon/CannonManager.java | 12 ++--- .../at/pavlov/cannons/commands/Commands.java | 11 +++-- .../pavlov/cannons/dao/AsyncTaskManager.java | 43 ++-------------- .../at/pavlov/cannons/dao/LoadCannonTask.java | 2 +- .../pavlov/cannons/dao/MainTaskManager.java | 49 +++++++++++++++++++ .../cannons/projectile/ProjectileManager.java | 3 +- .../cannons/scheduler/FakeBlockHandler.java | 5 +- .../cannons/scheduler/ProjectileObserver.java | 3 +- .../at/pavlov/cannons/utils/SoundUtils.java | 3 +- 13 files changed, 90 insertions(+), 63 deletions(-) create mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/dao/MainTaskManager.java diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index be301ee5..95644f3f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -14,6 +14,7 @@ import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.event.CannonLinkAimingEvent; import at.pavlov.cannons.event.CannonTargetEvent; import at.pavlov.cannons.event.CannonUseEvent; @@ -99,7 +100,7 @@ private Scoreboard getScoreboard() { */ public void initAimingMode() { //changing angles for aiming mode - AsyncTaskManager.get().scheduler.runTaskTimer(() -> { + MainTaskManager.get().scheduler.runTaskTimer(() -> { long startTime = System.nanoTime(); updateAimingMode(); double time = (System.nanoTime() - startTime) / 1000000.0; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java index 308fbc45..5f14326c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java @@ -9,6 +9,7 @@ import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.dao.PersistenceDatabase; import at.pavlov.cannons.hooks.VaultHook; import at.pavlov.cannons.hooks.movecraft.MovecraftHook; @@ -96,7 +97,8 @@ public static Cannons getPlugin() { public void onLoad() { CannonLogger.instantiate(this.getLogger()); // must be done in onLoad because "movecraft" - AsyncTaskManager.initialize(this); + MainTaskManager.initialize(this); + AsyncTaskManager.initialize(2); UserMessages.initialize(this); Config.initialize(this); CannonManager.initialize(this); @@ -130,7 +132,7 @@ private void initUpdater() { } public void onDisable() { - AsyncTaskManager.get().scheduler.cancelTasks(); + MainTaskManager.get().scheduler.cancelTasks(); AsyncTaskManager.get().async.shutdown(); // save database on shutdown @@ -216,7 +218,7 @@ public void onEnable() startTime = System.nanoTime(); - var taskManager = AsyncTaskManager.get(); + var taskManager = MainTaskManager.get(); //load some global variables try { @@ -230,7 +232,7 @@ public void onEnable() // Initialize the database - taskManager.async.submit(() -> { + AsyncTaskManager.get().async.submit(() -> { try { openConnection(); Statement statement = connection.createStatement(); @@ -253,7 +255,7 @@ public void onEnable() FakeBlockHandler.getInstance().setupScheduler(); // save cannons - AsyncTaskManager.get().scheduler.runTaskTimer(() -> persistenceDatabase.saveAllCannons(true), 6000L, 6000L); + MainTaskManager.get().scheduler.runTaskTimer(() -> persistenceDatabase.saveAllCannons(true), 6000L, 6000L); Metrics metrics = new Metrics(this, 23139); metrics.addCustomChart( diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 9d600ad2..99c1a621 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -8,6 +8,7 @@ import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.event.CannonDamageEvent; import at.pavlov.cannons.event.CannonsEntityDeathEvent; import at.pavlov.cannons.event.ProjectileImpactEvent; @@ -83,7 +84,7 @@ public class CreateExplosion { // players killed by cannons private final HashMap killedPlayers = new HashMap<>(); - private final AsyncTaskManager taskManager = AsyncTaskManager.get(); + private final MainTaskManager taskManager = MainTaskManager.get(); private final Random r = new Random(); @Getter diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index e2e8e705..ab489e56 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -8,6 +8,7 @@ import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.dao.wrappers.FireTaskWrapper; import at.pavlov.cannons.event.CannonFireEvent; import at.pavlov.cannons.event.CannonLinkFiringEvent; @@ -23,6 +24,7 @@ import at.pavlov.internal.enums.MessageEnum; import at.pavlov.internal.enums.ProjectileCause; import at.pavlov.internal.enums.ProjectileProperties; +import com.github.Anon8281.universalScheduler.scheduling.schedulers.TaskScheduler; import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.GameMode; @@ -296,7 +298,7 @@ public MessageEnum fire(Cannon cannon, UUID playerUid, boolean autoload, boolean } - var scheduler = AsyncTaskManager.get().scheduler; + TaskScheduler scheduler = MainTaskManager.get().scheduler; try { //set up delayed task with automatic firing. Several bullets with time delay for one loaded projectile for (int i = 0; i < projectile.getAutomaticFiringMagazineSize(); i++) { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 2764b4c7..6d70e306 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -11,6 +11,7 @@ import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.LoadWhitelistTask; +import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.dao.wrappers.RemoveTaskWrapper; import at.pavlov.cannons.event.CannonAfterCreateEvent; import at.pavlov.cannons.event.CannonBeforeCreateEvent; @@ -191,7 +192,7 @@ public void removeCannon(Cannon cannon, boolean breakCannon, boolean canExplode, //delay the remove task, so it fits to the sound final RemoveTaskWrapper removeTaskWrapper = new RemoveTaskWrapper(cannon, breakCannon, canExplode, cause, removeEntry, ignoreInvalid); - AsyncTaskManager.get().scheduler.runTaskLater(() -> { + MainTaskManager.get().scheduler.runTaskLater(() -> { Cannon cannon1 = removeTaskWrapper.getCannon(); BreakCause cause1 = removeTaskWrapper.getCause(); UUID owner = cannon1.getOwner(); @@ -415,7 +416,7 @@ public List fetchCannonInBox(Location center, UUID owner, int range) { } public void dismantleCannonsInBox(Player player, Location center, int size) { - var taskManager = AsyncTaskManager.get(); + var taskManager = MainTaskManager.get(); taskManager.scheduler.runTask(center, () -> { var cannonHashSet = getCannonsInBox(center, size, size, size); for (Cannon cannon : cannonHashSet) { @@ -566,8 +567,7 @@ public Cannon getCannon(Location cannonBlock, UUID owner, boolean silent) { startCannonCreation(cannon, message, owner, silent); Cannon finalCannon = cannon; - var taskManager = AsyncTaskManager.get(); - taskManager.fireSyncRunnable(() -> { + MainTaskManager.get().fireSyncRunnable(() -> { CannonAfterCreateEvent caceEvent = new CannonAfterCreateEvent(finalCannon, player.getUniqueId()); Bukkit.getServer().getPluginManager().callEvent(caceEvent); }); @@ -581,7 +581,7 @@ private boolean fireCannonBeforeCreateEvent(Cannon cannon, MessageEnum message, plugin.logDebug("CannonBeforeCreateEvent Cannon: " + cannon + "message: " + message + " player: " + player); plugin.logDebug("player.getUniqueId(): " + player.getUniqueId()); - var taskManager = AsyncTaskManager.get(); + var taskManager = MainTaskManager.get(); CannonBeforeCreateEvent cbceEvent = taskManager.fireSyncSupplier(() -> { CannonBeforeCreateEvent event = new CannonBeforeCreateEvent(cannon, message, player.getUniqueId()); Bukkit.getServer().getPluginManager().callEvent(event); @@ -610,7 +610,7 @@ private void startCannonCreation(Cannon cannon, MessageEnum message, UUID owner, createCannon(cannon, true); //send messages - var taskManager = AsyncTaskManager.get(); + var taskManager = MainTaskManager.get(); if (!silent) { Player player = Bukkit.getPlayer(owner); taskManager.scheduler.runTask(player, () -> { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java index d8409747..1506168e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java @@ -11,6 +11,7 @@ import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.dao.PersistenceDatabase; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.utils.CannonSelector; @@ -56,7 +57,7 @@ public class Commands extends BaseCommand { private static PersistenceDatabase persistenceDatabase; private static CannonManager cannonManager; private static CannonSelector cannonSelector; - private static AsyncTaskManager taskManager; + private static MainTaskManager taskManager; public Commands(Cannons plugin) { cannons = plugin; @@ -67,7 +68,7 @@ public Commands(Cannons plugin) { persistenceDatabase = cannons.getPersistenceDatabase(); cannonSelector = CannonSelector.getInstance(); - taskManager = AsyncTaskManager.get(); + taskManager = MainTaskManager.get(); } @HelpCommand @@ -429,7 +430,7 @@ public static void onClaim(Player player, @Default("20") int size) { taskManager.scheduler.runTask(player, () -> { userMessages.sendMessage(MessageEnum.CmdClaimCannonsFinished, player); }); - }, taskManager.async); + }, AsyncTaskManager.get().async); } @Subcommand("resetarea") @@ -449,7 +450,7 @@ public static void onResetArea(Player player, @Default("20") int size) { taskManager.scheduler.runTask(player, () -> { player.sendMessage("N: " + cannonList.size() + " cannons nearby have been deleted"); }); - }, taskManager.async); + }, AsyncTaskManager.get().async); } @@ -469,7 +470,7 @@ public static void onDismantleArea(Player player, @Default("20") int size) { var location = cannon.getLocation(); taskManager.scheduler.runTask(location, () -> cannonManager.dismantleCannon(cannon, player)); } - }, taskManager.async); + }, AsyncTaskManager.get().async); } @Subcommand("scanArea") diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/AsyncTaskManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/AsyncTaskManager.java index 9e221c38..f022fa66 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/AsyncTaskManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/AsyncTaskManager.java @@ -1,58 +1,25 @@ package at.pavlov.cannons.dao; -import at.pavlov.cannons.Cannons; -import com.github.Anon8281.universalScheduler.UniversalScheduler; -import com.github.Anon8281.universalScheduler.scheduling.schedulers.TaskScheduler; -import lombok.Setter; -import org.bukkit.Bukkit; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.function.Supplier; public class AsyncTaskManager { - protected static AsyncTaskManager instance; - @Setter - protected static int threadCount = 2; + private static AsyncTaskManager instance; + public final ExecutorService async; - private AsyncTaskManager(Cannons cannons) { + private AsyncTaskManager(int threadCount) { async = Executors.newFixedThreadPool(threadCount); - scheduler = UniversalScheduler.getScheduler(cannons); - main = scheduler::runTask; } public static AsyncTaskManager get() { return instance; } - public static void initialize(Cannons cannons) { + public static void initialize(int threads) { if (instance != null) { return; } - instance = new AsyncTaskManager(cannons); - } - - public final ExecutorService async; - public final TaskScheduler scheduler; - public final Executor main; - - public void fireSyncRunnable(Runnable runnable) { - - if (Bukkit.isPrimaryThread()) { - runnable.run(); - } else { - CompletableFuture.runAsync(runnable, main).join(); - } - } - - public T fireSyncSupplier(Supplier supplier) { - if (Bukkit.isPrimaryThread()) { - return supplier.get(); - } else { - return CompletableFuture.supplyAsync(supplier, main).join(); - } + instance = new AsyncTaskManager(threads); } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java index 6c00a5b5..679d0d80 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java @@ -33,7 +33,7 @@ public void run() { ); // found cannons - load them - var taskManager = AsyncTaskManager.get(); + MainTaskManager taskManager = MainTaskManager.get(); while (rs.next()) { UUID cannon_id = UUID.fromString(rs.getString("id")); //check if cannon design exists diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/MainTaskManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/MainTaskManager.java new file mode 100644 index 00000000..d700e479 --- /dev/null +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/MainTaskManager.java @@ -0,0 +1,49 @@ +package at.pavlov.cannons.dao; + +import at.pavlov.cannons.Cannons; +import com.github.Anon8281.universalScheduler.UniversalScheduler; +import com.github.Anon8281.universalScheduler.scheduling.schedulers.TaskScheduler; +import org.bukkit.Bukkit; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.function.Supplier; + +public class MainTaskManager { + protected static MainTaskManager instance; + public final TaskScheduler scheduler; + public final Executor main; + + private MainTaskManager(Cannons cannons) { + scheduler = UniversalScheduler.getScheduler(cannons); + main = scheduler::runTask; + } + + public static void initialize(Cannons cannons) { + if (instance != null) { + return; + } + + instance = new MainTaskManager(cannons); + } + + public static MainTaskManager get() { + return instance; + } + + public void fireSyncRunnable(Runnable runnable) { + if (Bukkit.isPrimaryThread()) { + runnable.run(); + } else { + CompletableFuture.runAsync(runnable, main).join(); + } + } + + public T fireSyncSupplier(Supplier supplier) { + if (Bukkit.isPrimaryThread()) { + return supplier.get(); + } else { + return CompletableFuture.supplyAsync(supplier, main).join(); + } + } +} diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index f12f772d..cfd016e8 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -5,6 +5,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.internal.enums.ProjectileCause; import lombok.Getter; import org.apache.commons.lang3.Validate; @@ -95,7 +96,7 @@ private void detonateTimefuse(final BukkitFlyingProjectile cannonball) { //Delayed Task final UUID uuid = cannonball.getEntityUID(); - AsyncTaskManager.get().scheduler.runTaskLater(() -> { + MainTaskManager.get().scheduler.runTaskLater(() -> { //find given UID in list BukkitFlyingProjectile fproj = flyingProjectilesMap.get(uuid); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java index a0ca935e..5f43cd92 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java @@ -4,6 +4,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.internal.enums.FakeBlockType; import lombok.Getter; import org.bukkit.Location; @@ -26,7 +27,7 @@ public class FakeBlockHandler { private long lastAiming; private long lastImpactPredictor; - private final AsyncTaskManager taskManager; + private final MainTaskManager taskManager; @Getter private static FakeBlockHandler instance = null; @@ -35,7 +36,7 @@ public class FakeBlockHandler { private FakeBlockHandler(Cannons plugin) { this.plugin = plugin; - taskManager = AsyncTaskManager.get(); + taskManager = MainTaskManager.get(); } public static void initialize(Cannons plugin) { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index 6bec874e..5f9827cb 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -7,6 +7,7 @@ import at.pavlov.cannons.CreateExplosion; import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.bukkit.projectile.BukkitFlyingProjectile; +import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.projectile.ProjectileManager; import at.pavlov.cannons.utils.CannonsUtil; import at.pavlov.cannons.utils.SoundUtils; @@ -45,7 +46,7 @@ public ProjectileObserver(Cannons plugin) public void setupScheduler() { //changing angles for aiming mode - var taskManager = AsyncTaskManager.get(); + MainTaskManager taskManager = MainTaskManager.get(); taskManager.scheduler.runTaskTimer(() -> { //get projectiles var projectiles = ProjectileManager diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java index b12ed68f..911e620c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java @@ -2,6 +2,7 @@ import at.pavlov.bukkit.container.holders.BukkitSoundHolder; import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.cannons.dao.MainTaskManager; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.World; @@ -73,7 +74,7 @@ public static void playErrorSound(final Location location) { return; world.playSound(location, Sound.BLOCK_NOTE_BLOCK_PLING, 0.25f, 0.75f); - AsyncTaskManager.get().scheduler.runTaskLater(location, () -> + MainTaskManager.get().scheduler.runTaskLater(location, () -> world.playSound(location, Sound.BLOCK_NOTE_BLOCK_PLING, 0.25f, 0.1f), 3); } From 15b9363b54f44cb0b28b64a4fd3b5f3b3db39857 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sat, 21 Dec 2024 22:44:01 +0100 Subject: [PATCH 91/97] Relocate AsyncTaskManager and RunnableAsync --- .../main/java/at/pavlov/internal/async}/AsyncTaskManager.java | 2 +- .../main/java/at/pavlov/internal/async}/RunnableAsync.java | 4 +--- cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java | 1 - cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java | 2 +- .../src/main/java/at/pavlov/cannons/CreateExplosion.java | 1 - .../src/main/java/at/pavlov/cannons/FireCannon.java | 1 - .../src/main/java/at/pavlov/cannons/cannon/CannonManager.java | 1 - .../src/main/java/at/pavlov/cannons/commands/Commands.java | 2 +- .../src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java | 2 +- .../src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java | 2 +- .../main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java | 2 +- .../src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java | 2 +- .../java/at/pavlov/cannons/projectile/ProjectileManager.java | 1 - .../java/at/pavlov/cannons/scheduler/FakeBlockHandler.java | 1 - .../java/at/pavlov/cannons/scheduler/ProjectileObserver.java | 1 - .../src/main/java/at/pavlov/cannons/utils/SoundUtils.java | 1 - 16 files changed, 8 insertions(+), 18 deletions(-) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/dao => api-internal/src/main/java/at/pavlov/internal/async}/AsyncTaskManager.java (94%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler => api-internal/src/main/java/at/pavlov/internal/async}/RunnableAsync.java (70%) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/AsyncTaskManager.java b/api-internal/src/main/java/at/pavlov/internal/async/AsyncTaskManager.java similarity index 94% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/dao/AsyncTaskManager.java rename to api-internal/src/main/java/at/pavlov/internal/async/AsyncTaskManager.java index f022fa66..acdb8566 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/AsyncTaskManager.java +++ b/api-internal/src/main/java/at/pavlov/internal/async/AsyncTaskManager.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.dao; +package at.pavlov.internal.async; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/RunnableAsync.java b/api-internal/src/main/java/at/pavlov/internal/async/RunnableAsync.java similarity index 70% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/RunnableAsync.java rename to api-internal/src/main/java/at/pavlov/internal/async/RunnableAsync.java index 0a437dcd..a6186c73 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/RunnableAsync.java +++ b/api-internal/src/main/java/at/pavlov/internal/async/RunnableAsync.java @@ -1,6 +1,4 @@ -package at.pavlov.cannons.scheduler; - -import at.pavlov.cannons.dao.AsyncTaskManager; +package at.pavlov.internal.async; import java.util.concurrent.Future; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index 95644f3f..cd423c0f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -13,7 +13,6 @@ import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.event.CannonLinkAimingEvent; import at.pavlov.cannons.event.CannonTargetEvent; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java index 5f14326c..09cbc901 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java @@ -8,7 +8,7 @@ import at.pavlov.cannons.commands.Commands; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.internal.async.AsyncTaskManager; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.dao.PersistenceDatabase; import at.pavlov.cannons.hooks.VaultHook; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java index 99c1a621..84254fce 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/CreateExplosion.java @@ -7,7 +7,6 @@ import at.pavlov.bukkit.factory.CoordinateUtil; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.config.Config; -import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.event.CannonDamageEvent; import at.pavlov.cannons.event.CannonsEntityDeathEvent; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index ab489e56..534b4c8c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -7,7 +7,6 @@ import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.config.Config; -import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.dao.wrappers.FireTaskWrapper; import at.pavlov.cannons.event.CannonFireEvent; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 6d70e306..07977e8b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -9,7 +9,6 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.LoadWhitelistTask; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.dao.wrappers.RemoveTaskWrapper; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java index 1506168e..0ca5dbda 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java @@ -10,7 +10,7 @@ import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.cannons.dao.AsyncTaskManager; +import at.pavlov.internal.async.AsyncTaskManager; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.dao.PersistenceDatabase; import at.pavlov.cannons.projectile.ProjectileStorage; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java index ef66ed7a..e65e4789 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java @@ -1,7 +1,7 @@ package at.pavlov.cannons.dao; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.scheduler.RunnableAsync; +import at.pavlov.internal.async.RunnableAsync; import java.sql.Statement; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java index 679d0d80..388b4cf2 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadCannonTask.java @@ -6,7 +6,7 @@ import at.pavlov.cannons.cannon.DesignStorage; import at.pavlov.cannons.projectile.ProjectileStorage; import at.pavlov.cannons.scheduler.CreateCannon; -import at.pavlov.cannons.scheduler.RunnableAsync; +import at.pavlov.internal.async.RunnableAsync; import at.pavlov.internal.container.location.CannonVector; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java index ff1a415f..7b05188d 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java @@ -3,7 +3,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.cannons.scheduler.RunnableAsync; +import at.pavlov.internal.async.RunnableAsync; import java.sql.ResultSet; import java.sql.Statement; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java index c09b524b..8e3f3044 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java @@ -4,7 +4,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; -import at.pavlov.cannons.scheduler.RunnableAsync; +import at.pavlov.internal.async.RunnableAsync; import java.sql.PreparedStatement; import java.util.UUID; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java index cfd016e8..e10e756e 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/projectile/ProjectileManager.java @@ -4,7 +4,6 @@ import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; -import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.internal.enums.ProjectileCause; import lombok.Getter; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java index 5f43cd92..39f0dd44 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/FakeBlockHandler.java @@ -3,7 +3,6 @@ import at.pavlov.bukkit.container.BukkitFakeBlockEntry; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.config.Config; -import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.internal.enums.FakeBlockType; import lombok.Getter; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java index 5f9827cb..5b97dcd4 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/scheduler/ProjectileObserver.java @@ -5,7 +5,6 @@ import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; import at.pavlov.cannons.CreateExplosion; -import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.bukkit.projectile.BukkitFlyingProjectile; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.projectile.ProjectileManager; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java index 911e620c..ab2a699f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/SoundUtils.java @@ -1,7 +1,6 @@ package at.pavlov.cannons.utils; import at.pavlov.bukkit.container.holders.BukkitSoundHolder; -import at.pavlov.cannons.dao.AsyncTaskManager; import at.pavlov.cannons.dao.MainTaskManager; import org.bukkit.Location; import org.bukkit.Sound; From eb8df52b557c1c1e0ee686dddd4af41e5c2c7b38 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 22 Dec 2024 18:12:46 +0100 Subject: [PATCH 92/97] Create CannonDatabase singleton --- .../at/pavlov/internal/CannonDatabase.java | 24 +++++++++++++++---- .../main/java/at/pavlov/cannons/Cannons.java | 18 ++------------ .../pavlov/cannons/dao/CreateTableTask.java | 8 +++---- .../cannons/dao/PersistenceDatabase.java | 2 +- 4 files changed, 27 insertions(+), 25 deletions(-) diff --git a/api-internal/src/main/java/at/pavlov/internal/CannonDatabase.java b/api-internal/src/main/java/at/pavlov/internal/CannonDatabase.java index 54d54faf..f7fcabce 100644 --- a/api-internal/src/main/java/at/pavlov/internal/CannonDatabase.java +++ b/api-internal/src/main/java/at/pavlov/internal/CannonDatabase.java @@ -1,9 +1,25 @@ package at.pavlov.internal; +import lombok.Getter; + import java.sql.Connection; -public interface CannonDatabase { - String getWhitelistDatabase(); - String getCannonDatabase(); - Connection getConnection(); +public class CannonDatabase { + @Getter + private static CannonDatabase instance = null; + public final Connection connection; + public final String whitelistDb; + public final String cannonsDb; + + private CannonDatabase(Connection connection, String whitelistDb, String cannonsDb) { + this.connection = connection; + this.whitelistDb = whitelistDb; + this.cannonsDb = cannonsDb; + } + + public static void instantiate(Connection connection, String whitelistDb, String cannonsDb) { + if (CannonDatabase.instance == null) { + CannonDatabase.instance = new CannonDatabase(connection, whitelistDb, cannonsDb); + } + } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java index 09cbc901..adcb8cdf 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java @@ -53,7 +53,7 @@ import java.util.Map; import java.util.logging.Logger; -public final class Cannons extends JavaPlugin implements CannonDatabase +public final class Cannons extends JavaPlugin { private PluginManager pm; private final Logger logger = Logger.getLogger("Minecraft"); @@ -346,6 +346,7 @@ private void openConnection() throws SQLException, ClassNotFoundException } Class.forName(driver); connection = DriverManager.getConnection(url, username, password); + CannonDatabase.instantiate(connection, whitelistDatabase, cannonDatabase); } } @@ -353,21 +354,11 @@ public boolean hasConnection() { return this.connection != null; } - public boolean isPluginEnabled() - { - return this.isEnabled(); - } - public final Config getMyConfig() { return config; } - public void disablePlugin() - { - pm.disablePlugin(this); - } - private String getLogPrefix() { return "[" + getPluginDescription().getName() + "] "; @@ -396,11 +387,6 @@ public static void logSDebug(String msg) { Cannons.logger().info(msg); } - public void broadcast(String msg) - { - this.getServer().broadcastMessage(msg); - } - public PluginDescriptionFile getPluginDescription() { return this.getDescription(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java index 669b5602..a63654d9 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java @@ -7,7 +7,7 @@ @AllArgsConstructor public class CreateTableTask implements Runnable { - private final CannonDatabase cannonDatabase; + private final CannonDatabase cannonDatabase = CannonDatabase.getInstance(); @Override public void run() { @@ -35,7 +35,7 @@ public void run() { "target_cannon BOOLEAN," + "target_other BOOLEAN," + "paid BOOLEAN)" - , cannonDatabase.getCannonDatabase()); + , cannonDatabase.cannonsDb); String sql2 = String.format("CREATE TABLE IF NOT EXISTS %s (" + "cannon_bean_id VARCHAR(40) NOT NULL," + "player VARCHAR(40) NOT NULL," + @@ -44,8 +44,8 @@ public void run() { "ON UPDATE CASCADE " + "ON DELETE CASCADE" + ")" - , cannonDatabase.getWhitelistDatabase(), cannonDatabase.getCannonDatabase()); - try (Statement statement = cannonDatabase.getConnection().createStatement()) { + , cannonDatabase.whitelistDb, cannonDatabase.cannonsDb); + try (Statement statement = cannonDatabase.connection.createStatement()) { statement.execute(sql1); statement.execute(sql2); } catch (Exception e) { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java index 134c3a60..5d94a135 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java @@ -16,7 +16,7 @@ public PersistenceDatabase(Cannons _plugin) { } public void createTables() { - CreateTableTask createTableTask = new CreateTableTask(plugin); + CreateTableTask createTableTask = new CreateTableTask(); createTableTask.run(); } From 6bef8fce2d81926d6988064a282819683b1d3b29 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 22 Dec 2024 18:17:48 +0100 Subject: [PATCH 93/97] Extract to API some dao components --- .../at/pavlov/internal}/dao/CreateTableTask.java | 4 ++-- .../at/pavlov/internal}/dao/DeleteCannonTask.java | 13 +++++++------ .../at/pavlov/cannons/cannon/CannonManager.java | 2 +- .../at/pavlov/cannons/dao/PersistenceDatabase.java | 4 ++++ 4 files changed, 14 insertions(+), 9 deletions(-) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-internal/src/main/java/at/pavlov/internal}/dao/CreateTableTask.java (95%) rename {cannons-bukkit/src/main/java/at/pavlov/cannons => api-internal/src/main/java/at/pavlov/internal}/dao/DeleteCannonTask.java (71%) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java b/api-internal/src/main/java/at/pavlov/internal/dao/CreateTableTask.java similarity index 95% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java rename to api-internal/src/main/java/at/pavlov/internal/dao/CreateTableTask.java index a63654d9..5d8a27e7 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/CreateTableTask.java +++ b/api-internal/src/main/java/at/pavlov/internal/dao/CreateTableTask.java @@ -1,4 +1,4 @@ -package at.pavlov.cannons.dao; +package at.pavlov.internal.dao; import at.pavlov.internal.CannonDatabase; import lombok.AllArgsConstructor; @@ -7,7 +7,7 @@ @AllArgsConstructor public class CreateTableTask implements Runnable { - private final CannonDatabase cannonDatabase = CannonDatabase.getInstance(); + private static final CannonDatabase cannonDatabase = CannonDatabase.getInstance(); @Override public void run() { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java b/api-internal/src/main/java/at/pavlov/internal/dao/DeleteCannonTask.java similarity index 71% rename from cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java rename to api-internal/src/main/java/at/pavlov/internal/dao/DeleteCannonTask.java index e65e4789..5d2d4004 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/DeleteCannonTask.java +++ b/api-internal/src/main/java/at/pavlov/internal/dao/DeleteCannonTask.java @@ -1,12 +1,13 @@ -package at.pavlov.cannons.dao; +package at.pavlov.internal.dao; -import at.pavlov.cannons.Cannons; +import at.pavlov.internal.CannonDatabase; import at.pavlov.internal.async.RunnableAsync; import java.sql.Statement; import java.util.UUID; public class DeleteCannonTask implements RunnableAsync { + private static final CannonDatabase cannonDatabase = CannonDatabase.getInstance(); private final UUID cannonId; private final UUID playerId; @@ -28,13 +29,13 @@ public DeleteCannonTask(UUID playerId, boolean player) { @Override public void run() { - try (Statement statement = Cannons.getPlugin().getConnection().createStatement()) { + try (Statement statement = cannonDatabase.connection.createStatement()) { if (cannonId == null && playerId == null) { - statement.executeUpdate(String.format("DELETE FROM %s", Cannons.getPlugin().getCannonDatabase())); + statement.executeUpdate(String.format("DELETE FROM %s", cannonDatabase.cannonsDb)); } else if (cannonId != null) { - statement.executeUpdate(String.format("DELETE FROM %s WHERE id='%s'", Cannons.getPlugin().getCannonDatabase(), cannonId)); + statement.executeUpdate(String.format("DELETE FROM %s WHERE id='%s'", cannonDatabase.cannonsDb, cannonId)); } else { - statement.executeUpdate(String.format("DELETE FROM %s WHERE owner='%s'", Cannons.getPlugin().getCannonDatabase(), playerId)); + statement.executeUpdate(String.format("DELETE FROM %s WHERE owner='%s'", cannonDatabase.cannonsDb, playerId)); } } catch (Exception e) { e.printStackTrace(); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 07977e8b..1b880e0c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -9,7 +9,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.cannons.dao.LoadWhitelistTask; +import at.pavlov.internal.dao.LoadWhitelistTask; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.dao.wrappers.RemoveTaskWrapper; import at.pavlov.cannons.event.CannonAfterCreateEvent; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java index 5d94a135..7d91670b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java @@ -3,6 +3,10 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; +import at.pavlov.internal.dao.CreateTableTask; +import at.pavlov.internal.dao.DeleteCannonTask; +import at.pavlov.internal.dao.LoadCannonTask; +import at.pavlov.internal.dao.SaveCannonTask; import java.util.UUID; import java.util.concurrent.Future; From 4df578ec82763c104a0a6fa778a934a597f47f52 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 22 Dec 2024 18:18:55 +0100 Subject: [PATCH 94/97] Fix --- .../main/java/at/pavlov/cannons/dao/PersistenceDatabase.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java index 7d91670b..4a5667b4 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/PersistenceDatabase.java @@ -5,8 +5,6 @@ import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.internal.dao.CreateTableTask; import at.pavlov.internal.dao.DeleteCannonTask; -import at.pavlov.internal.dao.LoadCannonTask; -import at.pavlov.internal.dao.SaveCannonTask; import java.util.UUID; import java.util.concurrent.Future; From b5a1f8a23e37ac8be5688885930708887d3d7356 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 22 Dec 2024 18:19:24 +0100 Subject: [PATCH 95/97] Fix CannonManager --- .../src/main/java/at/pavlov/cannons/cannon/CannonManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 1b880e0c..07977e8b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -9,7 +9,7 @@ import at.pavlov.cannons.Cannons; import at.pavlov.cannons.config.Config; import at.pavlov.cannons.config.UserMessages; -import at.pavlov.internal.dao.LoadWhitelistTask; +import at.pavlov.cannons.dao.LoadWhitelistTask; import at.pavlov.cannons.dao.MainTaskManager; import at.pavlov.cannons.dao.wrappers.RemoveTaskWrapper; import at.pavlov.cannons.event.CannonAfterCreateEvent; From 6b1d8021c0b75374f15847c699b35509dc4e4cf2 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Sun, 22 Dec 2024 18:30:48 +0100 Subject: [PATCH 96/97] Make all method in CannonManager not static --- .../at/pavlov/cannons/API/CannonsAPI.java | 6 ++--- .../main/java/at/pavlov/cannons/Aiming.java | 24 ++++++++++--------- .../java/at/pavlov/cannons/FireCannon.java | 2 +- .../pavlov/cannons/cannon/CannonManager.java | 18 +++++++------- .../at/pavlov/cannons/commands/Commands.java | 18 +++++++------- .../pavlov/cannons/dao/LoadWhitelistTask.java | 2 +- .../at/pavlov/cannons/dao/SaveCannonTask.java | 4 ++-- .../cannons/listener/PlayerListener.java | 4 ++-- .../at/pavlov/cannons/utils/CannonsUtil.java | 2 +- 9 files changed, 41 insertions(+), 39 deletions(-) diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java index 4a6b8a2e..c245a957 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/API/CannonsAPI.java @@ -81,7 +81,7 @@ public Cannon getCannon(Location location, UUID playerUID) */ public static HashSet getCannonsInSphere(Location center, double sphereRadius) { - return CannonManager.getCannonsInSphere(center, sphereRadius); + return CannonManager.getInstance().getCannonsInSphere(center, sphereRadius); } /** @@ -94,7 +94,7 @@ public static HashSet getCannonsInSphere(Location center, double sphereR */ public static HashSet getCannonsInBox(Location center, double lengthX, double lengthY, double lengthZ) { - return CannonManager.getCannonsInBox(center, lengthX, lengthY, lengthZ); + return CannonManager.getInstance().getCannonsInBox(center, lengthX, lengthY, lengthZ); } /** @@ -168,7 +168,7 @@ public UUID getPlayerFromCraft(Craft craft) { */ public static Cannon getCannon(UUID uid) { - return CannonManager.getCannon(uid); + return CannonManager.getInstance().getCannon(uid); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index cd423c0f..f72a4a23 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -69,6 +69,8 @@ public class Aiming { private final Random random = new Random(); + private final CannonManager cannonManager = CannonManager.getInstance(); + @Getter private static Aiming instance = null; @@ -412,7 +414,7 @@ public Cannon getCannonInAimingMode(UUID player) { if (player == null) return null; //return the cannon of the player if he is in aiming mode - return CannonManager.getCannon(inAimingMode.get(player)); + return cannonManager.getCannon(inAimingMode.get(player)); } @@ -462,7 +464,7 @@ private void updateAimingMode() { //find the cannon with this id - Cannon cannon = CannonManager.getCannon(entry.getValue()); + Cannon cannon = cannonManager.getCannon(entry.getValue()); if (cannon == null) { iter.remove(); continue; @@ -507,7 +509,7 @@ private boolean handleAutoamingFineadjusting(boolean playerInRange, Player playe } int d = cannon.getCannonDesign().getLinkCannonsDistance() * 2; - for (Cannon fcannon : CannonManager.getCannonsInBox(cannon.getLocation(), d, d, d)) { + for (Cannon fcannon : cannonManager.getCannonsInBox(cannon.getLocation(), d, d, d)) { // if the design is the same, and the player is allowed to use the cannon boolean checkDesign = fcannon.getCannonDesign().equals(cannon.getCannonDesign()); boolean canAccess = cannon.isAccessLinkingAllowed(fcannon, player); @@ -523,7 +525,7 @@ private boolean handleAutoamingFineadjusting(boolean playerInRange, Player playe private void updateSentryMode() { Iterator iter = sentryCannons.iterator(); while (iter.hasNext()) { - Cannon cannon = CannonManager.getCannon(iter.next()); + Cannon cannon = cannonManager.getCannon(iter.next()); if (cannon == null) { //this cannon does not exist iter.remove(); @@ -678,7 +680,7 @@ private void calculateFiringSolution(Cannon cannon) { continue; } - Cannon tCannon = CannonManager.getCannon(t.uniqueId()); + Cannon tCannon = cannonManager.getCannon(t.uniqueId()); //check if the owner is whitelisted if (tCannon == null || cannon.isWhitelisted(tCannon.getOwner())) { continue; @@ -698,7 +700,7 @@ private void calculateFiringSolution(Cannon cannon) { continue; } - Cannon tCannon = CannonManager.getCannon(t.uniqueId()); + Cannon tCannon = cannonManager.getCannon(t.uniqueId()); //check if the owner is whitelisted if (tCannon == null || cannon.isWhitelisted(tCannon.getOwner())) { continue; @@ -949,7 +951,7 @@ public void removeTarget(Entity entity) { return; for (UUID sentryCannon : sentryCannons) { - Cannon cannon = CannonManager.getCannon(sentryCannon); + Cannon cannon = cannonManager.getCannon(sentryCannon); if (cannon.getSentryEntity() != null && cannon.getSentryEntity().equals(entity.getUniqueId())) { cannon.setSentryEntity(null); } @@ -1036,7 +1038,7 @@ public MessageEnum enableAimingMode(Player player, Cannon cannon) { } int d = cannon.getCannonDesign().getLinkCannonsDistance() * 2; - LinkedList cannonList = new LinkedList<>(CannonManager.getCannonsInBox(cannon.getLocation(), d, d, d)); + LinkedList cannonList = new LinkedList<>(cannonManager.getCannonsInBox(cannon.getLocation(), d, d, d)); CannonLinkAimingEvent event = new CannonLinkAimingEvent(cannon, player, cannonList, false); Bukkit.getServer().getPluginManager().callEvent(event); @@ -1092,7 +1094,7 @@ public MessageEnum disableAimingMode(Player player, Cannon cannon) { } int d = cannon.getCannonDesign().getLinkCannonsDistance() * 2; - for (Cannon fcannon : CannonManager.getCannonsInBox(cannon.getLocation(), d, d, d)) { + for (Cannon fcannon : cannonManager.getCannonsInBox(cannon.getLocation(), d, d, d)) { if (fcannon.getCannonDesign().equals(cannon.getCannonDesign())) cannon.removeCannonOperator(); } @@ -1241,7 +1243,7 @@ public void removePlayer(Player player) { * @param player this player will be removed from the lists */ public void removeObserverForAllCannons(Player player) { - for (Cannon cannon : CannonManager.getCannonList().values()) { + for (Cannon cannon : cannonManager.getCannonList().values()) { cannon.removeObserver(player.getUniqueId()); userMessages.sendMessage(MessageEnum.CannonObserverRemoved, player, cannon); } @@ -1291,7 +1293,7 @@ public void updateImpactPredictor() { Iterator> iter = lastAimed.entrySet().iterator(); while (iter.hasNext()) { Map.Entry last = iter.next(); - Cannon cannon = CannonManager.getCannon(last.getKey()); + Cannon cannon = cannonManager.getCannon(last.getKey()); if (cannon == null) { iter.remove(); continue; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java index 534b4c8c..b5ffce2b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/FireCannon.java @@ -151,7 +151,7 @@ public MessageEnum playerFiring(Cannon cannon, Player player, InteractAction act int d = design.getLinkCannonsDistance() * 2; LinkedList linkedCannons = new LinkedList<>(); - for (Cannon fcannon : CannonManager.getCannonsInBox(cannon.getLocation(), d, d, d)) { + for (Cannon fcannon : CannonManager.getInstance().getCannonsInBox(cannon.getLocation(), d, d, d)) { plugin.logDebug(fcannon.getCannonName() + " is cannon operator: " + fcannon.isCannonOperator(player.getUniqueId())); boolean allowedToFire = cannon.isAccessLinkingAllowed(fcannon, player); diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java index 07977e8b..3db1d402 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/cannon/CannonManager.java @@ -42,8 +42,8 @@ public class CannonManager { - private static final ConcurrentHashMap cannonList = new ConcurrentHashMap<>(); - private static final ConcurrentHashMap cannonNameMap = new ConcurrentHashMap<>(); + private final ConcurrentHashMap cannonList = new ConcurrentHashMap<>(); + private final ConcurrentHashMap cannonNameMap = new ConcurrentHashMap<>(); private final Cannons plugin; private final UserMessages userMessages; @@ -240,7 +240,7 @@ public void removeCannon(Cannon cannon, boolean breakCannon, boolean canExplode, * @param name name of the cannon * @return true if the name is unique */ - private static boolean isCannonNameUnique(String name) { + private boolean isCannonNameUnique(String name) { if (name == null) return false; @@ -354,7 +354,7 @@ public void createCannon(Cannon cannon, boolean saveToDatabase) { * @param sphereRadius - radius of the sphere in blocks * @return - list of all cannons in this sphere */ - public static HashSet getCannonsInSphere(Location center, double sphereRadius) { + public HashSet getCannonsInSphere(Location center, double sphereRadius) { HashSet newCannonList = new HashSet<>(); for (Cannon cannon : getCannonList().values()) { @@ -381,7 +381,7 @@ public static HashSet getCannonsInSphere(Location center, double sphereR * @param lengthZ - box length in Z * @return - list of all cannons in this sphere */ - public static HashSet getCannonsInBox(Location center, double lengthX, double lengthY, double lengthZ) { + public HashSet getCannonsInBox(Location center, double lengthX, double lengthY, double lengthZ) { HashSet newCannonList = new HashSet<>(); for (Cannon cannon : getCannonList().values()) { @@ -433,7 +433,7 @@ public void dismantleCannonsInBox(Player player, Location center, int size) { * @param locations - a list of location to search for cannons * @return - list of all cannons in this sphere */ - public static HashSet getCannonsByLocations(List locations) { + public HashSet getCannonsByLocations(List locations) { HashSet newCannonList = new HashSet<>(); for (Cannon cannon : getCannonList().values()) { for (Location loc : locations) { @@ -470,7 +470,7 @@ public HashSet getCannons(List locations, UUID player, boolean * @param cannonName name of the cannon * @return the cannon with this name */ - public static Cannon getCannon(String cannonName) { + public Cannon getCannon(String cannonName) { if (cannonName == null) return null; UUID uid = cannonNameMap.get(cannonName); @@ -625,7 +625,7 @@ private void startCannonCreation(Cannon cannon, MessageEnum message, UUID owner, * @param uid UUID of the cannon * @return the cannon from the storage */ - public static Cannon getCannon(UUID uid) { + public Cannon getCannon(UUID uid) { if (uid == null) return null; @@ -718,7 +718,7 @@ public int getNumberOfCannons(UUID player) { /** * @return List of cannons */ - public static ConcurrentHashMap getCannonList() { + public ConcurrentHashMap getCannonList() { return cannonList; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java index 0ca5dbda..08743f34 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/commands/Commands.java @@ -152,7 +152,7 @@ public static void onList(CommandSender sender, @Optional String arg) { } sendMessage(sender, ChatColor.GREEN + "Cannon list for " + ChatColor.GOLD + offplayer.getName() + ChatColor.GREEN + ":"); - for (Cannon cannon : CannonManager.getCannonList().values()) { + for (Cannon cannon : cannonManager.getCannonList().values()) { if (cannon.getOwner() != null && cannon.getOwner().equals(offplayer.getUniqueId())) sendMessage(sender, ChatColor.GREEN + "Name:" + ChatColor.GOLD + cannon.getCannonName() + ChatColor.GREEN + " design:" + ChatColor.GOLD + cannon.getCannonDesign().getDesignName() + ChatColor.GREEN + " location:" + ChatColor.GOLD + cannon.getOffset().toString()); } @@ -161,7 +161,7 @@ public static void onList(CommandSender sender, @Optional String arg) { //plot all cannons sendMessage(sender, ChatColor.GREEN + "List of all cannons:"); - for (Cannon cannon : CannonManager.getCannonList().values()) { + for (Cannon cannon : cannonManager.getCannonList().values()) { if (cannon.getOwner() != null) { OfflinePlayer owner = Bukkit.getOfflinePlayer(cannon.getOwner()); sendMessage(sender, ChatColor.GREEN + "Name:" + ChatColor.GOLD + cannon.getCannonName() + ChatColor.GREEN + " owner:" + ChatColor.GOLD + owner.getName() + ChatColor.GREEN + " location:" + ChatColor.GOLD + cannon.getOffset().toString()); @@ -289,7 +289,7 @@ public static void onRename(Player player, String[] args) { } //selection done by a string '/cannons rename OLD NEW' - Cannon cannon = CannonManager.getCannon(args[0]); + Cannon cannon = cannonManager.getCannon(args[0]); if (cannon == null) { sendMessage(player, ChatColor.RED + "Cannon not found"); return; @@ -312,7 +312,7 @@ public static void onObserver(Player player, String[] args) { Aiming.getInstance().removeObserverForAllCannons(player); else { //selection done by a string '/cannons observer CANNON_NAME' - Cannon cannon = CannonManager.getCannon(args[0]); + Cannon cannon = cannonManager.getCannon(args[0]); if (cannon != null) cannon.toggleObserver(player.getUniqueId(), false); else @@ -381,7 +381,7 @@ public static void onDismantle(Player player) { @CommandPermission("cannons.player.list") public static void onMyList(Player player) { sendMessage(player, ChatColor.GREEN + "Cannon list for " + ChatColor.GOLD + player.getName() + ChatColor.GREEN + ":"); - for (Cannon cannon : CannonManager.getCannonList().values()) { + for (Cannon cannon : cannonManager.getCannonList().values()) { if (cannon.getOwner() != null && cannon.getOwner().equals(player.getUniqueId())) sendMessage(player, ChatColor.GREEN + "Name:" + ChatColor.GOLD + cannon.getCannonName() + ChatColor.GREEN + " design:" + ChatColor.GOLD + cannon.getCannonDesign().getDesignName() + ChatColor.GREEN + " loc: " + ChatColor.GOLD + cannon.getOffset().toString()); @@ -438,7 +438,7 @@ public static void onClaim(Player player, @Default("20") int size) { public static void onResetArea(Player player, @Default("20") int size) { CompletableFuture.runAsync(() -> { - final HashSet cannonList = CannonManager.getCannonsInBox(player.getLocation(), size, size, size); + final HashSet cannonList = cannonManager.getCannonsInBox(player.getLocation(), size, size, size); for (Cannon cannon : cannonList) { taskManager.scheduler.runTask(cannon.getLocation(), () -> { @@ -465,7 +465,7 @@ public static void onDismantleArea(Player player, @Default("20") int size) { } CompletableFuture.runAsync(() -> { - var cannonHashSet = CannonManager.getCannonsInBox(player.getLocation(), size, size, size); + var cannonHashSet = cannonManager.getCannonsInBox(player.getLocation(), size, size, size); for (Cannon cannon : cannonHashSet) { var location = cannon.getLocation(); taskManager.scheduler.runTask(location, () -> cannonManager.dismantleCannon(cannon, player)); @@ -476,7 +476,7 @@ public static void onDismantleArea(Player player, @Default("20") int size) { @Subcommand("scanArea") @CommandPermission("cannons.admin.reload") public static void scanArea(Player player, @Default("20") int size) { - int found = CannonManager.getCannonsInBox(player.getLocation(), size , size, size).size(); + int found = cannonManager.getCannonsInBox(player.getLocation(), size , size, size).size(); player.sendMessage("Cannons found: " + found); } @@ -541,7 +541,7 @@ public static void selectCannonsInBox(Player player, SelectCannon cmd, int lengt if (cannonSelector.containsTarget(player.getUniqueId())) choice = cannonSelector.getTarget(player.getUniqueId()); - HashSet list = CannonManager.getCannonsInBox(player.getLocation(), length, length, length); + HashSet list = cannonManager.getCannonsInBox(player.getLocation(), length, length, length); for (Cannon cannon : list) { cannonSelector.setSelectedCannon(player, cannon, cmd, choice); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java index 7b05188d..4b2546d6 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/LoadWhitelistTask.java @@ -24,7 +24,7 @@ public void run() { String.format("SELECT * FROM %s WHERE cannon_bean_id='%s'", Cannons.getPlugin().getWhitelistDatabase(), cannonId) ); - Cannon cannon = CannonManager.getCannon(cannonId); + Cannon cannon = CannonManager.getInstance().getCannon(cannonId); if (cannon == null) { return; } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java index 8e3f3044..1644d1fe 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/dao/SaveCannonTask.java @@ -33,7 +33,7 @@ public void run() { , Cannons.getPlugin().getCannonDatabase()); try (PreparedStatement preparedStatement = Cannons.getPlugin().getConnection().prepareStatement(insert)) { Cannons.getPlugin().logDebug("save Task start"); - for (Cannon cannon : CannonManager.getCannonList().values()) { + for (Cannon cannon : CannonManager.getInstance().getCannonList().values()) { // in case we want to save just one cannon if (this.cannonId != null && cannon.getUID() != this.cannonId) { continue; @@ -121,7 +121,7 @@ public void run() { "(?,?)" , Cannons.getPlugin().getWhitelistDatabase()); try (PreparedStatement preparedStatement = Cannons.getPlugin().getConnection().prepareStatement(insert)) { - for (Cannon cannon : CannonManager.getCannonList().values()) { + for (Cannon cannon : CannonManager.getInstance().getCannonList().values()) { if (cannon.isWhitelistUpdated()) { cannon.setWhitelistUpdated(false); for (UUID player : cannon.getWhitelist()) { diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java index 9acdd7f2..83585814 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/PlayerListener.java @@ -77,7 +77,7 @@ public void PlayerDeath(PlayerDeathEvent event) // shooter = Bukkit.getPlayer(cause.getShooterUID()); // Cannon cannon = plugin.getCannon(cause.getCannonUID()); BukkitFlyingProjectile c = explosion.getCurrentCannonball(); - Cannon cannon = CannonManager.getCannon(c.getCannonUID()); + Cannon cannon = CannonManager.getInstance().getCannon(c.getCannonUID()); String message = userMessages.getDeathMessage(killedUID, c.getShooterUID(), cannon, c.getProjectile()); if (message != null && !message.equals(" ")) event.setDeathMessage(message); @@ -320,7 +320,7 @@ private boolean isRamrod(Cannon cannon, ItemStack eventitem, Block clickedBlock, final BukkitCannonDesign design = cannon.getCannonDesign(); if (design.isLinkCannonsEnabled() ) { int d = design.getLinkCannonsDistance() * 2; - for (Cannon fcannon : CannonManager.getCannonsInBox(cannon.getLocation(), d, d, d)) { + for (Cannon fcannon : CannonManager.getInstance().getCannonsInBox(cannon.getLocation(), d, d, d)) { if (fcannon.getCannonDesign().equals(cannon.getCannonDesign()) && cannon.isAccessLinkingAllowed(fcannon, player)) fcannon.useRamRod(player); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index f926b853..bf607f44 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -405,7 +405,7 @@ public static HashMap getNearbyTargets(Location l, int minRa } } } - for (Cannon cannon : CannonManager.getCannonsInSphere(l, maxRadius)) + for (Cannon cannon : CannonManager.getInstance().getCannonsInSphere(l, maxRadius)) if (cannon.getRandomBarrelBlock().distanceSquared(l) > minRadius * minRadius) radiusTargets.put(cannon.getUID(), new BukkitTarget(cannon)); From 580e13180ca72fc6f373848f03305748a68cd0c2 Mon Sep 17 00:00:00 2001 From: Vaan1310 <61906290+Intybyte@users.noreply.github.com> Date: Sun, 22 Dec 2024 18:55:34 +0100 Subject: [PATCH 97/97] Api/bukkit/listeners (#11) * Removing block listener * Removing player listener * Create EntityUtil to extract EntityListener utility methods and remove EntityListener * Removing RedstoneListener * Move util methods to EntityUtil --- .../main/java/at/pavlov/cannons/Aiming.java | 3 +- .../main/java/at/pavlov/cannons/Cannons.java | 32 +--- .../cannons/listener/BlockListener.java | 3 +- .../cannons/listener/EntityListener.java | 47 +----- .../at/pavlov/cannons/utils/CannonsUtil.java | 84 ----------- .../at/pavlov/cannons/utils/EntityUtil.java | 140 ++++++++++++++++++ 6 files changed, 151 insertions(+), 158 deletions(-) create mode 100644 cannons-bukkit/src/main/java/at/pavlov/cannons/utils/EntityUtil.java diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java index f72a4a23..1996389c 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Aiming.java @@ -19,6 +19,7 @@ import at.pavlov.cannons.event.CannonUseEvent; import at.pavlov.cannons.scheduler.FakeBlockHandler; import at.pavlov.cannons.utils.CannonsUtil; +import at.pavlov.cannons.utils.EntityUtil; import at.pavlov.cannons.utils.SoundUtils; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.container.location.Coordinate; @@ -645,7 +646,7 @@ private void calculateFiringSolution(Cannon cannon) { cannon.setLastSentryUpdate(System.currentTimeMillis()); - HashMap targets = CannonsUtil.getNearbyTargets(cannon.getMuzzle(), design.getSentryMinRange(), design.getSentryMaxRange()); + HashMap targets = EntityUtil.getNearbyTargets(cannon.getMuzzle(), design.getSentryMinRange(), design.getSentryMaxRange()); //old target - is this still valid? if (isOldTargetValid(cannon, targets)) return; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java index adcb8cdf..8e867e1b 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/Cannons.java @@ -68,11 +68,6 @@ public final class Cannons extends JavaPlugin @Getter private HookManager hookManager; private VaultHook vaultHook; - - //Listener - private BlockListener blockListener; - private PlayerListener playerListener; - private EntityListener entityListener; // database private PersistenceDatabase persistenceDatabase; @@ -189,11 +184,6 @@ public void onEnable() this.persistenceDatabase = new PersistenceDatabase(this); - this.blockListener = new BlockListener(this); - this.playerListener = new PlayerListener(this); - this.entityListener = new EntityListener(this); - RedstoneListener redstoneListener = new RedstoneListener(this); - long startTime = System.currentTimeMillis(); hookManager = new HookManager(); @@ -222,10 +212,10 @@ public void onEnable() //load some global variables try { - pm.registerEvents(blockListener, this); - pm.registerEvents(playerListener, this); - pm.registerEvents(entityListener, this); - pm.registerEvents(redstoneListener, this); + pm.registerEvents(new BlockListener(this), this); + pm.registerEvents(new PlayerListener(this), this); + pm.registerEvents(new EntityListener(this), this); + pm.registerEvents(new RedstoneListener(this), this); pm.registerEvents(new UpdateNotifier(this), this); //call command executer initializeCommands(); @@ -405,16 +395,6 @@ public FireCannon getFireCannon() { return fireCannon; } - - public PlayerListener getPlayerListener() - { - return playerListener; - } - - public EntityListener getEntityListener() - { - return entityListener; - } public void sendMessage(Player player, Cannon cannon, MessageEnum message) { @@ -430,10 +410,6 @@ public ProjectileObserver getProjectileObserver() { return observer; } - public BlockListener getBlockListener() { - return blockListener; - } - public Economy getEconomy(){ return vaultHook.hook(); } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java index 7a73fcd9..768e0c90 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/BlockListener.java @@ -7,6 +7,7 @@ import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.multiversion.EventResolver; import at.pavlov.cannons.utils.CannonSelector; +import at.pavlov.cannons.utils.EntityUtil; import at.pavlov.internal.enums.BreakCause; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -59,7 +60,7 @@ public void blockExplodeEvent(BlockExplodeEvent event) { } //search for destroyed cannons - plugin.getEntityListener().ExplosionEventHandler(event.blockList()); + EntityUtil.handleExplosionEvent(event.blockList()); } /** diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java index 0d148f4e..bdbe0ca9 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/listener/EntityListener.java @@ -5,6 +5,7 @@ import at.pavlov.cannons.cannon.Cannon; import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.cannons.projectile.ProjectileManager; +import at.pavlov.cannons.utils.EntityUtil; import at.pavlov.internal.enums.BreakCause; import org.bukkit.block.Block; import org.bukkit.entity.Projectile; @@ -80,49 +81,7 @@ public void EntityExplode(EntityExplodeEvent event) //do nothing if it is cancelled if (event.isCancelled()) return; - - ExplosionEventHandler(event.blockList()); - } - - /** - * searches for destroyed cannons in the explosion event and removes cannons parts which can't be destroyed in an explosion. - * @param blocklist list of blocks involved in the event - */ - public void ExplosionEventHandler(List blocklist){ - HashSet remove = new HashSet<>(); - - // first search if a barrel block was destroyed. - for (Block block : blocklist) { - Cannon cannon = cannonManager.getCannon(block.getLocation(), null); - - // if it is a cannon block - if (cannon == null) { - continue; - } - - if (cannon.isDestructibleBlock(block.getLocation())) { - //this cannon is destroyed - remove.add(cannon.getUID()); - } - } - - //iterate again and remove all block of intact cannons - for (int i = 0; i < blocklist.size(); i++) { - Block block = blocklist.get(i); - Cannon cannon = cannonManager.getCannon(block.getLocation(), null); - // if it is a cannon block and the cannon is not destroyed (see above) - if (cannon == null || remove.contains(cannon.getUID())) { - continue; - } - - if (cannon.isCannonBlock(block)) { - blocklist.remove(i--); - } - } - - //now remove all invalid cannons - for (UUID id : remove) - cannonManager.removeCannon(id, false, true, BreakCause.EXPLOSION); - } + EntityUtil.handleExplosionEvent(event.blockList()); + } } diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java index bf607f44..080d237f 100644 --- a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/CannonsUtil.java @@ -1,20 +1,14 @@ package at.pavlov.cannons.utils; -import at.pavlov.bukkit.container.BukkitTarget; import at.pavlov.bukkit.factory.CoordinateUtil; -import at.pavlov.bukkit.factory.VectorUtils; import at.pavlov.bukkit.projectile.BukkitProjectile; import at.pavlov.cannons.Cannons; -import at.pavlov.cannons.TargetManager; -import at.pavlov.cannons.cannon.Cannon; -import at.pavlov.cannons.cannon.CannonManager; import at.pavlov.bukkit.projectile.BukkitFlyingProjectile; import at.pavlov.internal.container.location.CannonVector; import at.pavlov.internal.container.location.Coordinate; import at.pavlov.internal.enums.ProjectileProperties; import io.papermc.lib.PaperLib; import org.bukkit.Bukkit; -import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -23,14 +17,11 @@ import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Directional; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.util.BlockIterator; import org.bukkit.util.Vector; import java.util.ArrayList; -import java.util.HashMap; import java.util.Random; import java.util.UUID; import java.util.logging.Level; @@ -341,81 +332,6 @@ public static void teleportBack(BukkitFlyingProjectile cannonball) { cannonball.setTeleported(true); } - /** - * returns all entity in a given radius - * @param l center location - * @param minRadius minimum radius for search - * @param maxRadius radius for search - * @return hashmap of Entities in area - */ - public static HashMap getNearbyEntities(Location l, int minRadius, int maxRadius){ - int chunkRadius = maxRadius < 16 ? 1 : (maxRadius - (maxRadius % 16))/16; - HashMap radiusEntities = new HashMap<>(); - for (int chX = -chunkRadius; chX <= chunkRadius; chX ++){ - for (int chZ = -chunkRadius; chZ <= chunkRadius; chZ++){ - int x=(int) l.getX(),y=(int) l.getY(),z=(int) l.getZ(); - for (Entity e : new Location(l.getWorld(),x+(chX*16),y,z+(chZ*16)).getChunk().getEntities()){ - double dist = e.getLocation().distance(l); - if (minRadius <= dist && dist <= maxRadius && e.getLocation().getBlock() != l.getBlock()) - radiusEntities.put(e.getUniqueId(), e); - } - } - } - return radiusEntities; - } - - /** - * This method searches in the nearby chunks in a square and - * returns all targets (entity and cannons) in a given radius - * @param l center location - * @param minRadius minimum radius for search - * @param maxRadius radius for search - * @return array of Entities in area - */ - public static HashMap getNearbyTargets(Location l, int minRadius, int maxRadius){ - int chunkTargets = maxRadius < 16 ? 1 : (maxRadius - (maxRadius % 16))/16; - HashMap radiusTargets = new HashMap<>(); - - for (int chX = -chunkTargets; chX <= chunkTargets; chX++){ - for (int chZ = -chunkTargets; chZ <= chunkTargets; chZ++){ - - int x=(int) l.getX(), y=(int) l.getY(), z=(int) l.getZ(); - - for (Entity e : new Location(l.getWorld(),x+(chX*16),y,z+(chZ*16)).getChunk().getEntities()){ - if (!e.getWorld().equals(l.getWorld())) { - continue; - } - - - if (!(e instanceof LivingEntity) || e.isDead() || e.getLocation().getBlock() == l.getBlock()) { - continue; - } - - double dist = e.getLocation().distanceSquared(l); - if (maxRadius * maxRadius < dist || dist < minRadius * minRadius) { - continue; - } - - if (e instanceof Player p){ - if (p.getGameMode() == GameMode.CREATIVE || p.hasPermission("cannons.admin.notarget")) - continue; - } - - radiusTargets.put(e.getUniqueId(), new BukkitTarget(e)); - } - } - } - for (Cannon cannon : CannonManager.getInstance().getCannonsInSphere(l, maxRadius)) - if (cannon.getRandomBarrelBlock().distanceSquared(l) > minRadius * minRadius) - radiusTargets.put(cannon.getUID(), new BukkitTarget(cannon)); - - // additional targets from different plugins e.g. ships - for (BukkitTarget target : TargetManager.getTargetsInSphere(l, maxRadius)) - if (target.centerLocation().getVector().distanceSquared(VectorUtils.fromLoc(l)) > minRadius * minRadius) - radiusTargets.put(target.uniqueId(), target); - return radiusTargets; - } - public static double vectorToYaw(Vector vector){ return Math.atan2(-vector.getX(), vector.getZ())*180./Math.PI; diff --git a/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/EntityUtil.java b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/EntityUtil.java new file mode 100644 index 00000000..28fd9286 --- /dev/null +++ b/cannons-bukkit/src/main/java/at/pavlov/cannons/utils/EntityUtil.java @@ -0,0 +1,140 @@ +package at.pavlov.cannons.utils; + +import at.pavlov.bukkit.container.BukkitTarget; +import at.pavlov.bukkit.factory.VectorUtils; +import at.pavlov.cannons.TargetManager; +import at.pavlov.cannons.cannon.Cannon; +import at.pavlov.cannons.cannon.CannonManager; +import at.pavlov.internal.enums.BreakCause; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.UUID; + +public class EntityUtil { + + /** + * searches for destroyed cannons in the explosion event and removes cannons parts which can't be destroyed in an explosion. + * @param blocklist list of blocks involved in the event + */ + public static void handleExplosionEvent(List blocklist){ + HashSet remove = new HashSet<>(); + CannonManager cannonManager = CannonManager.getInstance(); + + // first search if a barrel block was destroyed. + for (Block block : blocklist) { + Cannon cannon = cannonManager.getCannon(block.getLocation(), null); + + // if it is a cannon block + if (cannon == null) { + continue; + } + + if (cannon.isDestructibleBlock(block.getLocation())) { + //this cannon is destroyed + remove.add(cannon.getUID()); + } + } + + //iterate again and remove all block of intact cannons + for (int i = 0; i < blocklist.size(); i++) { + Block block = blocklist.get(i); + Cannon cannon = cannonManager.getCannon(block.getLocation(), null); + + // if it is a cannon block and the cannon is not destroyed (see above) + if (cannon == null || remove.contains(cannon.getUID())) { + continue; + } + + if (cannon.isCannonBlock(block)) { + blocklist.remove(i--); + } + } + + //now remove all invalid cannons + for (UUID id : remove) + cannonManager.removeCannon(id, false, true, BreakCause.EXPLOSION); + } + + /** + * returns all entity in a given radius + * @param l center location + * @param minRadius minimum radius for search + * @param maxRadius radius for search + * @return hashmap of Entities in area + */ + public static HashMap getNearbyEntities(Location l, int minRadius, int maxRadius){ + int chunkRadius = maxRadius < 16 ? 1 : (maxRadius - (maxRadius % 16))/16; + HashMap radiusEntities = new HashMap<>(); + for (int chX = -chunkRadius; chX <= chunkRadius; chX ++){ + for (int chZ = -chunkRadius; chZ <= chunkRadius; chZ++){ + int x=(int) l.getX(),y=(int) l.getY(),z=(int) l.getZ(); + for (Entity e : new Location(l.getWorld(),x+(chX*16),y,z+(chZ*16)).getChunk().getEntities()){ + double dist = e.getLocation().distance(l); + if (minRadius <= dist && dist <= maxRadius && e.getLocation().getBlock() != l.getBlock()) + radiusEntities.put(e.getUniqueId(), e); + } + } + } + return radiusEntities; + } + + /** + * This method searches in the nearby chunks in a square and + * returns all targets (entity and cannons) in a given radius + * @param l center location + * @param minRadius minimum radius for search + * @param maxRadius radius for search + * @return array of Entities in area + */ + public static HashMap getNearbyTargets(Location l, int minRadius, int maxRadius){ + int chunkTargets = maxRadius < 16 ? 1 : (maxRadius - (maxRadius % 16))/16; + HashMap radiusTargets = new HashMap<>(); + + for (int chX = -chunkTargets; chX <= chunkTargets; chX++){ + for (int chZ = -chunkTargets; chZ <= chunkTargets; chZ++){ + + int x=(int) l.getX(), y=(int) l.getY(), z=(int) l.getZ(); + + for (Entity e : new Location(l.getWorld(),x+(chX*16),y,z+(chZ*16)).getChunk().getEntities()){ + if (!e.getWorld().equals(l.getWorld())) { + continue; + } + + + if (!(e instanceof LivingEntity) || e.isDead() || e.getLocation().getBlock() == l.getBlock()) { + continue; + } + + double dist = e.getLocation().distanceSquared(l); + if (maxRadius * maxRadius < dist || dist < minRadius * minRadius) { + continue; + } + + if (e instanceof Player p){ + if (p.getGameMode() == GameMode.CREATIVE || p.hasPermission("cannons.admin.notarget")) + continue; + } + + radiusTargets.put(e.getUniqueId(), new BukkitTarget(e)); + } + } + } + for (Cannon cannon : CannonManager.getInstance().getCannonsInSphere(l, maxRadius)) + if (cannon.getRandomBarrelBlock().distanceSquared(l) > minRadius * minRadius) + radiusTargets.put(cannon.getUID(), new BukkitTarget(cannon)); + + // additional targets from different plugins e.g. ships + for (BukkitTarget target : TargetManager.getTargetsInSphere(l, maxRadius)) + if (target.centerLocation().getVector().distanceSquared(VectorUtils.fromLoc(l)) > minRadius * minRadius) + radiusTargets.put(target.uniqueId(), target); + return radiusTargets; + } +}