Refactoring
This commit is contained in:
parent
2ddb972128
commit
3008f28fb2
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Copyright (C) filoghost and contributors
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.api.v2;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.handler.PickupHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.CollectableLine;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.Collectable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public interface V2CollectableLine extends CollectableLine, V2HologramLine, Collectable {
|
||||
|
||||
@Override
|
||||
default boolean hasPickupCallback() {
|
||||
return getPickupHandler() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
default void invokePickupCallback(Player player) {
|
||||
try {
|
||||
PickupHandler pickupListener = getPickupHandler();
|
||||
if (pickupListener != null) {
|
||||
pickupListener.onPickup(player);
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
logPickupCallbackException(getCreatorPlugin(), player, t);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -7,6 +7,7 @@ package me.filoghost.holographicdisplays.plugin.api.v2;
|
|||
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.HologramLine;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.EditableHologramLine;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public interface V2HologramLine extends HologramLine, EditableHologramLine {
|
||||
|
@ -18,4 +19,8 @@ public interface V2HologramLine extends HologramLine, EditableHologramLine {
|
|||
getParent().lines().remove(this);
|
||||
}
|
||||
|
||||
default Plugin getCreatorPlugin() {
|
||||
return getParent().getCreatorPlugin();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -8,16 +8,17 @@ package me.filoghost.holographicdisplays.plugin.api.v2;
|
|||
import com.gmail.filoghost.holographicdisplays.api.handler.PickupHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.api.handler.TouchHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.ItemLine;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.ClickListener;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.PickupListener;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.BaseItemHologramLine;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class V2ItemLine extends BaseItemHologramLine implements ItemLine, V2HologramLine {
|
||||
public class V2ItemLine extends BaseItemHologramLine implements ItemLine, V2CollectableLine, V2TouchableLine {
|
||||
|
||||
private final V2Hologram parent;
|
||||
|
||||
private TouchHandler touchHandler;
|
||||
private PickupHandler pickupHandler;
|
||||
|
||||
public V2ItemLine(V2Hologram parent, ItemStack itemStack) {
|
||||
super(parent, itemStack);
|
||||
this.parent = parent;
|
||||
|
@ -30,40 +31,22 @@ public class V2ItemLine extends BaseItemHologramLine implements ItemLine, V2Holo
|
|||
|
||||
@Override
|
||||
public void setTouchHandler(TouchHandler touchHandler) {
|
||||
if (touchHandler != null) {
|
||||
super.setClickListener(new V3ClickListenerAdapter(touchHandler));
|
||||
} else {
|
||||
super.setClickListener(null);
|
||||
}
|
||||
this.touchHandler = touchHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TouchHandler getTouchHandler() {
|
||||
ClickListener clickListener = super.getClickListener();
|
||||
if (clickListener instanceof V3ClickListenerAdapter) {
|
||||
return ((V3ClickListenerAdapter) clickListener).getV2TouchHandler();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return touchHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPickupHandler(PickupHandler pickupHandler) {
|
||||
if (pickupHandler != null) {
|
||||
super.setPickupListener(new V3PickupListenerAdapter(pickupHandler));
|
||||
} else {
|
||||
super.setPickupListener(null);
|
||||
}
|
||||
this.pickupHandler = pickupHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PickupHandler getPickupHandler() {
|
||||
PickupListener pickupListener = super.getPickupListener();
|
||||
if (pickupListener instanceof V3PickupListenerAdapter) {
|
||||
return ((V3PickupListenerAdapter) pickupListener).getV2PickupHandler();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return pickupHandler;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,14 +7,15 @@ package me.filoghost.holographicdisplays.plugin.api.v2;
|
|||
|
||||
import com.gmail.filoghost.holographicdisplays.api.handler.TouchHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.TextLine;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.ClickListener;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.BaseTextHologramLine;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class V2TextLine extends BaseTextHologramLine implements TextLine, V2HologramLine {
|
||||
public class V2TextLine extends BaseTextHologramLine implements TextLine, V2TouchableLine {
|
||||
|
||||
private final V2Hologram parent;
|
||||
|
||||
private TouchHandler touchHandler;
|
||||
|
||||
public V2TextLine(V2Hologram parent, String text) {
|
||||
super(parent, text);
|
||||
this.parent = parent;
|
||||
|
@ -32,17 +33,12 @@ public class V2TextLine extends BaseTextHologramLine implements TextLine, V2Holo
|
|||
|
||||
@Override
|
||||
public void setTouchHandler(TouchHandler touchHandler) {
|
||||
super.setClickListener(new V3ClickListenerAdapter(touchHandler));
|
||||
this.touchHandler = touchHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TouchHandler getTouchHandler() {
|
||||
ClickListener clickListener = super.getClickListener();
|
||||
if (clickListener instanceof V3ClickListenerAdapter) {
|
||||
return ((V3ClickListenerAdapter) clickListener).getV2TouchHandler();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return touchHandler;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Copyright (C) filoghost and contributors
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.api.v2;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.handler.TouchHandler;
|
||||
import com.gmail.filoghost.holographicdisplays.api.line.TouchableLine;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.Clickable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public interface V2TouchableLine extends TouchableLine, V2HologramLine, Clickable {
|
||||
|
||||
@Override
|
||||
default boolean hasClickCallback() {
|
||||
return getTouchHandler() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
default void invokeClickCallback(Player player) {
|
||||
try {
|
||||
TouchHandler touchHandler = getTouchHandler();
|
||||
if (touchHandler != null) {
|
||||
touchHandler.onTouch(player);
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
logClickCallbackException(getCreatorPlugin(), player, t);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) filoghost and contributors
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.api.v2;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.handler.TouchHandler;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.ClickListener;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class V3ClickListenerAdapter implements ClickListener {
|
||||
|
||||
private final TouchHandler v2TouchHandler;
|
||||
|
||||
public V3ClickListenerAdapter(TouchHandler v2TouchHandler) {
|
||||
this.v2TouchHandler = v2TouchHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(@NotNull Player player) {
|
||||
v2TouchHandler.onTouch(player);
|
||||
}
|
||||
|
||||
public TouchHandler getV2TouchHandler() {
|
||||
return v2TouchHandler;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) filoghost and contributors
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.api.v2;
|
||||
|
||||
import com.gmail.filoghost.holographicdisplays.api.handler.PickupHandler;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.PickupListener;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class V3PickupListenerAdapter implements PickupListener {
|
||||
|
||||
private final PickupHandler v2PickupHandler;
|
||||
|
||||
public V3PickupListenerAdapter(PickupHandler v2PickupHandler) {
|
||||
this.v2PickupHandler = v2PickupHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPickup(@NotNull Player player) {
|
||||
v2PickupHandler.onPickup(player);
|
||||
}
|
||||
|
||||
public PickupHandler getV2PickupHandler() {
|
||||
return v2PickupHandler;
|
||||
}
|
||||
|
||||
}
|
|
@ -5,8 +5,28 @@
|
|||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.hologram.api;
|
||||
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.ClickListener;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.ClickableHologramLine;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.Clickable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public interface APIClickableHologramLine extends ClickableHologramLine, APIHologramLine {
|
||||
public interface APIClickableHologramLine extends ClickableHologramLine, APIHologramLine, Clickable {
|
||||
|
||||
@Override
|
||||
default boolean hasClickCallback() {
|
||||
return getClickListener() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
default void invokeClickCallback(Player player) {
|
||||
try {
|
||||
ClickListener clickListener = getClickListener();
|
||||
if (clickListener != null) {
|
||||
clickListener.onClick(player);
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
logClickCallbackException(getCreatorPlugin(), player, t);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Copyright (C) filoghost and contributors
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.hologram.api;
|
||||
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.CollectableHologramLine;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.PickupListener;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.Collectable;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public interface APICollectableHologramLine extends CollectableHologramLine, APIHologramLine, Collectable {
|
||||
|
||||
@Override
|
||||
default boolean hasPickupCallback() {
|
||||
return getPickupListener() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
default void invokePickupCallback(Player player) {
|
||||
try {
|
||||
PickupListener pickupListener = getPickupListener();
|
||||
if (pickupListener != null) {
|
||||
pickupListener.onPickup(player);
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
logPickupCallbackException(getCreatorPlugin(), player, t);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -7,9 +7,12 @@ package me.filoghost.holographicdisplays.plugin.hologram.api;
|
|||
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.HologramLine;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.EditableHologramLine;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public interface APIHologramLine extends HologramLine, EditableHologramLine {
|
||||
|
||||
void setChanged();
|
||||
|
||||
Plugin getCreatorPlugin();
|
||||
|
||||
}
|
||||
|
|
|
@ -5,14 +5,42 @@
|
|||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.hologram.api;
|
||||
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.ClickListener;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.ItemHologramLine;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.PickupListener;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.BaseItemHologramLine;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class APIItemHologramLine extends BaseItemHologramLine implements ItemHologramLine, APIClickableHologramLine {
|
||||
public class APIItemHologramLine extends BaseItemHologramLine implements ItemHologramLine, APIClickableHologramLine, APICollectableHologramLine {
|
||||
|
||||
private PickupListener pickupListener;
|
||||
private ClickListener clickListener;
|
||||
|
||||
public APIItemHologramLine(APIHologram parent, ItemStack itemStack) {
|
||||
super(parent, itemStack);
|
||||
}
|
||||
|
||||
public @Nullable PickupListener getPickupListener() {
|
||||
return pickupListener;
|
||||
}
|
||||
|
||||
public void setPickupListener(@Nullable PickupListener pickupListener) {
|
||||
checkNotDeleted();
|
||||
|
||||
this.pickupListener = pickupListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClickListener(@Nullable ClickListener clickListener) {
|
||||
checkNotDeleted();
|
||||
|
||||
this.clickListener = clickListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ClickListener getClickListener() {
|
||||
return clickListener;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -5,13 +5,17 @@
|
|||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.hologram.api;
|
||||
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.ClickListener;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.TextHologramLine;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.BaseTextHologramLine;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class APITextHologramLine extends BaseTextHologramLine implements TextHologramLine, APIClickableHologramLine {
|
||||
|
||||
private final APIHologram parent;
|
||||
|
||||
private ClickListener clickListener;
|
||||
|
||||
public APITextHologramLine(APIHologram parent, String text) {
|
||||
super(parent, text);
|
||||
this.parent = parent;
|
||||
|
@ -22,4 +26,16 @@ public class APITextHologramLine extends BaseTextHologramLine implements TextHol
|
|||
return parent.isAllowPlaceholders();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setClickListener(@Nullable ClickListener clickListener) {
|
||||
checkNotDeleted();
|
||||
|
||||
this.clickListener = clickListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ClickListener getClickListener() {
|
||||
return clickListener;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -5,32 +5,19 @@
|
|||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.hologram.base;
|
||||
|
||||
import me.filoghost.fcommons.logging.Log;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.ClickListener;
|
||||
import me.filoghost.holographicdisplays.common.Position;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.MustBeInvokedByOverriders;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public abstract class BaseClickableHologramLine extends BaseHologramLine {
|
||||
|
||||
private ClickListener clickListener;
|
||||
public abstract class BaseClickableHologramLine extends BaseHologramLine implements Clickable {
|
||||
|
||||
protected BaseClickableHologramLine(BaseHologram hologram) {
|
||||
super(hologram);
|
||||
}
|
||||
|
||||
public void onClick(Player player) {
|
||||
if (clickListener == null || !canInteract(player) || !isInClickRange(player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
clickListener.onClick(player);
|
||||
} catch (Throwable t) {
|
||||
Log.warning("The plugin " + getCreatorPlugin().getName() + " generated an exception"
|
||||
+ " when the player " + player.getName() + " clicked a hologram.", t);
|
||||
if (hasClickCallback() && canInteract(player) && isInClickRange(player)) {
|
||||
invokeClickCallback(player);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -46,16 +33,4 @@ public abstract class BaseClickableHologramLine extends BaseHologramLine {
|
|||
return distanceSquared < 5 * 5;
|
||||
}
|
||||
|
||||
public @Nullable ClickListener getClickListener() {
|
||||
return clickListener;
|
||||
}
|
||||
|
||||
@MustBeInvokedByOverriders
|
||||
public void setClickListener(@Nullable ClickListener clickListener) {
|
||||
checkNotDeleted();
|
||||
|
||||
this.clickListener = clickListener;
|
||||
setChanged();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,20 +6,16 @@
|
|||
package me.filoghost.holographicdisplays.plugin.hologram.base;
|
||||
|
||||
import me.filoghost.fcommons.Preconditions;
|
||||
import me.filoghost.fcommons.logging.Log;
|
||||
import me.filoghost.holographicdisplays.api.hologram.line.PickupListener;
|
||||
import me.filoghost.holographicdisplays.common.nms.entity.ItemNMSPacketEntity;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.tracking.ItemLineTracker;
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.tracking.LineTrackerManager;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.MustBeInvokedByOverriders;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public abstract class BaseItemHologramLine extends BaseClickableHologramLine {
|
||||
public abstract class BaseItemHologramLine extends BaseClickableHologramLine implements Collectable {
|
||||
|
||||
private ItemStack itemStack;
|
||||
private PickupListener pickupListener;
|
||||
|
||||
public BaseItemHologramLine(BaseHologram hologram, ItemStack itemStack) {
|
||||
super(hologram);
|
||||
|
@ -32,27 +28,9 @@ public abstract class BaseItemHologramLine extends BaseClickableHologramLine {
|
|||
}
|
||||
|
||||
public void onPickup(Player player) {
|
||||
if (pickupListener == null || !canInteract(player)) {
|
||||
return;
|
||||
if (hasPickupCallback() && canInteract(player)) {
|
||||
invokePickupCallback(player);
|
||||
}
|
||||
|
||||
try {
|
||||
pickupListener.onPickup(player);
|
||||
} catch (Throwable t) {
|
||||
Log.warning("The plugin " + getCreatorPlugin().getName() + " generated an exception"
|
||||
+ " when the player " + player.getName() + " picked up an item from a hologram.", t);
|
||||
}
|
||||
}
|
||||
|
||||
public @Nullable PickupListener getPickupListener() {
|
||||
return pickupListener;
|
||||
}
|
||||
|
||||
@MustBeInvokedByOverriders
|
||||
public void setPickupListener(@Nullable PickupListener pickupListener) {
|
||||
checkNotDeleted();
|
||||
|
||||
this.pickupListener = pickupListener;
|
||||
}
|
||||
|
||||
public @Nullable ItemStack getItemStack() {
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright (C) filoghost and contributors
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.hologram.base;
|
||||
|
||||
import me.filoghost.fcommons.logging.Log;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public interface Clickable {
|
||||
|
||||
boolean hasClickCallback();
|
||||
|
||||
void invokeClickCallback(Player player);
|
||||
|
||||
default void logClickCallbackException(Plugin plugin, Player player, Throwable t) {
|
||||
Log.warning("The plugin " + plugin.getName() + " generated an exception"
|
||||
+ " when the player " + player.getName() + " clicked a hologram.", t);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright (C) filoghost and contributors
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
package me.filoghost.holographicdisplays.plugin.hologram.base;
|
||||
|
||||
import me.filoghost.fcommons.logging.Log;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public interface Collectable {
|
||||
|
||||
boolean hasPickupCallback();
|
||||
|
||||
void invokePickupCallback(Player player);
|
||||
|
||||
default void logPickupCallbackException(Plugin plugin, Player player, Throwable t) {
|
||||
Log.warning("The plugin " + plugin.getName() + " generated an exception"
|
||||
+ " when the player " + player.getName() + " picked up an item from a hologram.", t);
|
||||
}
|
||||
|
||||
}
|
|
@ -6,6 +6,7 @@
|
|||
package me.filoghost.holographicdisplays.plugin.hologram.internal;
|
||||
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.BaseItemHologramLine;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class InternalItemHologramLine extends BaseItemHologramLine implements InternalHologramLine {
|
||||
|
@ -22,4 +23,20 @@ public class InternalItemHologramLine extends BaseItemHologramLine implements In
|
|||
return serializedConfigValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasClickCallback() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invokeClickCallback(Player player) {}
|
||||
|
||||
@Override
|
||||
public boolean hasPickupCallback() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invokePickupCallback(Player player) {}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
package me.filoghost.holographicdisplays.plugin.hologram.internal;
|
||||
|
||||
import me.filoghost.holographicdisplays.plugin.hologram.base.BaseTextHologramLine;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class InternalTextHologramLine extends BaseTextHologramLine implements InternalHologramLine {
|
||||
|
||||
|
@ -26,4 +27,12 @@ public class InternalTextHologramLine extends BaseTextHologramLine implements In
|
|||
return serializedConfigValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasClickCallback() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invokeClickCallback(Player player) {}
|
||||
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ public abstract class ClickableLineTracker<T extends BaseClickableHologramLine>
|
|||
protected void detectChanges() {
|
||||
super.detectChanges();
|
||||
|
||||
boolean spawnClickableEntity = line.getClickListener() != null;
|
||||
boolean spawnClickableEntity = line.hasClickCallback();
|
||||
if (this.spawnClickableEntity != spawnClickableEntity) {
|
||||
this.spawnClickableEntity = spawnClickableEntity;
|
||||
this.spawnClickableEntityChanged = true;
|
||||
|
|
|
@ -37,7 +37,7 @@ public class ItemLineTracker extends ClickableLineTracker<BaseItemHologramLine>
|
|||
protected void update(Collection<? extends Player> onlinePlayers) {
|
||||
super.update(onlinePlayers);
|
||||
|
||||
if (spawnItemEntity && hasTrackedPlayers()) {
|
||||
if (spawnItemEntity && hasTrackedPlayers() && line.hasPickupCallback()) {
|
||||
for (Player trackedPlayer : getTrackedPlayers()) {
|
||||
if (CollisionHelper.isInPickupRange(trackedPlayer, position)) {
|
||||
line.onPickup(trackedPlayer);
|
||||
|
|
|
@ -21,7 +21,7 @@ public class LineClickListener implements PacketListener {
|
|||
|
||||
// It is necessary to queue async click events to process them from the main thread.
|
||||
// Use a set to avoid duplicate click events to the same line.
|
||||
private final Set<ClickEvent> queuedClickEvents;
|
||||
private final Set<QueuedClickEvent> queuedClickEvents;
|
||||
|
||||
public LineClickListener() {
|
||||
linesByEntityID = new ConcurrentHashMap<>();
|
||||
|
@ -32,7 +32,7 @@ public class LineClickListener implements PacketListener {
|
|||
public boolean onAsyncEntityInteract(Player player, int entityID) {
|
||||
BaseClickableHologramLine line = linesByEntityID.get(entityID);
|
||||
if (line != null) {
|
||||
queuedClickEvents.add(new ClickEvent(player, line));
|
||||
queuedClickEvents.add(new QueuedClickEvent(player, line));
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
@ -41,8 +41,8 @@ public class LineClickListener implements PacketListener {
|
|||
|
||||
// This method is called from the main thread
|
||||
public void processQueuedClickEvents() {
|
||||
for (ClickEvent clickEvent : queuedClickEvents) {
|
||||
clickEvent.line.onClick(clickEvent.player);
|
||||
for (QueuedClickEvent queuedClickEvent : queuedClickEvents) {
|
||||
queuedClickEvent.line.onClick(queuedClickEvent.player);
|
||||
}
|
||||
queuedClickEvents.clear();
|
||||
}
|
||||
|
@ -58,12 +58,12 @@ public class LineClickListener implements PacketListener {
|
|||
}
|
||||
|
||||
|
||||
private static class ClickEvent {
|
||||
private static class QueuedClickEvent {
|
||||
|
||||
private final Player player;
|
||||
private final BaseClickableHologramLine line;
|
||||
|
||||
ClickEvent(Player player, BaseClickableHologramLine line) {
|
||||
QueuedClickEvent(Player player, BaseClickableHologramLine line) {
|
||||
this.player = player;
|
||||
this.line = line;
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ public class LineClickListener implements PacketListener {
|
|||
return false;
|
||||
}
|
||||
|
||||
ClickEvent other = (ClickEvent) obj;
|
||||
QueuedClickEvent other = (QueuedClickEvent) obj;
|
||||
return this.player.equals(other.player) && this.line.equals(other.line);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue