Additional async checks

This commit is contained in:
filoghost 2022-11-14 00:12:58 +01:00
parent 80344c8503
commit 017b0a2346
9 changed files with 52 additions and 10 deletions

View File

@ -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");
}
}

View File

@ -9,6 +9,7 @@ import me.filoghost.fcommons.Preconditions;
import me.filoghost.holographicdisplays.api.Position; import me.filoghost.holographicdisplays.api.Position;
import me.filoghost.holographicdisplays.api.hologram.Hologram; import me.filoghost.holographicdisplays.api.hologram.Hologram;
import me.filoghost.holographicdisplays.api.hologram.PlaceholderSetting; 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.BaseHologram;
import me.filoghost.holographicdisplays.core.base.ImmutablePosition; import me.filoghost.holographicdisplays.core.base.ImmutablePosition;
import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager; import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager;
@ -53,6 +54,7 @@ class APIHologram extends BaseHologram implements Hologram {
@Override @Override
public void setPlaceholderSetting(@NotNull PlaceholderSetting placeholderSetting) { public void setPlaceholderSetting(@NotNull PlaceholderSetting placeholderSetting) {
CorePreconditions.checkMainThread();
Preconditions.notNull(placeholderSetting, "placeholderSetting"); Preconditions.notNull(placeholderSetting, "placeholderSetting");
checkNotDeleted(); checkNotDeleted();

View File

@ -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.HologramLineClickListener;
import me.filoghost.holographicdisplays.api.hologram.line.HologramLinePickupListener; import me.filoghost.holographicdisplays.api.hologram.line.HologramLinePickupListener;
import me.filoghost.holographicdisplays.api.hologram.line.ItemHologramLine; import me.filoghost.holographicdisplays.api.hologram.line.ItemHologramLine;
import me.filoghost.holographicdisplays.core.CorePreconditions;
import me.filoghost.holographicdisplays.core.base.BaseItemHologramLine; import me.filoghost.holographicdisplays.core.base.BaseItemHologramLine;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -24,21 +25,18 @@ class APIItemHologramLine extends BaseItemHologramLine implements ItemHologramLi
@Override @Override
public @Nullable HologramLinePickupListener getPickupListener() { public @Nullable HologramLinePickupListener getPickupListener() {
CorePreconditions.checkMainThread();
return pickupListener; return pickupListener;
} }
@Override @Override
public void setPickupListener(@Nullable HologramLinePickupListener pickupListener) { public void setPickupListener(@Nullable HologramLinePickupListener pickupListener) {
CorePreconditions.checkMainThread();
checkNotDeleted(); checkNotDeleted();
this.pickupListener = pickupListener; this.pickupListener = pickupListener;
} }
@Override
public @Nullable HologramLineClickListener getClickListener() {
return clickListener;
}
@Override @Override
public boolean hasPickupCallback() { public boolean hasPickupCallback() {
return pickupListener != null; return pickupListener != null;
@ -51,8 +49,15 @@ class APIItemHologramLine extends BaseItemHologramLine implements ItemHologramLi
} }
} }
@Override
public @Nullable HologramLineClickListener getClickListener() {
CorePreconditions.checkMainThread();
return clickListener;
}
@Override @Override
public void setClickListener(@Nullable HologramLineClickListener clickListener) { public void setClickListener(@Nullable HologramLineClickListener clickListener) {
CorePreconditions.checkMainThread();
checkNotDeleted(); checkNotDeleted();
this.clickListener = clickListener; this.clickListener = clickListener;

View File

@ -8,6 +8,7 @@ package me.filoghost.holographicdisplays.core.api.current;
import me.filoghost.holographicdisplays.api.hologram.PlaceholderSetting; import me.filoghost.holographicdisplays.api.hologram.PlaceholderSetting;
import me.filoghost.holographicdisplays.api.hologram.line.HologramLineClickListener; import me.filoghost.holographicdisplays.api.hologram.line.HologramLineClickListener;
import me.filoghost.holographicdisplays.api.hologram.line.TextHologramLine; import me.filoghost.holographicdisplays.api.hologram.line.TextHologramLine;
import me.filoghost.holographicdisplays.core.CorePreconditions;
import me.filoghost.holographicdisplays.core.base.BaseTextHologramLine; import me.filoghost.holographicdisplays.core.base.BaseTextHologramLine;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -30,6 +31,7 @@ class APITextHologramLine extends BaseTextHologramLine implements TextHologramLi
@Override @Override
public void setClickListener(@Nullable HologramLineClickListener clickListener) { public void setClickListener(@Nullable HologramLineClickListener clickListener) {
CorePreconditions.checkMainThread();
checkNotDeleted(); checkNotDeleted();
this.clickListener = clickListener; this.clickListener = clickListener;

View File

@ -6,6 +6,7 @@
package me.filoghost.holographicdisplays.core.base; package me.filoghost.holographicdisplays.core.base;
import me.filoghost.fcommons.Preconditions; import me.filoghost.fcommons.Preconditions;
import me.filoghost.holographicdisplays.core.CorePreconditions;
import me.filoghost.holographicdisplays.core.api.current.DefaultVisibilitySettings; import me.filoghost.holographicdisplays.core.api.current.DefaultVisibilitySettings;
import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager; import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager;
import org.bukkit.Chunk; import org.bukkit.Chunk;
@ -70,6 +71,7 @@ public abstract class BaseHologram extends BaseHologramComponent {
} }
public void setPosition(@NotNull ImmutablePosition position) { public void setPosition(@NotNull ImmutablePosition position) {
CorePreconditions.checkMainThread();
Preconditions.notNull(position, "position"); Preconditions.notNull(position, "position");
checkNotDeleted(); checkNotDeleted();

View File

@ -7,6 +7,7 @@ package me.filoghost.holographicdisplays.core.base;
import me.filoghost.holographicdisplays.api.Position; import me.filoghost.holographicdisplays.api.Position;
import me.filoghost.holographicdisplays.core.CoreGlobalConfig; import me.filoghost.holographicdisplays.core.CoreGlobalConfig;
import me.filoghost.holographicdisplays.core.CorePreconditions;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
@ -28,18 +29,22 @@ public class BaseHologramLines<T extends EditableHologramLine> implements Iterab
@Override @Override
public Iterator<T> iterator() { public Iterator<T> iterator() {
CorePreconditions.checkMainThread();
return unmodifiableLinesView.iterator(); return unmodifiableLinesView.iterator();
} }
public int size() { public int size() {
CorePreconditions.checkMainThread();
return lines.size(); return lines.size();
} }
public @NotNull T get(int index) { public @NotNull T get(int index) {
CorePreconditions.checkMainThread();
return lines.get(index); return lines.get(index);
} }
public void add(T line) { public void add(T line) {
CorePreconditions.checkMainThread();
checkNotDeleted(); checkNotDeleted();
lines.add(line); lines.add(line);
@ -47,6 +52,7 @@ public class BaseHologramLines<T extends EditableHologramLine> implements Iterab
} }
public void insert(int beforeIndex, T line) { public void insert(int beforeIndex, T line) {
CorePreconditions.checkMainThread();
checkNotDeleted(); checkNotDeleted();
lines.add(beforeIndex, line); lines.add(beforeIndex, line);
@ -54,6 +60,7 @@ public class BaseHologramLines<T extends EditableHologramLine> implements Iterab
} }
public void remove(int index) { public void remove(int index) {
CorePreconditions.checkMainThread();
checkNotDeleted(); checkNotDeleted();
lines.remove(index).setDeleted(); lines.remove(index).setDeleted();
@ -61,6 +68,7 @@ public class BaseHologramLines<T extends EditableHologramLine> implements Iterab
} }
public boolean remove(T line) { public boolean remove(T line) {
CorePreconditions.checkMainThread();
checkNotDeleted(); checkNotDeleted();
boolean removed = lines.remove(line); boolean removed = lines.remove(line);
@ -72,6 +80,7 @@ public class BaseHologramLines<T extends EditableHologramLine> implements Iterab
} }
public void clear() { public void clear() {
CorePreconditions.checkMainThread();
checkNotDeleted(); checkNotDeleted();
Iterator<T> iterator = lines.iterator(); Iterator<T> iterator = lines.iterator();
@ -105,6 +114,8 @@ public class BaseHologramLines<T extends EditableHologramLine> implements Iterab
} }
public double getHeight() { public double getHeight() {
CorePreconditions.checkMainThread();
if (lines.isEmpty()) { if (lines.isEmpty()) {
return 0; return 0;
} }

View File

@ -5,7 +5,7 @@
*/ */
package me.filoghost.holographicdisplays.core.base; package me.filoghost.holographicdisplays.core.base;
import me.filoghost.fcommons.Preconditions; import me.filoghost.holographicdisplays.core.CorePreconditions;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.World; import org.bukkit.World;
@ -21,7 +21,7 @@ public abstract class BaseHologramManager<H extends BaseHologram> {
private final List<H> unmodifiableHologramsView = Collections.unmodifiableList(holograms); private final List<H> unmodifiableHologramsView = Collections.unmodifiableList(holograms);
protected void addHologram(H hologram) { protected void addHologram(H hologram) {
Preconditions.checkMainThread("async hologram create"); CorePreconditions.checkMainThread();
holograms.add(hologram); holograms.add(hologram);
} }
@ -31,14 +31,14 @@ public abstract class BaseHologramManager<H extends BaseHologram> {
} }
public void deleteHologram(H hologram) { public void deleteHologram(H hologram) {
Preconditions.checkMainThread("async hologram delete"); CorePreconditions.checkMainThread();
hologram.setDeleted(); hologram.setDeleted();
holograms.remove(hologram); holograms.remove(hologram);
} }
public void deleteHologramsIf(Predicate<H> condition) { public void deleteHologramsIf(Predicate<H> condition) {
Preconditions.checkMainThread("async hologram delete"); CorePreconditions.checkMainThread();
Iterator<H> iterator = holograms.iterator(); Iterator<H> iterator = holograms.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
@ -51,7 +51,7 @@ public abstract class BaseHologramManager<H extends BaseHologram> {
} }
public void deleteHolograms() { public void deleteHolograms() {
Preconditions.checkMainThread("async hologram delete"); CorePreconditions.checkMainThread();
Iterator<H> iterator = holograms.iterator(); Iterator<H> iterator = holograms.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {

View File

@ -7,6 +7,7 @@ package me.filoghost.holographicdisplays.core.base;
import me.filoghost.fcommons.Preconditions; import me.filoghost.fcommons.Preconditions;
import me.filoghost.fcommons.logging.Log; import me.filoghost.fcommons.logging.Log;
import me.filoghost.holographicdisplays.core.CorePreconditions;
import me.filoghost.holographicdisplays.nms.common.entity.ItemNMSPacketEntity; import me.filoghost.holographicdisplays.nms.common.entity.ItemNMSPacketEntity;
import me.filoghost.holographicdisplays.core.tracking.ItemLineTracker; import me.filoghost.holographicdisplays.core.tracking.ItemLineTracker;
import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager; import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager;
@ -48,6 +49,7 @@ public abstract class BaseItemHologramLine extends BaseClickableHologramLine {
} }
public void setItemStack(@Nullable ItemStack itemStack) { public void setItemStack(@Nullable ItemStack itemStack) {
CorePreconditions.checkMainThread();
checkNotDeleted(); checkNotDeleted();
if (itemStack != null) { if (itemStack != null) {

View File

@ -5,6 +5,7 @@
*/ */
package me.filoghost.holographicdisplays.core.base; package me.filoghost.holographicdisplays.core.base;
import me.filoghost.holographicdisplays.core.CorePreconditions;
import me.filoghost.holographicdisplays.nms.common.entity.TextNMSPacketEntity; import me.filoghost.holographicdisplays.nms.common.entity.TextNMSPacketEntity;
import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager; import me.filoghost.holographicdisplays.core.tracking.LineTrackerManager;
import me.filoghost.holographicdisplays.core.tracking.TextLineTracker; import me.filoghost.holographicdisplays.core.tracking.TextLineTracker;
@ -31,6 +32,7 @@ public abstract class BaseTextHologramLine extends BaseClickableHologramLine {
} }
public void setText(@Nullable String text) { public void setText(@Nullable String text) {
CorePreconditions.checkMainThread();
checkNotDeleted(); checkNotDeleted();
this.text = text; this.text = text;