mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-04 18:12:09 +01:00
386df52297
5a0150f586ed3eb15fe6f1f596d1a5a7d806f0f9 Fix ITEM_BREAK e6a3911057bd94d8bd7021cbb4923fb84fb106d1 Upstream merge d1cdcf8d4c3639f956474f02ed662517cffbe23e Remove old patch 068df64aeee368377e1673667bffc7a6dcf90554 Rebuild all patches
202 lines
No EOL
9.4 KiB
Diff
202 lines
No EOL
9.4 KiB
Diff
From 0000000000000000000000000000000000000000 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftEffect.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftEffect.java
|
|
@@ -0,0 +0,0 @@ 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();
|
|
+ break;
|
|
default:
|
|
datavalue = 0;
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -0,0 +0,0 @@ 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, new BlockPosition(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 {
|
|
@@ -0,0 +0,0 @@ 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, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ() ), id, false );
|
|
+ } else
|
|
+ {
|
|
+ net.minecraft.server.EnumParticle particle = null;
|
|
+ int[] extra = null;
|
|
+ for ( net.minecraft.server.EnumParticle p : net.minecraft.server.EnumParticle.values() )
|
|
+ {
|
|
+ if ( effect.getName().startsWith( p.b().replace("_", "") ) )
|
|
+ {
|
|
+ particle = p;
|
|
+ if ( effect.getData() != null )
|
|
+ {
|
|
+ if ( effect.getData().equals( org.bukkit.Material.class ) )
|
|
+ {
|
|
+ extra = new int[]{ id };
|
|
+ } else
|
|
+ {
|
|
+ extra = new int[]{ (id << 4) | data };
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ if ( extra == null )
|
|
+ {
|
|
+ extra = new int[0];
|
|
+ }
|
|
+ packet = new PacketPlayOutWorldParticles( particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), offsetX, offsetY, offsetZ, speed, particleCount, extra );
|
|
+ }
|
|
+ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -0,0 +0,0 @@ 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, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ() ), id, false );
|
|
+ } else
|
|
+ {
|
|
+ net.minecraft.server.EnumParticle particle = null;
|
|
+ int[] extra = null;
|
|
+ for ( net.minecraft.server.EnumParticle p : net.minecraft.server.EnumParticle.values() )
|
|
+ {
|
|
+ if ( effect.getName().startsWith( p.b().replace("_", "") ) )
|
|
+ {
|
|
+ particle = p;
|
|
+ if ( effect.getData() != null )
|
|
+ {
|
|
+ if ( effect.getData().equals( org.bukkit.Material.class ) )
|
|
+ {
|
|
+ extra = new int[]{ id };
|
|
+ } else
|
|
+ {
|
|
+ extra = new int[]{ (id << 4) | data };
|
|
+ }
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ if ( extra == null )
|
|
+ {
|
|
+ extra = new int[0];
|
|
+ }
|
|
+ packet = new PacketPlayOutWorldParticles( particle, true, (float) location.getX(), (float) location.getY(), (float) location.getZ(), offsetX, offsetY, offsetZ, speed, particleCount, extra );
|
|
+ }
|
|
+ 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()
|
|
--
|