diff --git a/core/src/main/java/me/filoghost/holographicdisplays/core/CorePreconditions.java b/core/src/main/java/me/filoghost/holographicdisplays/core/CorePreconditions.java new file mode 100644 index 00000000..09e93a47 --- /dev/null +++ b/core/src/main/java/me/filoghost/holographicdisplays/core/CorePreconditions.java @@ -0,0 +1,16 @@ +/* + * Copyright (C) filoghost and contributors + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package me.filoghost.holographicdisplays.core; + +import me.filoghost.fcommons.Preconditions; + +public class CorePreconditions { + + public static void checkMainThread() { + Preconditions.checkMainThread("async operation is not supported"); + } + +} diff --git a/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APIHologram.java b/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APIHologram.java index ba642729..374faab7 100644 --- a/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APIHologram.java +++ b/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APIHologram.java @@ -9,6 +9,7 @@ import me.filoghost.fcommons.Preconditions; import me.filoghost.holographicdisplays.api.Position; import me.filoghost.holographicdisplays.api.hologram.Hologram; import me.filoghost.holographicdisplays.api.hologram.PlaceholderSetting; +import me.filoghost.holographicdisplays.core.CorePreconditions; import me.filoghost.holographicdisplays.core.base.BaseHologram; import me.filoghost.holographicdisplays.core.base.ImmutablePosition; import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager; @@ -53,6 +54,7 @@ class APIHologram extends BaseHologram implements Hologram { @Override public void setPlaceholderSetting(@NotNull PlaceholderSetting placeholderSetting) { + CorePreconditions.checkMainThread(); Preconditions.notNull(placeholderSetting, "placeholderSetting"); checkNotDeleted(); diff --git a/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APIItemHologramLine.java b/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APIItemHologramLine.java index eeec9a51..b2634b1a 100644 --- a/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APIItemHologramLine.java +++ b/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APIItemHologramLine.java @@ -8,6 +8,7 @@ package me.filoghost.holographicdisplays.core.api.current; import me.filoghost.holographicdisplays.api.hologram.line.HologramLineClickListener; import me.filoghost.holographicdisplays.api.hologram.line.HologramLinePickupListener; import me.filoghost.holographicdisplays.api.hologram.line.ItemHologramLine; +import me.filoghost.holographicdisplays.core.CorePreconditions; import me.filoghost.holographicdisplays.core.base.BaseItemHologramLine; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -24,21 +25,18 @@ class APIItemHologramLine extends BaseItemHologramLine implements ItemHologramLi @Override public @Nullable HologramLinePickupListener getPickupListener() { + CorePreconditions.checkMainThread(); return pickupListener; } @Override public void setPickupListener(@Nullable HologramLinePickupListener pickupListener) { + CorePreconditions.checkMainThread(); checkNotDeleted(); this.pickupListener = pickupListener; } - @Override - public @Nullable HologramLineClickListener getClickListener() { - return clickListener; - } - @Override public boolean hasPickupCallback() { return pickupListener != null; @@ -51,8 +49,15 @@ class APIItemHologramLine extends BaseItemHologramLine implements ItemHologramLi } } + @Override + public @Nullable HologramLineClickListener getClickListener() { + CorePreconditions.checkMainThread(); + return clickListener; + } + @Override public void setClickListener(@Nullable HologramLineClickListener clickListener) { + CorePreconditions.checkMainThread(); checkNotDeleted(); this.clickListener = clickListener; diff --git a/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APITextHologramLine.java b/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APITextHologramLine.java index 9d2ed781..2af1c8c2 100644 --- a/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APITextHologramLine.java +++ b/core/src/main/java/me/filoghost/holographicdisplays/core/api/current/APITextHologramLine.java @@ -8,6 +8,7 @@ package me.filoghost.holographicdisplays.core.api.current; import me.filoghost.holographicdisplays.api.hologram.PlaceholderSetting; import me.filoghost.holographicdisplays.api.hologram.line.HologramLineClickListener; import me.filoghost.holographicdisplays.api.hologram.line.TextHologramLine; +import me.filoghost.holographicdisplays.core.CorePreconditions; import me.filoghost.holographicdisplays.core.base.BaseTextHologramLine; import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; @@ -30,6 +31,7 @@ class APITextHologramLine extends BaseTextHologramLine implements TextHologramLi @Override public void setClickListener(@Nullable HologramLineClickListener clickListener) { + CorePreconditions.checkMainThread(); checkNotDeleted(); this.clickListener = clickListener; diff --git a/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologram.java b/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologram.java index 4570db4d..894e6ad3 100644 --- a/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologram.java +++ b/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologram.java @@ -6,6 +6,7 @@ package me.filoghost.holographicdisplays.core.base; import me.filoghost.fcommons.Preconditions; +import me.filoghost.holographicdisplays.core.CorePreconditions; import me.filoghost.holographicdisplays.core.api.current.DefaultVisibilitySettings; import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager; import org.bukkit.Chunk; @@ -70,6 +71,7 @@ public abstract class BaseHologram extends BaseHologramComponent { } public void setPosition(@NotNull ImmutablePosition position) { + CorePreconditions.checkMainThread(); Preconditions.notNull(position, "position"); checkNotDeleted(); diff --git a/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologramLines.java b/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologramLines.java index 009f8a7d..3b5d3776 100644 --- a/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologramLines.java +++ b/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologramLines.java @@ -7,6 +7,7 @@ package me.filoghost.holographicdisplays.core.base; import me.filoghost.holographicdisplays.api.Position; import me.filoghost.holographicdisplays.core.CoreGlobalConfig; +import me.filoghost.holographicdisplays.core.CorePreconditions; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -28,18 +29,22 @@ public class BaseHologramLines implements Iterab @Override public Iterator iterator() { + CorePreconditions.checkMainThread(); return unmodifiableLinesView.iterator(); } public int size() { + CorePreconditions.checkMainThread(); return lines.size(); } public @NotNull T get(int index) { + CorePreconditions.checkMainThread(); return lines.get(index); } public void add(T line) { + CorePreconditions.checkMainThread(); checkNotDeleted(); lines.add(line); @@ -47,6 +52,7 @@ public class BaseHologramLines implements Iterab } public void insert(int beforeIndex, T line) { + CorePreconditions.checkMainThread(); checkNotDeleted(); lines.add(beforeIndex, line); @@ -54,6 +60,7 @@ public class BaseHologramLines implements Iterab } public void remove(int index) { + CorePreconditions.checkMainThread(); checkNotDeleted(); lines.remove(index).setDeleted(); @@ -61,6 +68,7 @@ public class BaseHologramLines implements Iterab } public boolean remove(T line) { + CorePreconditions.checkMainThread(); checkNotDeleted(); boolean removed = lines.remove(line); @@ -72,6 +80,7 @@ public class BaseHologramLines implements Iterab } public void clear() { + CorePreconditions.checkMainThread(); checkNotDeleted(); Iterator iterator = lines.iterator(); @@ -105,6 +114,8 @@ public class BaseHologramLines implements Iterab } public double getHeight() { + CorePreconditions.checkMainThread(); + if (lines.isEmpty()) { return 0; } diff --git a/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologramManager.java b/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologramManager.java index d1c70606..b0c16a4b 100644 --- a/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologramManager.java +++ b/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseHologramManager.java @@ -5,7 +5,7 @@ */ package me.filoghost.holographicdisplays.core.base; -import me.filoghost.fcommons.Preconditions; +import me.filoghost.holographicdisplays.core.CorePreconditions; import org.bukkit.Chunk; import org.bukkit.World; @@ -21,7 +21,7 @@ public abstract class BaseHologramManager { private final List unmodifiableHologramsView = Collections.unmodifiableList(holograms); protected void addHologram(H hologram) { - Preconditions.checkMainThread("async hologram create"); + CorePreconditions.checkMainThread(); holograms.add(hologram); } @@ -31,14 +31,14 @@ public abstract class BaseHologramManager { } public void deleteHologram(H hologram) { - Preconditions.checkMainThread("async hologram delete"); + CorePreconditions.checkMainThread(); hologram.setDeleted(); holograms.remove(hologram); } public void deleteHologramsIf(Predicate condition) { - Preconditions.checkMainThread("async hologram delete"); + CorePreconditions.checkMainThread(); Iterator iterator = holograms.iterator(); while (iterator.hasNext()) { @@ -51,7 +51,7 @@ public abstract class BaseHologramManager { } public void deleteHolograms() { - Preconditions.checkMainThread("async hologram delete"); + CorePreconditions.checkMainThread(); Iterator iterator = holograms.iterator(); while (iterator.hasNext()) { diff --git a/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseItemHologramLine.java b/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseItemHologramLine.java index 9fc87e29..0ee831a8 100644 --- a/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseItemHologramLine.java +++ b/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseItemHologramLine.java @@ -7,6 +7,7 @@ package me.filoghost.holographicdisplays.core.base; import me.filoghost.fcommons.Preconditions; import me.filoghost.fcommons.logging.Log; +import me.filoghost.holographicdisplays.core.CorePreconditions; import me.filoghost.holographicdisplays.nms.common.entity.ItemNMSPacketEntity; import me.filoghost.holographicdisplays.core.tracking.ItemLineTracker; import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager; @@ -48,6 +49,7 @@ public abstract class BaseItemHologramLine extends BaseClickableHologramLine { } public void setItemStack(@Nullable ItemStack itemStack) { + CorePreconditions.checkMainThread(); checkNotDeleted(); if (itemStack != null) { diff --git a/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseTextHologramLine.java b/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseTextHologramLine.java index 13dd8588..5c795a37 100644 --- a/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseTextHologramLine.java +++ b/core/src/main/java/me/filoghost/holographicdisplays/core/base/BaseTextHologramLine.java @@ -5,6 +5,7 @@ */ package me.filoghost.holographicdisplays.core.base; +import me.filoghost.holographicdisplays.core.CorePreconditions; import me.filoghost.holographicdisplays.nms.common.entity.TextNMSPacketEntity; import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager; import me.filoghost.holographicdisplays.core.tracking.TextLineTracker; @@ -31,6 +32,7 @@ public abstract class BaseTextHologramLine extends BaseClickableHologramLine { } public void setText(@Nullable String text) { + CorePreconditions.checkMainThread(); checkNotDeleted(); this.text = text;