mirror of
https://hub.spigotmc.org/stash/scm/spigot/spigot.git
synced 2025-08-05 16:48:51 +00:00

* Now Tracks Commands * Resolved Performance issue with Bukkit HandlerList method. Now all timings simply uses the Spigot System * Performance Improvement simply not using TimedRegisteredListener too * Bug with SyncChunkLoad tracking resolved. Now properly tracks many aspects of sync chunk load. * Reset/On/Off accuracy - should no longer have any issues turning it on/off during runtime, so this has been re-enabled. * Paste command on RCON now works * Now tracks everything related to plugins too, so you can easily see total plugin cost * Now tracks Tasks better and where they came from * Now tracks plugins event handlers to the Listener/Method name too. * Merged some Bukkit Patches so all timings changes are in 1 patch. * Moved back to a CLQ for CustomTimingsHandler for thread safety for when tasks are created Async but then executed sync.
175 lines
8.3 KiB
Diff
175 lines
8.3 KiB
Diff
From 0c6d17a37f739e479948043185c199b8678bc16c Mon Sep 17 00:00:00 2001
|
|
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
|
Date: Fri, 20 Dec 2013 21:36:06 +0000
|
|
Subject: [PATCH] Particle API
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftEffect.java b/src/main/java/org/bukkit/craftbukkit/CraftEffect.java
|
|
index 7de0de5..7eca388 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftEffect.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftEffect.java
|
|
@@ -55,6 +55,8 @@ public class CraftEffect {
|
|
Validate.isTrue(((Material) data).isBlock(), "Material is not a block!");
|
|
datavalue = ((Material) data).getId();
|
|
break;
|
|
+ case ITEM_BREAK:
|
|
+ datavalue = ((Material) data).getId();
|
|
default:
|
|
datavalue = 0;
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index f3ea8bf..167a1aa 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -810,28 +810,18 @@ public class CraftWorld implements World {
|
|
Validate.isTrue(effect.getData() == null, "Wrong kind of data for this effect!");
|
|
}
|
|
|
|
- int datavalue = data == null ? 0 : CraftEffect.getDataValue(effect, data);
|
|
- playEffect(loc, effect, datavalue, radius);
|
|
+ if (data != null && data.getClass().equals( org.bukkit.material.MaterialData.class )) {
|
|
+ org.bukkit.material.MaterialData materialData = (org.bukkit.material.MaterialData) data;
|
|
+ Validate.isTrue( materialData.getItemType().isBlock(), "Material must be block" );
|
|
+ spigot().playEffect( loc, effect, materialData.getItemType().getId(), materialData.getData(), 0, 0, 0, 1, 1, radius );
|
|
+ } else {
|
|
+ int dataValue = data == null ? 0 : CraftEffect.getDataValue( effect, data );
|
|
+ playEffect( loc, effect, dataValue, radius );
|
|
+ }
|
|
}
|
|
|
|
public void playEffect(Location location, Effect effect, int data, int radius) {
|
|
- Validate.notNull(location, "Location cannot be null");
|
|
- Validate.notNull(effect, "Effect cannot be null");
|
|
- Validate.notNull(location.getWorld(), "World cannot be null");
|
|
- int packetData = effect.getId();
|
|
- PacketPlayOutWorldEvent packet = new PacketPlayOutWorldEvent(packetData, location.getBlockX(), location.getBlockY(), location.getBlockZ(), data, false);
|
|
- int distance;
|
|
- radius *= radius;
|
|
-
|
|
- for (Player player : getPlayers()) {
|
|
- if (((CraftPlayer) player).getHandle().playerConnection == null) continue;
|
|
- if (!location.getWorld().equals(player.getWorld())) continue;
|
|
-
|
|
- distance = (int) player.getLocation().distanceSquared(location);
|
|
- if (distance <= radius) {
|
|
- ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
|
- }
|
|
- }
|
|
+ spigot().playEffect( location, effect, data, 0, 0, 0, 0, 1, 1, radius );
|
|
}
|
|
|
|
public <T extends Entity> T spawn(Location location, Class<T> clazz) throws IllegalArgumentException {
|
|
@@ -1321,6 +1311,56 @@ public class CraftWorld implements World {
|
|
// Spigot start
|
|
private final Spigot spigot = new Spigot()
|
|
{
|
|
+ @Override
|
|
+ public void playEffect( Location location, Effect effect, int id, int data, float offsetX, float offsetY, float offsetZ, float speed, int particleCount, int radius )
|
|
+ {
|
|
+ Validate.notNull( location, "Location cannot be null" );
|
|
+ Validate.notNull( effect, "Effect cannot be null" );
|
|
+ Validate.notNull( location.getWorld(), "World cannot be null" );
|
|
+ Packet packet;
|
|
+ if ( effect.getType() != Effect.Type.PARTICLE )
|
|
+ {
|
|
+ int packetData = effect.getId();
|
|
+ packet = new PacketPlayOutWorldEvent( packetData, location.getBlockX(), location.getBlockY(), location.getBlockZ(), id, false );
|
|
+ } else
|
|
+ {
|
|
+ StringBuilder particleFullName = new StringBuilder();
|
|
+ particleFullName.append( effect.getName() );
|
|
+ if ( effect.getData() != null && ( effect.getData().equals( Material.class ) || effect.getData().equals( org.bukkit.material.MaterialData.class ) ) )
|
|
+ {
|
|
+ particleFullName.append( '_' ).append( id );
|
|
+ }
|
|
+ if ( effect.getData() != null && effect.getData().equals( org.bukkit.material.MaterialData.class ) )
|
|
+ {
|
|
+ particleFullName.append( '_' ).append( data );
|
|
+ }
|
|
+ packet = new PacketPlayOutWorldParticles( particleFullName.toString(), (float) location.getX(), (float) location.getY(), (float) location.getZ(), offsetX, offsetY, offsetZ, speed, particleCount );
|
|
+ }
|
|
+ int distance;
|
|
+ radius *= radius;
|
|
+ for ( Player player : getPlayers() )
|
|
+ {
|
|
+ if ( ( (CraftPlayer) player ).getHandle().playerConnection == null )
|
|
+ {
|
|
+ continue;
|
|
+ }
|
|
+ if ( !location.getWorld().equals( player.getWorld() ) )
|
|
+ {
|
|
+ continue;
|
|
+ }
|
|
+ distance = (int) player.getLocation().distanceSquared( location );
|
|
+ if ( distance <= radius )
|
|
+ {
|
|
+ ( (CraftPlayer) player ).getHandle().playerConnection.sendPacket( packet );
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void playEffect( Location location, Effect effect )
|
|
+ {
|
|
+ CraftWorld.this.playEffect( location, effect, 0 );
|
|
+ }
|
|
};
|
|
|
|
public Spigot spigot()
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index c0a0b43..82bd22f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -1325,6 +1325,49 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
server.getServer().getPlayerList().moveToWorld( getHandle(), 0, false );
|
|
}
|
|
}
|
|
+
|
|
+ @Override
|
|
+ public void playEffect( Location location, Effect effect, int id, int data, float offsetX, float offsetY, float offsetZ, float speed, int particleCount, int radius )
|
|
+ {
|
|
+ Validate.notNull( location, "Location cannot be null" );
|
|
+ Validate.notNull( effect, "Effect cannot be null" );
|
|
+ Validate.notNull( location.getWorld(), "World cannot be null" );
|
|
+ Packet packet;
|
|
+ if ( effect.getType() != Effect.Type.PARTICLE )
|
|
+ {
|
|
+ int packetData = effect.getId();
|
|
+ packet = new PacketPlayOutWorldEvent( packetData, location.getBlockX(), location.getBlockY(), location.getBlockZ(), id, false );
|
|
+ } else
|
|
+ {
|
|
+ StringBuilder particleFullName = new StringBuilder();
|
|
+ particleFullName.append( effect.getName() );
|
|
+ if ( effect.getData() != null && ( effect.getData().equals( Material.class ) || effect.getData().equals( org.bukkit.material.MaterialData.class ) ) )
|
|
+ {
|
|
+ particleFullName.append( '_' ).append( id );
|
|
+ }
|
|
+ if ( effect.getData() != null && effect.getData().equals( org.bukkit.material.MaterialData.class ) )
|
|
+ {
|
|
+ particleFullName.append( '_' ).append( data );
|
|
+ }
|
|
+ packet = new PacketPlayOutWorldParticles( particleFullName.toString(), (float) location.getX(), (float) location.getY(), (float) location.getZ(), offsetX, offsetY, offsetZ, speed, particleCount );
|
|
+ }
|
|
+ int distance;
|
|
+ radius *= radius;
|
|
+ if ( getHandle().playerConnection == null )
|
|
+ {
|
|
+ return;
|
|
+ }
|
|
+ if ( !location.getWorld().equals( getWorld() ) )
|
|
+ {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ distance = (int) getLocation().distanceSquared( location );
|
|
+ if ( distance <= radius )
|
|
+ {
|
|
+ getHandle().playerConnection.sendPacket( packet );
|
|
+ }
|
|
+ }
|
|
};
|
|
|
|
public Player.Spigot spigot()
|
|
--
|
|
1.9.1
|
|
|