diff options
Diffstat (limited to 'Minecraft.World/PlaySoundCommand.h')
| -rw-r--r-- | Minecraft.World/PlaySoundCommand.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Minecraft.World/PlaySoundCommand.h b/Minecraft.World/PlaySoundCommand.h new file mode 100644 index 00000000..1f43143b --- /dev/null +++ b/Minecraft.World/PlaySoundCommand.h @@ -0,0 +1,88 @@ +/* +package net.minecraft.commands.common; + +import net.minecraft.commands.BaseCommand; +import net.minecraft.commands.CommandSender; +import net.minecraft.commands.exceptions.CommandException; +import net.minecraft.commands.exceptions.UsageException; +import net.minecraft.network.packet.LevelSoundPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; + +public class PlaySoundCommand extends BaseCommand { + @Override + public String getName() { + return "playsound"; + } + + @Override + public int getPermissionLevel() { + return LEVEL_GAMEMASTERS; + } + + @Override + public String getUsage(CommandSender source) { + return "commands.playsound.usage"; + } + + @Override + public void execute(CommandSender source, String[] args) { + if (args.length < 2) { + throw new UsageException(getUsage(source)); + } + + int index = 0; + String sound = args[index++]; + ServerPlayer player = convertToPlayer(source, args[index++]); + double x = player.getCommandSenderWorldPosition().x; + double y = player.getCommandSenderWorldPosition().y; + double z = player.getCommandSenderWorldPosition().z; + double volume = 1; + double pitch = 1; + double minVolume = 0; + + if (args.length > index) x = convertArgToCoordinate(source, x, args[index++]); + if (args.length > index) y = convertArgToCoordinate(source, y, args[index++], 0, 0); + if (args.length > index) z = convertArgToCoordinate(source, z, args[index++]); + + if (args.length > index) volume = convertArgToDouble(source, args[index++], 0, Float.MAX_VALUE); + if (args.length > index) pitch = convertArgToDouble(source, args[index++], 0, 2); + if (args.length > index) minVolume = convertArgToDouble(source, args[index++], 0, 1); + + double maxDist = volume > 1 ? volume * 16 : 16; + double dist = player.distanceTo(x, y, z); + + if (dist > maxDist) { + if (minVolume > 0) { + double deltaX = x - player.x; + double deltaY = y - player.y; + double deltaZ = z - player.z; + double length = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ); + double soundX = player.x; + double soundY = player.y; + double soundZ = player.z; + + if (length > 0) { + soundX += deltaX / length * 2; + soundY += deltaY / length * 2; + soundZ += deltaZ / length * 2; + } + + player.connection.send(new LevelSoundPacket(sound, soundX, soundY, soundZ, (float) minVolume, (float) pitch)); + } else { + throw new CommandException("commands.playsound.playerTooFar", player.getAName()); + } + } else { + player.connection.send(new LevelSoundPacket(sound, x, y, z, (float) volume, (float) pitch)); + } + + logAdminAction(source, "commands.playsound.success", sound, player.getAName()); + } + + @Override + public boolean isValidWildcardPlayerArgument(String[] args, int argumentIndex) { + return argumentIndex == 1; + } +} + +*/
\ No newline at end of file |
