@@ -54,8 +54,8 @@ public class VirtualDisplayItem extends AbstractDisplayItem implements Reloadabl
5454 //cache chunk x and z
5555 private SimpleShopChunk chunkLocation ;
5656 //If packet initialized
57- private volatile boolean initialized = false ;
58- private volatile boolean isSpawned = false ;
57+ private final AtomicBoolean initialized = new AtomicBoolean ( false ) ;
58+ private final AtomicBoolean isSpawned = new AtomicBoolean ( false ) ;
5959 //packets
6060 private PacketContainer fakeItemSpawnPacket ;
6161 private PacketContainer fakeItemMetaPacket ;
@@ -100,7 +100,7 @@ public void fixDisplayNeedRegen() {
100100
101101 @ Override
102102 public boolean isSpawned () {
103- return isSpawned ;
103+ return isSpawned . get () ;
104104 }
105105
106106 @ Override
@@ -114,7 +114,7 @@ public void remove() {
114114 if (isSpawned ()) {
115115 sendPacketToAll (fakeItemDestroyPacket );
116116 unload ();
117- isSpawned = false ;
117+ isSpawned . set ( false ) ;
118118 }
119119 }
120120
@@ -138,7 +138,7 @@ public void safeGuard(@Nullable Entity entity) {
138138 @ Override
139139 public void spawn () {
140140 Util .ensureThread (false );
141- if (isSpawned || shop .isDeleted () || !shop .isLoaded ()) {
141+ if (isSpawned . get () || shop .isDeleted () || !shop .isLoaded ()) {
142142 return ;
143143 }
144144 if (new ShopDisplayItemSpawnEvent (shop , originalItemStack , DisplayType .VIRTUALITEM ).callCancellableEvent ()) {
@@ -148,7 +148,7 @@ public void spawn() {
148148 }
149149
150150 //lazy initialize
151- if (!initialized ) {
151+ if (!initialized . get () ) {
152152 initFakeDropItemPacket ();
153153 }
154154
@@ -162,15 +162,15 @@ public void spawn() {
162162 }*/
163163
164164 sendFakeItemToAll ();
165- isSpawned = true ;
165+ isSpawned . set ( true ) ;
166166 }
167167
168168 private void initFakeDropItemPacket () {
169169 fakeItemSpawnPacket = PacketFactory .createFakeItemSpawnPacket (entityID , getDisplayLocation ());
170170 fakeItemMetaPacket = PacketFactory .createFakeItemMetaPacket (entityID , getOriginalItemStack ().clone ());
171171 fakeItemVelocityPacket = PacketFactory .createFakeItemVelocityPacket (entityID );
172172 fakeItemDestroyPacket = PacketFactory .createFakeItemDestroyPacket (entityID );
173- initialized = true ;
173+ initialized . set ( true ) ;
174174 }
175175
176176 //Due to the delay task in ChunkListener
@@ -198,6 +198,10 @@ public void sendFakeItem(@NotNull Player player) {
198198 sendPacket (player , fakeItemVelocityPacket );
199199 }
200200
201+ public void sendDestroyItem (@ NotNull Player player ) {
202+ sendPacket (player , fakeItemDestroyPacket );
203+ }
204+
201205 private void sendPacket (@ NotNull Player player , @ NotNull PacketContainer packet ) {
202206 PROTOCOL_MANAGER .sendServerPacket (player , packet );
203207 }
@@ -272,6 +276,7 @@ public void onPacketSending(@NotNull PacketEvent event) {
272276 continue ;
273277 }
274278 target .packetSenders .add (player .getUniqueId ());
279+ target .sendDestroyItem (player );
275280 target .sendFakeItem (player );
276281 }
277282 return targetList ;
0 commit comments