44import cat .nyaa .nyaautils .NyaaUtils ;
55import org .bukkit .*;
66import org .bukkit .block .data .BlockData ;
7+ import org .bukkit .configuration .ConfigurationSection ;
78import org .bukkit .entity .Player ;
89import org .bukkit .inventory .ItemStack ;
910
@@ -33,6 +34,7 @@ public class ParticleData implements ISerializable {
3334 @ Serializable
3435 private Material material ;
3536 private Map <UUID , Long > lastSend = new HashMap <>();
37+ private Object data = null ;
3638
3739 public ParticleData () {
3840
@@ -103,7 +105,6 @@ public void sendParticle(UUID uuid, Location loc, ParticleLimit limit, long time
103105 lastSend .put (uuid , time );
104106 double distance = Bukkit .getViewDistance () * 16 ;
105107 distance *= distance ;
106- Object data = getData ();
107108 for (Player player : loc .getWorld ().getPlayers ()) {
108109 if (player .isValid () && !NyaaUtils .instance .particleTask .bypassPlayers .contains (player .getUniqueId ())
109110 && loc .distanceSquared (player .getLocation ()) <= distance ) {
@@ -113,7 +114,7 @@ public void sendParticle(UUID uuid, Location loc, ParticleLimit limit, long time
113114 offsetY > limit .getOffsetY () ? limit .getOffsetY () : offsetY ,
114115 offsetZ > limit .getOffsetZ () ? limit .getOffsetZ () : offsetZ ,
115116 extra > limit .getExtra () ? limit .getExtra () : extra ,
116- data );
117+ getData () );
117118 }
118119 }
119120 }
@@ -128,14 +129,37 @@ public void setMaterial(Material material) {
128129 }
129130
130131 private Object getData () {
131- if (particle .getDataType ().equals (ItemStack .class )) {
132- return new ItemStack (material );
133- } else if (particle .getDataType ().equals (BlockData .class )) {
134- return material .createBlockData ();
132+ if (data != null || particle .getDataType ().equals (Void .class )) {
133+ return data ;
134+ } else if (particle .getDataType ().equals (ItemStack .class ) && material != null && material .isItem ()) {
135+ data = new ItemStack (material );
136+ } else if (particle .getDataType ().equals (BlockData .class ) && material != null && material .isBlock ()) {
137+ data = material .createBlockData ();
135138 } else if (particle .getDataType ().equals (Particle .DustOptions .class )) {
136- return new Particle .DustOptions (Color .fromRGB (dustOptions_color ), (float ) dustOptions_size );
137- } else {
138- return null ;
139+ data = new Particle .DustOptions (Color .fromRGB (dustOptions_color ), (float ) dustOptions_size );
139140 }
141+ return data ;
142+ }
143+
144+ @ Override
145+ public void serialize (ConfigurationSection config ) {
146+ ISerializable .serialize (config , this );
147+ config .set ("version" , Bukkit .getVersion ());
148+ }
149+
150+ @ Override
151+ public void deserialize (ConfigurationSection config ) {
152+ if (config .getString ("version" , "" ).length () == 0 ) {
153+ String materialName = config .getString ("material" , null );
154+ if (materialName != null ) {
155+ Material m = Material .matchMaterial (materialName , true );
156+ if (m .isBlock () && config .isInt ("dataValue" )) {
157+ config .set ("material" , Bukkit .getUnsafe ().fromLegacy (m , (byte ) config .getInt ("dataValue" )).getMaterial ().name ());
158+ } else {
159+ config .set ("material" , Bukkit .getUnsafe ().fromLegacy (m ).name ());
160+ }
161+ }
162+ }
163+ ISerializable .deserialize (config , this );
140164 }
141165}
0 commit comments